我有一个应用程序(本机C ++,Windows),无法在一台计算机上同时运行。我想要实现的行为是:在尝试运行应用程序的第二个实例时,第一个实例停止运行。
为此,我想使用WinApi函数BroadcastSystemMessage(),如下例所示。
当应用程序启动时,它发送:
BroadcastSystemMessage(BSF_POSTMESSAGE, &dwRecepients, 0x666, 0, 0);
但是,当我在调试模式下运行我的应用程序时,它没有点击
case 0x666:
int iClose = 0 + 1;
break;
当我启动另一个实例时其他消息正确处理(WM_KEYDOWN,WM_ACTIVATE等)。
我做错了什么?
答案 0 :(得分:0)
在我将消息类型更改为WM_APPCOMMAND + 10
后,解决方案开始起作用。无论如何,它没有帮助,因为BroadcastSystemMessage()不会向浏览器中的选项卡广播消息,这是我的情况。此外,我找不到允许与BroadcastSystemMessage()一起发送的消息类型范围。
答案 1 :(得分:0)
要播放自定义消息,您需要使用RegisterWindowMessage功能为其创建ID,例如:
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;
请记住,消息不适用于控制台应用程序。