关于 c:检测 Windows 应用程序的多次启动 | 珊瑚贝

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 上并没有真正的解决方案,至少不是开箱即用的。

您可以使用互斥锁来做这些事情,基本上应用程序在启动时检查互斥锁,如果它不存在则创建它。


您可能需要考虑 CreateMutex 方法的一个问题 – 命名的互斥锁可能是由第三方创建的。现在,大多数情况下,这不会成为问题,其他人没有理由阻止您的应用程序。但是,如果您正在制作一个执行某些重要操作的程序,这可能是个问题。考虑一下,如果您的程序是病毒扫描程序,病毒可以通过创建互斥锁来禁用它。

通常,CreateMutex 应该可以完成这项工作,但您应该注意此方法的局限性。

  • 我原以为您应该运行诸如服务之类的安全应用程序或在 Windows 安全桌面上运行。
  • Zan,你说得对,这只是一个例子。您可以将这个想法应用到 MS-Word / OpenOffice。但是他们不会屈服于这种做法 woudl thay ;-) 如果您有一个激进的竞争对手,他们可以使用这样的系统来阻止您的应用程序工作。


来源:https://www.codenong.com/1486005/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8995.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?