最终结果很简单,当用户按顺序键入字母“n”“o”“t”“e”时,我必须要发生一些事情。 '注意'就是这个词。
我正在为朋友做一个小应用程序,帮助他做笔记,我希望我的应用程序在机器上任何地方输入“note”时都可见。
这是我到目前为止所得到的:
if (e.KeyCode == neededLetter as Keys)
{
neededLetter = "o";
}
我用“N”初始化neededLetter
变量,但我被卡在那里。有什么帮助吗?
答案 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)