【问题标题】:Keyboard hook get key combination (WPF)键盘挂钩获取组合键 (WPF)
【发布时间】:2013-06-13 13:46:19
【问题描述】:

我在这里尝试使用此帖子:Using global keyboard hook (WH_KEYBOARD_LL) in WPF / C# 我已经成功地工作了。

但是有些东西我无法理解。 它可以检测到按下的每一个键,但我喜欢让我的应用在组合键上做一些事情。

void KListener_KeyDown(object sender, RawKeyEventArgs args)
        {
            Console.WriteLine(args.Key.ToString());
            if (args.Key == Key.LeftCtrl && args.Key == Key.C)
            {
                MessageBox.Show(args.Key.ToString());
            }
        }

很明显,这是行不通的,因为只有每一个键都是空的(如果我理解正确的话)

所以我真的需要一些帮助才能让它适用于组合键,例如 Ctrl + C 有人可以把我推向正确的方向吗?

【问题讨论】:

  • 您可以使用标志和 KeyUp 事件来检查组合。

标签: c# wpf keyboard hook


【解决方案1】:

存储被按下的键的值,下次调用你的方法时检查这个存储的值和实际值是否是你的组合键。

    var lastKey;
void KListener_KeyDown(object sender, RawKeyEventArgs args)
        {

            Console.WriteLine(args.Key.ToString());
            if (lastKey == Key.LeftCtrl && args.Key == Key.C)
            {
                MessageBox.Show(args.Key.ToString());
            }
           lastKey = args.Key;
        }

【讨论】:

  • 那不行,因为当 C 被按下时lastKey != Key.LeftCtrl 你必须在 if 之后设置 lastKey
  • 完美运行!非常感谢
【解决方案2】:

为确保用户实际按下组合键,您必须检查两个键的状态,因此您必须跟踪它们的状态。

一种方法可以是:

List<Key> keys = new List<Key>();

void KListener_KeyDown(object sender, RawKeyEventArgs args)
{
   SetKeyDown(args.key);

   if(IsKeyDown(Key.LeftCtrl) && IsKeyDown(Key.C))
       MessageBox.Show("Woot!");
}

void KListener_KeyUp(object sender, RawKeyEventArgs args)
{
    SetKeyUp(args.key);
}

private bool IsKeyDown(Key key)
{
    return keys.Contains(key);
}

private void SetKeyDown(Key key)
{
    if(!keys.Contains(key)) 
        keys.Add(key);
}

private void SetKeyUp(Key key)
{
    if(keys.Contains(key)) 
        keys.Remove(key);
}

【讨论】:

    【解决方案3】:

    前段时间我依赖RegisterHotKey函数,效果还不错。我在 VB.NET 中使用了它,仅用于 CTRL/SHIFT/ALT + 字母或数字的组合,但这里有 a pretty detailed C# code 允许更多组合。

    【讨论】:

      猜你喜欢
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多