首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows Event_System_Foreground交付订单

Windows Event_System_Foreground交付订单
EN

Stack Overflow用户
提问于 2014-07-28 19:17:55
回答 1查看 195关注 0票数 0

在插件架构(特别是Sparx Systems Enterprise Architect)中工作,该架构既不转发原始键盘事件,也不转发熟知的键盘事件,可以使用RegisterHotKey()定义插件的键盘快捷键。这些热键是全局的,如果指定的组合键已经注册,则注册调用将失败。

由于执行插件的应用程序可以在多个实例中运行,因此需要根据哪个实例在前台来重复注册和注销热键。可以为此目的设置EVENT_SYSTEM_FOREGROUNDevent hook,但问题是:是否有保证交付订单?

我需要先通知失去焦点的实例,以便它可以在获得焦点的实例尝试注册热键之前注销它们。

这个是可能的吗?或者我必须实现同步才能确定?

EN

回答 1

Stack Overflow用户

发布于 2014-09-03 01:29:55

Windows DevCenter WM_ACTIVATE message

..Sent到激活的窗口和停用的窗口。如果两个窗口使用相同的输入队列,则同步发送消息,首先发送到被停用的顶层窗口的窗口过程,然后发送到被激活的顶层窗口的窗口过程。如果窗口使用不同的输入队列,则消息将异步发送,因此窗口将立即激活。

因此,如果你的所有窗口都来自同一个应用程序,共享同一个输入队列,那么它应该是有保证的。我猜EVENT_SYSTEM_FOREGROUND是建立在遵循旧逻辑的旧代码之上的(至少在http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/focus.c?view=markup的ReactOS中的实现(参见co_IntSetActiveWindow内部的EVENT_SYSTEM_FOREGROUND )做到了这一点)。

如果您使用Windows DevCenter SetWindowsHookEx function、filter WH_KEYBOARD仅监控原始托管进程中的键盘事件(无全局副作用),您的问题可能会更简单

在这种情况下,您的代码将在具有一个全局变量的一个exe中存在一次,不需要跨进程同步。

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

https://stackoverflow.com/questions/24994102

复制
相关文章

相似问题

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