Detecting multiple launches of a Windows application
在 Windows (C) 应用程序中处理应用程序的第二次、第三次等启动的批准方式是什么?在这种情况下,我需要正在运行的(第一个)实例执行一些特殊操作(弹出一个对话框),但要终止辅助实例。
在 Mac 上,AppleEvents 在这种情况下会向您发送"重新打开"消息。 Windows 上的 Mozilla 使用 DDE 检查现有实例并传递命令行。感觉就像一个非常讨厌的解决方案,都是一样的。
windows的方式是打开一个命名的互斥体,如果你能得到它,说明你是第一个实例,如果没有,还有另一个。此时,您可以注册一个 Windows 消息(该函数实际上是 RegisterWindowsMessage),它为您提供一个 WM_ msg,您可以发送到所有窗口,并且只有您的应用程序知道捕获它,这允许您告诉您的初始副本打开一个对话框盒子或 w/e.
如何在 Visual C 中将 32 位应用程序限制为一个实例
"本文中使用的方法是在 MSDN 中 WinMain 主题下描述的方法。它使用 CreateMutex 函数创建一个可以跨进程检查的命名互斥锁。而不是重复相同的代码对于您将用作单个实例的每个应用程序,您必须拥有的代码位于一个 C package类中,您可以在每个应用程序中重复使用该类。"
发送消息函数
"将指定的消息发送到一个或多个窗口。SendMessage 函数调用指定窗口的窗口过程,直到窗口过程处理完消息才返回。"
"需要使用HWND_BROADCAST通信的应用程序应该使用RegisterWindowMessage函数来获取一个唯一的消息用于应用程序间通信。"
注册窗口消息
"RegisterWindowMessage函数定义了一个新的窗口消息,保证在整个系统中是唯一的。消息值可以在发送或发布消息时使用。"
在 Windows 上并没有真正的解决方案,至少不是开箱即用的。
您可以使用互斥锁来做这些事情,基本上应用程序在启动时检查互斥锁,如果它不存在则创建它。
您可能需要考虑
通常,