c++ - 使用 BroadcastSystemMessage 杀死旧进程

标签 c++ windows-messages

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

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

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

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

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

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

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

我做错了什么?

最佳答案

为了广播自定义消息,您需要使用 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;

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

关于c++ - 使用 BroadcastSystemMessage 杀死旧进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18712571/

相关文章:

c# - 拦截来自其他程序的鼠标点击

c++ - 在拖动窗口或按住菜单按钮期间,如何阻止 Windows 阻止程序?

web-services - 我应该从 Web 服务调用中释放自动实例化的 Delphi 对象吗?

c++ - 佳能 SDK : Download latest picture taken by two devices to host

c++ - 有人知道如何使用 QT 从控制台应用程序启动窗口吗?

c++ - 在对象工厂中注册一个对象创建者

c++ - 递归地使用单个函数显示具有最小值和最大值的三角形

c++ - 在 C 中的 fwrite 上检测光盘移除

c++ - TBB parallel_for 线程池

multithreading - 如何在线程内接收 WM_POWERBROADCAST?