|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Как поместить 1 экземпляр программы на первый план |
|
Как поместить 1 экземпляр программы на первый план
|
lehha
Сообщения: n/a |
Всем привет!
Опять возник вопросик. Мне нужно при запуске 2 экземпляра программы активизировать 1, т.е. если прога запущена и при попытке запусить её 2 раз 1 копия выдвигалась на первый план. Вот код что я накалябал, все проблема в том что я не могу окно поместить на первый план(( HANDLE hMutex = CreateMutex (NULL, TRUE, "Моя программа"); if (GetLastError() == ERROR_ALREADY_EXISTS) { HWND oWnd = NULL; oWnd = ::FindWindow(NULL,"Моя программа"); //if (::IsIconic(oWnd)) // ::SendMessage(oWnd, WM_SYSCOMMAND, SC_RESTORE,0); ::SetForegroundWindow(oWnd); ::ShowWindow(oWnd, SW_RESTORE); CloseHandle(hMutex); ExitProcess(0); } |
|
Отправлено: 10:12, 19-01-2006 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать попробуй SetWindowPos(oWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
|
Отправлено: 10:59, 19-01-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
lehha
Сообщения: n/a |
pva
Непомогло, у меня такое чувство, что oWnd = ::FindWindow(NULL,"Моя программа"); не возвращаяет хендел окна. Можно ли как то активизировать окно через hMutex?? |
Отправлено: 11:13, 19-01-2006 | #3 |
lehha
Сообщения: n/a |
Да забыл сказать, что у меня диалоговое окно.
|
Отправлено: 11:18, 19-01-2006 | #4 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Может ShowWindow и SetForegroundWindow местами поменять, вот ето 100% будет работать:
HANDLE checkMutex=CreateMutex(NULL,TRUE,"Mutex unique name"); if(GetLastError()==ERROR_ALREADY_EXISTS){ HWND sypH=FindWindow("TMainWindowClass","MainWindowCaption"); if(sypH!=NULL){ HWND ownWS=GetWindow(sypH,GW_OWNER); ShowWindow(ownWS,SW_RESTORE); SetForegroundWindow(sypH); } }else |
|
Отправлено: 05:39, 22-01-2006 | #5 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Отладка что показывает?
std::string errorMsg(const char* msg, int code) { std::ostringstream ss; ss << msg << " failed with os error " << code; return ss.str(); }; try { hwnd1 = FindWindow(...); if (!hwnd1) throw std::runtime_error(errorMsg("FindWindow", GetLastError())); if (!SetWindowPos(...)) throw std::runtime_error(errorMsg("SetWindowPos", GetLastError())); } catch(std::exception& e) { // вывод последней ошибки MessageBox(0, e.what(), 0, MB_ICONERROR|MB_OK); throw; } |
Отправлено: 13:06, 23-01-2006 | #6 |
lehha
Сообщения: n/a |
Спасибо обязательно все попробую
|
Отправлено: 00:46, 24-01-2006 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Первый раз как в первый класс - Установка FreeBSD | gaddiman | Общий по FreeBSD | 21 | 01-04-2006 22:10 | |
DHTML Menu Builder: Как поместить меню в таблицу? | warezhka84 | Вебмастеру | 1 | 17-11-2005 15:25 | |
Как поместить задачу в системтрей | lehha | Программирование и базы данных | 5 | 10-06-2004 08:03 | |
Как поместить из Windows фотографии в интернет? | Disel | Хочу все знать | 3 | 20-05-2004 20:03 | |
как поместить на форум зипфайл? | Guest | Хочу все знать | 2 | 24-01-2004 16:38 |
|