2016-07-01 21 views

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.

+0

ich die Nummer nicht wissen, aber der Name ist 'System.ConsoleKeyInfo', heres das Skript habe ich es herausfinden: ' Dim ModKey = ReadKey() '' Console.WriteLine (ModKey) ' –

+0

Nvm, es gibt mir nur das für jede Presse ... –

+0

@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. –