用广播系统消息杀死旧进程
Killing old process with BroadcastSystemMessage
我有一个应用程序(本机C++,Windows),不能在一台机器上同时运行。我想要实现的行为是这样的:在尝试运行应用程序的第二个实例时,第一个实例停止运行。
为此,我想使用 WinApi 函数 BroadcastSystemMessage() 类似于下面的示例。
当应用程序启动时,它会发送:
BroadcastSystemMessage(BSF_POSTMESSAGE, &dwRecepients, 0x666, 0, 0);
但是,当我在调试模式下运行我的应用程序时,它不会命中
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;
请记住,消息不适用于控制台应用程序。
将消息类型更改为 WM_APPCOMMAND + 10
后,解决方案开始起作用。无论如何,它没有帮助,因为 BroadcastSystemMessage() 不会将消息广播到浏览器中的选项卡,这是我的情况。另外,我找不到允许使用BroadcastSystemMessage()发送的消息类型范围。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 其中降频广播实际上是有用的
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- MPI在某个进程找到解决方案时使用广播结束程序
- 广播消息供所有进程退出 (MPI)
- 如何使用广播将二维数组传递给所有进程
- 用广播系统消息杀死旧进程
- 如何向多个进程(但不是所有进程)广播或发送单个值