Form auch ohne Fokus ansprechen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Wolvin.

    Form auch ohne Fokus ansprechen

    Guten Tag,
    also mein Problem ist folgendes: Ich benutze verschiedene Tastenkombinationen (Strg + NumPad 0-9) um mit meiner Form verschiedene Ereignisse auszulösen. Dies Funktioniert auch alles wunderbar, aber leider nur, wenn die Form im Fokus ist, sobald ich ein anderes Fenster anklicke funktioniert dies leider nicht mehr...

    Mein Code für die Tastensteuerung:

    VB.NET-Quellcode

    1. Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
    2. If My.Computer.Keyboard.CtrlKeyDown = True And GetAsyncKeyState(Keys.NumPad1) Then
    3. 'mach dies und das
    4. End If


    Wie schaffe ich das dies auch Funktioniert auch wenn die Form hinter anderen Fenstern verschwindet oder halt nicht mehr im Fokus ist. Ich habe schon länger nach einer Lösung gesucht, finde aber leider nichts...


    Vielen Dank!

    Wolvin schrieb:

    funktioniert dies leider nicht mehr...
    In welcher Form und in was für einer Prozedur steht dieser Code?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das steht alles im KeyDown

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    2. If My.Computer.Keyboard.CtrlKeyDown = True And GetAsyncKeyState(Keys.NumPad1) Then
    3. 'mach dies und das
    4. End If
    5. End Sub
    Die Tastaturereignis-Handler sind controlspezifisch. Wenn Dein Form nicht den Fokus hat, erfasst das Control mit dem Fokus diese Ereignisse. Und wenn kein Control den Fokus hat, schaut das System nach, ob ein globaler KeyEvent-Handler für diese Tastenkombination vorhanden ist (das geschieht im Übrigen IMMER VOR Deinem eigenen Tastaturhandler). Ich denke, Du musst innerhalb Deiner Applikation einen systemweiten Tastatur-Hook erstellen, der dann auf Deine Tastatureingaben reagieren kann.
    @us4711 Jou.

    Wolvin schrieb:

    KeyDown
    Wenn das ohne Fokus funktionieren soll, nimm mal einen Timer.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @us4711

    Ganz einfach^^

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. If My.Computer.Keyboard.CtrlKeyDown = True And GetAsyncKeyState(Keys.NumPad1) Then
    3. 'tu irgendwas
    4. End If
    5. End Sub


    Timer Enabled auf True und Intervall auf 100