1

我有一个不能在一台机器上同时运行的应用程序(本机 C++、Windows)。我要实现的行为是这样的:在尝试运行应用程序的第二个实例时,第一个实例停止运行。

为此,我想使用 WinApi 函数 BroadcastSystemMessage() 类似于下面的示例。

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

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

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

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

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

我做错了什么?

4

2 回答 2

0

在我将消息的类型更改为WM_APPCOMMAND + 10. 无论如何,它没有帮助,因为 BroadcastSystemMessage() 不会将消息广播到浏览器中的选项卡,这是我的情况。此外,我找不到允许使用 BroadcastSystemMessage() 发送的消息类型范围。

于 2013-09-16T06:44:57.213 回答
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;

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

于 2014-04-30T13:16:16.490 回答