У меня есть приложение (родной C ++, Windows), которое не может быть запущено одновременно на одной машине. Я хочу реализовать следующее: при попытке запустить второй экземпляр приложения первый перестает работать.
Для этого я хочу использовать функцию WinApi BroadcastSystemMessage (), как в примере ниже.
При запуске приложения оно отправляет:
BroadcastSystemMessage(BSF_POSTMESSAGE, &dwRecepients, 0x666, 0, 0);
Но когда я запускаю свое приложение в режиме отладки, оно не срабатывает
case 0x666:
int iClose = 0 + 1;
break;
когда я начинаю другой экземпляр. Остальные сообщения правильно распределены (WM_KEYDOWN, WM_ACTIVATE и другие).
Что я делаю не так?
Для трансляции пользовательского сообщения необходимо создать для него идентификатор с 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;
Помните, что сообщения не работают для консольных приложений.
Решение начало работать после того, как я изменил тип сообщения на WM_APPCOMMAND + 10
, В любом случае, это не помогло, потому что BroadcastSystemMessage () не передает сообщения на вкладки в браузере, что является моим случаем. Кроме того, я не смог найти диапазон типов сообщений, которые могут быть отправлены с BroadcastSystemMessage ().