Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум 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

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Как поместить 1 экземпляр программы на первый план

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Первый раз как в первый класс - Установка 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




 
Переход