Ich arbeite derzeit mit einem Programm, das im Hintergrund ausgeführt werden soll, sondern auch prüfen, ob "mod + o" gedrückt wird, dann etwas tun. Aber ich kann nicht herausfinden, wie ein vb.net-Programm auf Tastendruck hören kann, wenn das Programm nicht ausgewählt/Geöffnet ist.Hören Sie auf die Taste drücken, wenn das Programm im Hintergrund ist
0
A
Antwort
0
Sie können P/Invocation verwenden, um WinAPIs GetAsyncKeyState() function verwenden zu können, und überprüfen Sie das in einem Timer.
<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
EDIT:
Um den Code zu machen nur einmal pro Tastendruck ausführen, können Sie fügen Sie ein wenig While
-loop, bis eine der Tasten ausgeführt werden freigegeben (hinzuzufügen innerhalb Ihre If
-Anweisung):
While GetAsyncKeyState(Keys.LWin) AndAlso GetAsyncKeyState(Keys.O)
End While
Dieser Anschlag wird Ihr Code wird mehr als einmal ausgeführt, während Sie die Tasten gedrückt halten.
Bei der Verwendung dieser in einer Konsole-Anwendung ersetzen Sie einfach jedes System.Windows.Forms.Keys
und Keys
mit ConsoleKey
und ersetzen LWin
mit LeftWindows
.
ich die Nummer nicht wissen, aber der Name ist 'System.ConsoleKeyInfo', heres das Skript habe ich es herausfinden: ' Dim ModKey = ReadKey() '' Console.WriteLine (ModKey) ' –
Nvm, es gibt mir nur das für jede Presse ... –
@RichardOlsenSandberg: Der Name ist nicht genug. Auch 'System.ConsoleKeyInfo' ist eine Struktur, die Informationen über einen Tastendruck, nicht einen einzelnen Schlüssel enthält. Verwenden Sie stattdessen diese Methode: 'WriteLine (Convert.ToInt32 (modKey.Key))' und Sie erhalten die Nummer. –