【发布时间】:2011-07-01 10:33:45
【问题描述】:
我在这里使用教程
http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx
这会捕获按键并将其打印到控制台。有没有人知道如何使这项工作用于控制和另一个键,比如ctrl + w?如果是这样,我可以得到一些指导,或者你能建议我需要研究什么来找出答案吗?
谢谢
【问题讨论】:
我在这里使用教程
http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx
这会捕获按键并将其打印到控制台。有没有人知道如何使这项工作用于控制和另一个键,比如ctrl + w?如果是这样,我可以得到一些指导,或者你能建议我需要研究什么来找出答案吗?
谢谢
【问题讨论】:
System.Windows.Forms.Control.ModifierKeys 应该可以解决问题,告诉您是否按下了 shift、alt 和/或 control。
例如;
if (Keys.W == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
应根据您的链接检查^W 组合。
【讨论】:
如果您想获取按下了哪个键,那么您可以使用文本框的 KeyPress 事件。
它有 KeyPressEventArgs 对象,其中包含“KeyChar”属性,该属性存储按键的字符。
查看此链接 How do I make a textbox that only accepts numbers?
这里的问题不同,但提供的解决方案也可以帮助您。
【讨论】:
以防万一真正的元问题是:如何实现热键,例如 Ctrl-W,您可以使用 Win32 RegisterHotKey API 来实现。
您链接到的示例使用低级键盘挂钩,虽然它们有其用途,但它们往往很少见且专门化(可能是自动测试输入记录应用程序或类似应用)。 LL 键盘挂钩也存在一些性能问题 - 请注意,它们可以听键,但即使您的代码对某个键做出反应,原始键仍会继续用于它最初指定的应用程序。此外,你必须小心你在 hookproc 中所做的事情——不要做任何可能阻塞的事情。最佳做法是只进行一些基本检查(例如检查它是否是您想要的密钥),然后向自己发布一条消息,然后在闲暇时处理该消息。
对于大多数通用应用程序,通常有更好的处理方式。如果您正在考虑热键,RegisterHotKey 是您的最佳选择。
【讨论】: