【问题标题】:Detect when some Numpad key is pressed, Form not on focus检测何时按下某些 Numpad 键,表单不在焦点上
【发布时间】:2012-11-02 14:00:32
【问题描述】:

我很难找到一种方法来做到这一点。

我希望我的应用程序在用户按下数字键盘上的某个键时为用户显示一个消息框。主要问题是它必须在表格失焦的情况下完成。找不到使用 VB.NET 的任何方法

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    声明:

    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer
    Dim result As Integer
    

    表单加载:

    Timer1.interval = 1
    timer1.start()
    


    Timer1.tick :

    For i = 1 To 255 
    result = 0 
    result = GetAsyncKeyState (i)
    If result = -32767 Then 
                If i = 103 Then
                    MsgBox("Num 7")
                End If
    End If 
    Next i 
    

    :)

    【讨论】:

    • 谢谢,伙计。它就像我需要的那样工作。但我还有一个问题,我在哪里可以从键盘上的所有键中获取值?就像你在上面使用的那样:If i = 103 Then 刚刚得到它,如果有人通过 Google 到达这里:help.adobe.com/en_US/AS2LCR/Flash_10.0/…
    • 另一个问题,如何将键值转换为键码?所以我不必测试每个键?
    【解决方案2】:

    您实际上在谈论的是全局键盘钩子,因为您想收听不是针对您的程序的消息。 CodePlex(Application and Global Mouse and Keyboard Hooks Library) 上有一个很好的库,它为 .Net 实现了这个。

    这是一个非常简单的示例,您需要下载上述库并将MouseKeyboardActivityMonitor 添加到您的参考文献中。

    Imports MouseKeyboardActivityMonitor
    Imports MouseKeyboardActivityMonitor.WinApi
    
    Public Class Form1
        Private WithEvents myKeyboardHookManager As KeyboardHookListener
        Dim hookEnabled As Boolean
        Public Sub New()
    
            InitializeComponent()
    
            myKeyboardHookManager = New KeyboardHookListener(New GlobalHooker())
            myKeyboardHookManager.Enabled = True
        End Sub
    
        Private Sub HookManager_KeyDown(sender As Object, e As KeyEventArgs)
            Select Case e.KeyCode
                Case Keys.NumPad0 To Keys.NumPad9
                    MessageBox.Show("KeyCode = " & e.KeyCode & vbCrLf & "Number = " & (e.KeyCode - 96))
    
            End Select
    
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If hookEnabled Then
                hookEnabled = False
                RemoveHandler myKeyboardHookManager.KeyDown, AddressOf HookManager_KeyDown
            Else
                hookEnabled = True
                AddHandler myKeyboardHookManager.KeyDown, AddressOf HookManager_KeyDown
            End If
        End Sub
    End Class
    

    【讨论】:

    • 我收到此错误:创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:无法加载文件或程序集“MouseKeyboardActivityMonitor,版本=3.0.1.9571,Culture=neutral,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。
    • @blacblu 你正在运行什么版本的视觉工作室。您可能需要验证您是否包含正确的 dll 32 位或 64 位。还要确保你已经下载并编译了项目。
    • 使用 Visual Studio 2012,尝试使用 64 和 32,虽然使用 32 我无法导入 MouseKeyboardActivityMonitor.WinApi 编辑:设法将 .winApi 包含在 32 中,它可以工作,谢谢跨度>
    • @blacblu 很高兴它对你有用,我使用 vs2012 对其进行了测试,不得不将它从 AnyCpu 更改为 x64
    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多