我感到很沮丧。我花了好几个小时寻找一段好的代码来捕获任何窗口中的按键事件,无论我的应用程序是否专注。我需要创建一个在后台工作的应用程序来捕获F5密钥。有没有人有任何代码?
答案 0 :(得分:1)
我知道这都是C#和OP询问VB.Net,但概念是一样的......
我编写了一个使用this project处理全局按键操作的简单实用程序。下载库,并在项目中添加对它的引用,然后导入Gma.UserActivityMonitor
命名空间
在表单加载事件中,添加处理程序。
HookManager.KeyDown += KeyDown;
HookManager.KeyUp += KeyUp;
在这些方法中,我正在寻找要按下的控制键。
void KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey)
{
//Do Stuff
}
}
void KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey)
{
//Do Stuff
}
}
按照编写方式,按键仍可供其他应用程序处理。如果要“捕获”密钥并暂停其他应用程序的处理,请在事件处理程序中将Handled属性设置为true。
e.Handled = true;
编辑:将上述代码转换为VB.Net
要在VB.Net中添加处理程序,请使用AddHandler
和AddressOf
。
AddHandler HookManager.KeyDown AddressOf KeyDown
函数KeyDown
和KeyUp
看起来像这样。
Sub KeyDown(ByVal sender as Object, ByVal e as KeyEventArgs)
If e.KeyCode = Keys.LControlKey Or e.KeyCode = Keys.RControlKey Then
'Do Stuff
End If
End Sub
答案 1 :(得分:0)
您必须使用表格按键事件...以您想要捕捉F5按键事件的形式。
检查一下: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=vs.71).aspx
答案 2 :(得分:0)
为了在表单没有焦点时捕获关键的新闻事件,你需要进入一些相当低级别的东西。在C#或VB.NET中通常不可能使用全局键盘钩子,但是这篇文章可能对您有所帮助:
Managing Low-Level Keyboard Hooks in VB .NET
*请务必在文章
下面的评论中查看Lucianovici的笔记答案 3 :(得分:0)
有this topic的副本,我详细回答了VB.NET解决方案。它使用了Tim Coker建议的相同Hook库。