我一直在做一个input事件系统。 我将自己的键盘上的所有按键,扫描码等都映射到了其中,包括两个Windows键。 当我按下它们时,程序成功地接收了不同的关键事件。 但是,当我释放按键时,会popup开始菜单,在Windows模式下遮盖程序,甚至在全屏模式下将其最小化。
所以我的问题在于压制这个。
Arma 2是一款军事模拟器/游戏,允许命令映射到这些键上,而不会有任何麻烦。
我在哪里必须抓住那个事件? 只要有重点,我可以为我自己的窗户吗? 只要正在运行,我会被卡住一个残疾人的胜利? 或者是其他东西?
谷歌search主要是没有结果,因为Windows键也指的是产品的关键,当我find了一些东西,通常是平淡禁用整个button。 我只是想压制popup窗口。
编辑:我试过了
case WM_SYSCOMMAND: switch(wParam) { case SC_TASKLIST: return 0; default: break; }
但那给了我很奇怪的结果。 如果我将winkeys和winkeys垃圾邮件,它似乎工作,只要我这样做的时候移动鼠标,它没有,开始菜单会再次popup。
编辑:我也尝试过钩子,但在Win7上,如果callback花费太多时间,这可能会发生在大数据加载时,所以他们build议一个专用的线程,但我认为这只是一个需要处理。
我只想知道开始菜单被调用的地方。 我自己的程序? 系统? 这太令人讨厌了,我正在考虑试图接触来自波希米亚互动的人,并问他们是如何做到的。
只要这一个关键,微软… …甚至用“超级键/超级键”search条件,我通常只是从registry更改到第三方后台程序得到平坦的禁用方法。
呸!
原始输入API应该可以解决您的问题。
这个artcile是关于C#,但可能会指出你在正确的方向;
来自MSDN :
全局钩子监视与调用线程相同桌面中的所有线程的消息。 线程特定的钩子只监视单个线程的消息。 全局钩子过程可以在与调用线程相同的桌面中的任何应用程序的上下文中调用,因此过程必须位于单独的DLL模块中。 线程特定的钩子过程仅在关联线程的上下文中被调用。
这是回答上面的文章中的问题最有用的链接