VB.NET在最小化的同时检测Keypress

时间:2011-03-07 05:36:21

标签: .net vb.net keypress keyboard-hook

我希望能够检测到用户何时在我的程序之外按下F10或Ctrl + F10,并且在接收到按键时,它将发送文本到他们当前选择的任何内容(例如文本框)。如何以最简单的方式实现这一目标?

3 个答案:

答案 0 :(得分:2)

使用RegisterHotkey而不是键盘钩子来获取全局热键。

在几乎相同的问题上查看我的旧答案之一:listen for a key when the application is not focused

答案 1 :(得分:1)

这里的第一个问题是 F10 键已经是Windows应用程序的保留键。当用户按下它时,活动应用程序选择其菜单栏中的第一个菜单。这为用户提供了一种方便的方式来激活菜单而无需使用鼠标。您提出的劫持全球功能的建议是不体贴和不恰当的。我建议选择一个不同的快捷键,最好是一个没有标准含义的快捷键。

然后,您必须安装low-level keyboard hook(.NET应用程序支持的唯一类型的挂钩)。这是捕获应用程序外部发生的键盘事件的唯一方法。由于您要检测应用程序不在前台时发生的按键,因此您需要一个全局挂钩。

有一个很好的样本here on Stephen Toub's blog。它恰好用C#编写,但是converting to VB.NET is trivial。如果您希望完全添加现有代码,只需添加到项目中,就可以尝试this sample,但请注意,它包含许多您不需要的其他功能。

答案 2 :(得分:0)

您可以在按键事件中检查:

if not e.control and e.keycode = keys.F10 then
    <Statements>
elseif   e.keycode = keys.F10 then
    <Statements>
end if