如何响应特定的按键序列?

时间:2010-04-28 02:22:07

标签: c# .net

最终结果很简单,当用户按顺序键入字母“n”“o”“t”“e”时,我必须要发生一些事情。 '注意'就是这个词。

我正在为朋友做一个小应用程序,帮助他做笔记,我希望我的应用程序在机器上任何地方输入“note”时都可见。

这是我到目前为止所得到的:

if (e.KeyCode == neededLetter as Keys)
            {
                neededLetter = "o";
            }

我用“N”初始化neededLetter变量,但我被卡在那里。有什么帮助吗?

5 个答案:

答案 0 :(得分:2)

我发现处理全局键盘钩子的最简单方法是用AutoHotKey编写一个脚本。您可以将脚本编译到托盘应用程序,这样用户就不需要安装AutoHotKey。

这是你要求的一个粗略的例子。我没有测试它,但它应该捕获“note”键入的任何时间,如果它正在运行则激活记事本,或者如果它没有运行则启动记事本......

:*:note::
    IfWinExist, ahk_class Notepad
        WinActivate, ahk_class Notepad
    else
        Run, Notepad
return

答案 1 :(得分:1)

首先,要从机器上的任何地方进行操作,您需要挂钩所有键盘输入或找到其他方式来捕捉字母进入。我不确定如何在C#中完成它,但它应该是可能的。

对于实际打字,你会想要类似的东西(这不是完美的,必然):

if (e.KeyCode == neededLetter as Keys)
{
    if ( neededLetter == "n" )
    {
        neededLetter = "o";
    } else if ( neededLetter == "o" ) {
        neededLetter = "t";
    } else if ( neededLetter == "t" ) {
        neededLetter = "e";
    } else if ( neededLetter == "e" ) {
        // you now have the full sequence typed, show your app
    }
} else { // not sure if this is valid, but it's the idea
    neededLetter = "n"; // reset the sequence if another letter is typed
}

答案 2 :(得分:1)

你可能还想考虑在“n”之前或“e”之后匹配“非单词字符”(如空格或标点符号)。

否则,您的应用会识别其他字词,例如 nanotechnology ,这可能会让用户烦恼。

答案 3 :(得分:1)

尝试这样的事情:

这些是类级声明

string keySequence = "Note";
int nextKey = 0;

现在在事件处理程序中:

if (e.KeyCode != keySequence[nextKey++] as Keys)
{
    nextKey = 0;
}
if(nextKey == keySequence.Length)
{
    // The sequence successfully matched here, do what you want
}

答案 4 :(得分:0)

  1. 寻找N
  2. 是下一个字母O?如果不是,请重置为N
  3. 是下一个字母T?如果不是,请重置为N
  4. 是下一个字母E?如果不是,请重置为N
  5. show app。