使用BroadcastSystemMessage杀死旧进程

时间:2013-09-10 07:06:16

标签: c++ windows-messages

我有一个应用程序(本机C ++,Windows),无法在一台计算机上同时运行。我想要实现的行为是:在尝试运行应用程序的第二个实例时,第一个实例停止运行。

为此,我想使用WinApi函数BroadcastSystemMessage(),如下例所示。

当应用程序启动时,它发送:

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

但是,当我在调试模式下运行我的应用程序时,它没有点击

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

当我启动另一个实例时其他消息正确处理(WM_KEYDOWN,WM_ACTIVATE等)。

我做错了什么?

2 个答案:

答案 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;

请记住,消息不适用于控制台应用程序。