Per Hotkey geöffneter Form Fokus geben

  • VB.NET

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

    Per Hotkey geöffneter Form Fokus geben

    Siehe Titel.
    Wenn irgendein anderes Fenster den Fokus hat, und ich mein Anwendungsfenster z.B. mit STRG + Leertaste aufrufe, hat es nicht den Fokus, selbst wenn TopMost = True ist.
    Ich hab schon so ziemlich alles versucht, z.B. im Load- und Shown-Event Me.Focus einzusetzen, oder mit der SetFocus-API zu arbeiten, funktioniert alles nicht.
    Gibts ne Möglichkeit, das trotzdem hinzukriegen?

    VB.NET-Quellcode

    1. Public Class Hub
    2. Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
    3. Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
    4. Public Declare Function SetFocusAPI Lib "user32" Alias "SetFocus" (ByVal hwnd As IntPtr) As Integer
    5. Public Const WM_HOTKEY As Integer = &H312
    6. Public Const VK_SPACE As Integer = &H20
    7. Enum KeyModifier
    8. None = 0
    9. Alt = &H1
    10. Control = &H2
    11. Shift = &H4
    12. Winkey = &H8
    13. End Enum 'This enum is just to make it easier to call the registerHotKey function: The modifier integer codes are replaced by a friendly "Alt","Shift" etc.
    14. Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    15. If m.Msg = WM_HOTKEY Then
    16. Select Case m.WParam.ToInt32
    17. Case 1337
    18. If Form1.Visible Then
    19. Form1.Close()
    20. Else
    21. Form1.Show()
    22. End If
    23. End Select
    24. End If
    25. MyBase.WndProc(m)
    26. End Sub
    27. Private Sub Hub_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    28. RegisterHotKey(Me.Handle, 1337, KeyModifier.Control, VK_SPACE)
    29. End Sub
    30. Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
    31. Me.Close()
    32. End Sub
    33. End Class
    In Form Load/Show wird nicht funz, Focus mit Tastenkombinationen setzen.
    Du brauchst ein zusätzlichen Event der im hintengrund läuft und wartet bis du Tastenkombination drückst.
    Wäre mit Timer zu lösen oder wenn du kein Teimer haben wilst, dann KeyboardHooks verwenden.