【问题标题】:Trapping a key press捕获按键
【发布时间】:2011-07-01 10:33:45
【问题描述】:

我在这里使用教程

http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

这会捕获按键并将其打印到控制台。有没有人知道如何使这项工作用于控制和另一个键,比如ctrl + w?如果是这样,我可以得到一些指导,或者你能建议我需要研究什么来找出答案吗?

谢谢

【问题讨论】:

    标签: c# winapi


    【解决方案1】:

    System.Windows.Forms.Control.ModifierKeys 应该可以解决问题,告诉您是否按下了 shift、alt 和/或 control。

    例如;

    if (Keys.W == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
    

    应根据您的链接检查^W 组合。

    【讨论】:

      【解决方案2】:

      如果您想获取按下了哪个键,那么您可以使用文本框的 KeyPress 事件。

      它有 KeyPressEventArgs 对象,其中包含“KeyChar”属性,该属性存储按键的字符。

      查看此链接 How do I make a textbox that only accepts numbers?

      这里的问题不同,但提供的解决方案也可以帮助您。

      【讨论】:

        【解决方案3】:

        以防万一真正的元问题是:如何实现热键,例如 Ctrl-W,您可以使用 Win32 RegisterHotKey API 来实现。

        您链接到的示例使用低级键盘挂钩,虽然它们有其用途,但它们往往很少见且专门化(可能是自动测试输入记录应用程序或类似应用)。 LL 键盘挂钩也存在一些性能问题 - 请注意,它们可以听键,但即使您的代码对某个键做出反应,原始键仍会继续用于它最初指定的应用程序。此外,你必须小心你在 hookproc 中所做的事情——不要做任何可能阻塞的事情。最佳做法是只进行一些基本检查(例如检查它是否是您想要的密钥),然后向自己发布一条消息,然后在闲暇时处理该消息。

        对于大多数通用应用程序,通常有更好的处理方式。如果您正在考虑热键,RegisterHotKey 是您的最佳选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-03
          • 2016-05-28
          • 2019-10-29
          相关资源
          最近更新 更多