在VB.NET中捕获Keypress事件

时间:2011-07-06 12:38:44

标签: .net vb.net visual-studio-2010

我感到很沮丧。我花了好几个小时寻找一段好的代码来捕获任何窗口中的按键事件,无论我的应用程序是否专注。我需要创建一个在后台工作的应用程序来捕获F5密钥。有没有人有任何代码?

4 个答案:

答案 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中添加处理程序,请使用AddHandlerAddressOf

AddHandler HookManager.KeyDown AddressOf KeyDown

函数KeyDownKeyUp看起来像这样。

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库。