当程序在后台时听按键
Listen to key press when the program is in the background
我目前正在使用一个应该在后台 运行 的程序,但也会检查 "mod + o" 是否被按下,然后做一些事情。但是我无法弄清楚 vb.net 程序在未 Selected / Opened.[=10 时如何监听按键=]
您可以使用 P/Invocation 来使用 WinAPI 的 GetAsyncKeyState() function,然后在计时器中检查它。
<DllImport("user32.dll")> _
Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
End Function
Const KeyDownBit As Integer = &H8000
Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
If (GetAsyncKeyState(Keys.LWin) And KeyDownBit) = KeyDownBit AndAlso (GetAsyncKeyState(Keys.O) And KeyDownBit) = KeyDownBit Then
'Do whatever you want when 'Mod + O' is held down.
End If
End Sub
编辑:
为了让代码在每次按键时只执行一次,您可以在 运行 中添加一点 While
循环,直到任一按钮被释放(添加 在 你的 If
-语句中):
While GetAsyncKeyState(Keys.LWin) AndAlso GetAsyncKeyState(Keys.O)
End While
这将阻止您的代码在您按住这些键时多次执行。
在控制台应用程序中使用它时,只需将每个 System.Windows.Forms.Keys
和 Keys
替换为 ConsoleKey
,并将 LWin
替换为 LeftWindows
。
我目前正在使用一个应该在后台 运行 的程序,但也会检查 "mod + o" 是否被按下,然后做一些事情。但是我无法弄清楚 vb.net 程序在未 Selected / Opened.[=10 时如何监听按键=]
您可以使用 P/Invocation 来使用 WinAPI 的 GetAsyncKeyState() function,然后在计时器中检查它。
<DllImport("user32.dll")> _
Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
End Function
Const KeyDownBit As Integer = &H8000
Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
If (GetAsyncKeyState(Keys.LWin) And KeyDownBit) = KeyDownBit AndAlso (GetAsyncKeyState(Keys.O) And KeyDownBit) = KeyDownBit Then
'Do whatever you want when 'Mod + O' is held down.
End If
End Sub
编辑:
为了让代码在每次按键时只执行一次,您可以在 运行 中添加一点 While
循环,直到任一按钮被释放(添加 在 你的 If
-语句中):
While GetAsyncKeyState(Keys.LWin) AndAlso GetAsyncKeyState(Keys.O)
End While
这将阻止您的代码在您按住这些键时多次执行。
在控制台应用程序中使用它时,只需将每个 System.Windows.Forms.Keys
和 Keys
替换为 ConsoleKey
,并将 LWin
替换为 LeftWindows
。