2013-09-10 3 views
1

У меня есть приложение (native C++, Windows), которое нельзя запускать одновременно на одной машине. Поведение, которое я хочу реализовать, следующее: при попытке запустить второй экземпляр приложения первый перестает работать.Убив старый процесс с BroadcastSystemMessage

Для этого я хочу использовать функцию WinApi BroadcastSystemMessage() что-то вроде приведенного ниже примера.

Когда приложение запуска он посылает:

BroadcastSystemMessage(BSF_POSTMESSAGE, &dwRecepients, 0x666, 0, 0); 

Но, когда я запускаю мое приложение в режиме отладки, он не ударил

case 0x666: 
    int iClose = 0 + 1; 
break; 

, когда я начинаю еще один экземпляр. Другие сообщения упорядочены правильно (WM_KEYDOWN, WM_ACTIVATE и другие).

Что я делаю неправильно?

+1

Это называется отдельным экземпляром приложения, там много примеров, как это сделать, обычно с именованным мьютексом. Например: http://support.microsoft.com/kb/243953 –

+0

Хорошо, но большинство этих примеров sipmply не позволяют запускать другой экземпляр. В моем случае - мне нужно убить старое. Существует вероятность того, что первый застрял в запущенных процессах, поэтому желательно убить старое, а не разрешать запуск нового. –

ответ

0

Для того, чтобы транслировать пользовательское сообщение, Вам необходимо создать идентификатор для него с функцией RegisterWindowMessage, например:

UINT msg666 = RegisterWindowMessage(L"custom_devil_message"); 

и использовать его как в передающем и принимающем код:

// sending code 
BroadcastSystemMessage(BSF_POSTMESSAGE, &dwRecepients, msg666, 0, 0); 

// receiving code 
case msg666: 
    int iClose = 0 + 1; 
break; 

Помните, что сообщения не работают для консольных приложений.

0

Решение приступило к работе после того, как я изменил тип сообщения на WM_APPCOMMAND + 10. В любом случае, это не помогло, потому что BroadcastSystemMessage() не транслирует сообщения на вкладки в браузере, что является моим делом. Кроме того, я не смог найти диапазон типов сообщений, разрешенных для отправки с помощью BroadcastSystemMessage().

Смежные вопросы