2011-08-19 48 views
2

我一直在处理输入事件系统。 我映射了我自己的键盘上的所有键,扫描码等,包括两个Windows键。 当我按下它们时,程序成功地接收到不同的keydown事件。 但是,当我释放按键时,会弹出开始菜单,在Windows模式下遮盖程序,甚至在全屏模式下将其最小化。是否可以通过Windows键(可能没有挂钩)来捕获Windows开始菜单弹出窗口?

所以我的问题在于抑制。

Arma 2,军事模拟器/游戏允许命令映射到这些键没有任何麻烦。

我必须在哪里捕捉该事件? 只要焦点一直在我自己的窗户上,我可以做到吗? 只要它正在运行,我会被禁用的win-key卡住吗? 还是别的?

谷歌搜索主要是由于Windows键也指产品密钥,当我找到某些东西时,通常会停用整个按钮。 我只想压制弹出窗口。

编辑: 我试过

case WM_SYSCOMMAND: 
     switch(wParam) 
     { 

     case SC_TASKLIST: 
      return 0; 

     default: 
      break; 
     } 

但是,这给了我非常奇怪的结果。 如果我将winkeys和winkeys垃圾邮件,它似乎工作,只要我这样做时移动鼠标,它没有,开始菜单会再次弹出。

编辑: 我也尝试过钩,但WIN7他们得到清除,如果回调需要太多的时间,当加载大量数据,可能发生,所以他们建议一个专门的线程,但我认为这是矫枉过正只需要处理一个密钥。

我只想知道开始菜单被调用的位置。我自己的计划?系统? 这太令人讨厌了,我正在考虑试图接触来自波希米亚互动的人,并询问他们是如何做到的。

只要这一个关键,sheesh微软...甚至与“超级键/超级键”搜索条件,我通常只得到平坦的禁用方法,从注册表更改到第三方后台程序。

Bah!

+0

windows key的另一个名称是superkey。它可能会给你不同的结果在谷歌 – CountMurphy

+0

我会恨你的游戏。我将如何回到我的桌面? –

+0

@David:control-alt-delete仍然可以工作 - 我希望。 :-) –

回答

1

原始输入API应该解决您的问题。

http://msdn.microsoft.com/en-us/library/ms645543.aspx

+0

有趣的是,我确实使用RawInput,但是你的帖子让我再次检查文档。您是否有机会参考注册设备时可以使用的“RIDEV_NOHOTKEYS”标志?原因似乎解决了它,只是想确定在这里 – Erius

+0

如果你提到你已经在使用RawInput的话,那将是更可取的 - 但在这种情况下,我想它是最好的。我没有特别注意RIDEV_NOHOTKEYS,但它听起来好像你已经解决了你的问题。 –

2

This artcile was relating to C# but may point you in the right direction;

MSDN

在同一桌面作为 调用线程的所有线程全局钩子监视的消息。一个线程专有的钩子只监视单个线程中的消息 。可以在与调用线程 相同的桌面中的任何应用程序的 上下文中调用全局挂钩过程,因此过程必须位于单独的DLL模块中。特定于线程的 挂钩过程仅在关联的线程的上下文中调用。

This was the most helpful link in order to answer the question in the above article

相关问题