首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测Windows应用程序的多次启动

检测Windows应用程序的多次启动
EN

Stack Overflow用户
提问于 2009-09-28 08:39:55
回答 4查看 324关注 0票数 1

在Windows (C++)应用程序中处理应用程序的第二次、第三次启动的批准方式是什么?在这种情况下,我需要正在运行的(第一个)实例执行一些特殊操作(弹出一个对话框),但第二个实例要终止。

在Mac上,在这种情况下,AppleEvents会向你发送一条're-open‘消息。Windows上的Mozilla使用DDE检查现有实例并传递命令行。尽管如此,这仍然是一个相当糟糕的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2009-09-28 08:44:27

windows的方法是打开一个已命名的互斥锁,如果你能获得它,这意味着你是第一个实例,如果不能,就有另一个实例。在这一点上,你可以注册一条windows消息(该函数的字面意思是RegisterWindowsMessage),它会给你一条WM_消息,你可以发送给所有的窗口,只有你的应用程序会知道如何捕捉它,它允许你告诉你的初始副本打开一个对话框或w/e。

票数 6
EN

Stack Overflow用户

发布于 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函数定义了一个新的窗口消息,保证该消息在整个系统中是唯一的。在发送或发布消息时可以使用该消息值。”

票数 2
EN

Stack Overflow用户

发布于 2009-09-28 08:43:49

在windows上,没有真正的解决方案,至少没有开箱即用的解决方案。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1486005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档