在Windows (C++)应用程序中处理应用程序的第二次、第三次启动的批准方式是什么?在这种情况下,我需要正在运行的(第一个)实例执行一些特殊操作(弹出一个对话框),但第二个实例要终止。
在Mac上,在这种情况下,AppleEvents会向你发送一条're-open‘消息。Windows上的Mozilla使用DDE检查现有实例并传递命令行。尽管如此,这仍然是一个相当糟糕的解决方案。
发布于 2009-09-28 08:44:27
windows的方法是打开一个已命名的互斥锁,如果你能获得它,这意味着你是第一个实例,如果不能,就有另一个实例。在这一点上,你可以注册一条windows消息(该函数的字面意思是RegisterWindowsMessage),它会给你一条WM_消息,你可以发送给所有的窗口,只有你的应用程序会知道如何捕捉它,它允许你告诉你的初始副本打开一个对话框或w/e。
发布于 2009-09-28 13:49:56
How to limit 32-bit applications to one instance in Visual C++
“本文中使用的方法是在WinMain主题下的MSDN中描述的方法。它使用CreateMutex函数来创建可以跨进程检查的命名互斥锁。您必须拥有的代码位于可以在每个应用程序中重复使用的C++包装类中,而不是为每个应用程序复制相同的代码(作为单个实例)。”
SendMessage Function
“将指定的消息发送到一个或多个窗口。SendMessage函数调用指定窗口的窗口过程,直到窗口过程处理完消息后才返回。”
“需要使用HWND_BROADCAST进行通信的应用程序应使用RegisterWindowMessage函数获取用于应用程序间通信的唯一消息。”
RegisterWindowMessage“RegisterWindowMessage函数定义了一个新的窗口消息,保证该消息在整个系统中是唯一的。在发送或发布消息时可以使用该消息值。”
发布于 2009-09-28 08:43:49
在windows上,没有真正的解决方案,至少没有开箱即用的解决方案。
你可以使用互斥锁来做这样的事情,基本上是应用程序在启动时检查互斥锁,如果互斥锁不存在就创建它。
https://stackoverflow.com/questions/1486005
复制相似问题