【发布时间】:2012-04-11 15:09:48
【问题描述】:
我正在尝试制作一个像 Launchy/Enso/etc. 这样的应用程序,当用户按下 Caps Lock 键时会弹出。
为此,我需要安装一个低级键盘钩子 (WH_KEYBOARD_LL),随后我从中生成一个线程来显示对话框以呈现给用户。
问题是,当我以某种方式窃取焦点(例如,通过单击另一个窗口)并随后短暂按下 Caps Lock 时,我的窗口没有得到键盘输入:输入转到后台窗口,即使我的窗口是“活动的”(通过查看标题栏)。
当然,这很烦人,因为我最终会在文本处理器(或聊天框...)中输入类似 "visu"(用于“Visual Studio”)之类的内容,然后按下 Enter 键,却没有意识到它没有达到我的预期。
(有趣的是,在 3 秒(左右)的暂停后,我的窗口标题栏突然变为“非活动”,即使它一开始从未处于活动状态!)
我怎样才能绕过这个“保护”机制来真正地激活我的窗口?
【问题讨论】:
-
Raymond Chen 在 Old New Thing 上对此进行了报道……您需要使用 shell 热键功能,而不是试图窃取焦点。
-
@BenVoigt:如何在抑制输入的同时使用 Caps Lock 做到这一点?
-
我建议您从阅读雷蒙德的整个“军备竞赛”系列开始。 Here's the one I referred to already.
-
@BenVoigt:我已经阅读了那些......但就像我说的那样,这并没有告诉我如何在处理 Caps Lock 的同时正确地抑制它。
标签: c windows winapi timeout foreground