Убить старый процесс с помощью BroadcastSystemMessage

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

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

При запуске приложения оно отправляет:

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

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

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

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

Что я делаю не так?

1

Решение

Для трансляции пользовательского сообщения необходимо создать для него идентификатор с 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 ().

0

По вопросам рекламы [email protected]