Frage zu Systemweiten Hotkeys

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von programmer71.

    Frage zu Systemweiten Hotkeys

    Hi,

    bin relativ neu in vb und habe ein Problem.
    Ich bin gerade dabei ein Overlay für ein Spiel zu programmieren (keine Angst ist kein Hacktool sondern hat diverse funktionen wie timer etc).
    Habe mir Systemweite Hotkeys deklariert:

    Quellcode

    1. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    2. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    3. Dim Key_oB = My.Settings.Key_oB
    4. Dim Key_oR = My.Settings.Key_oR
    5. Dim Key_eB = My.Settings.Key_eB
    6. Dim Key_eR = My.Settings.Key_eR
    7. Dim Key_Dr = My.Settings.Key_Dr
    8. Dim Key_Ba = My.Settings.Key_Ba
    9. RegisterHotKey(Me.Handle, 1, MOD_Ctrl, Key_oB)
    10. RegisterHotKey(Me.Handle, 2, MOD_Ctrl, Key_oR)
    11. RegisterHotKey(Me.Handle, 3, MOD_Ctrl, Key_eB)
    12. RegisterHotKey(Me.Handle, 4, MOD_Ctrl, Key_eR)
    13. RegisterHotKey(Me.Handle, 5, MOD_Ctrl, Key_Dr)
    14. RegisterHotKey(Me.Handle, 6, MOD_Ctrl, Key_Ba)


    Das Problem ist das ich zwar die Hotkeys ich sag mal "systemweit" (wenn mich in einem anderen Programm befinde) nutzen kann, aber wenn im Spiel bin muss ich zuerst auf die Form drücken damit er es erkennt ?(. Den Anzeigemodus des Spiels hab ich auf Randlos (Vollbildmodus) gestellt. Das Spiel selbst verwendet die Keys nicht! Die Form ist wegen Me.TopMost = True im Vordergrund.

    Gibt es eine Lösung für mein Problem?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    3. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    4. Private Const Key_NONE As Integer = &H0
    5. Private Const WM_HOTKEY As Integer = &H312
    6. Protected Overrides Sub WndProc(ByRef m As Message)
    7. 'die messages auswerten
    8. If m.Msg = WM_HOTKEY Then
    9. 'hier wird entschieden welcher hotkey es war
    10. 'einfach die übergebene id auswerten
    11. Select Case m.WParam
    12. Case 1
    13. MessageBox.Show("Sie haben A gedrückt!")
    14. Case 2
    15. MessageBox.Show("Sie haben die s gedrückt!")
    16. End Select
    17. End If
    18. MyBase.WndProc(m)
    19. End Sub
    20. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    21. 'die tab taste wieder freigeben
    22. UnregisterHotKey(Me.Handle, 1)
    23. UnregisterHotKey(Me.Handle, 2)
    24. End Sub
    25. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    26. 'die tab taste abfangen
    27. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.A)
    28. RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.S)
    29. End Sub
    30. End Class



    Lg Andre.....................
    Dazu brauchst du ein Windows-API Pack

    Und eine solche API lautet dann beispielsweise:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Auto Function FindWindow Lib "user32" ( _
    3. ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    4. Private Declare Auto Sub SetWindowPos Lib "User32" ( _
    5. ByVal hWnd As Integer, _
    6. ByVal hWndInsertAfter As Integer, _
    7. ByVal X As Integer, _
    8. ByVal Y As Integer, _
    9. ByVal cx As Integer, _
    10. ByVal cy As Integer, _
    11. ByVal wFlags As Integer)
    12. Public Sub TaskBarVisible(ByVal Visible As Boolean)
    13. Dim Handle As Integer = FindWindow("Shell_TrayWnd", "")
    14. If Visible = True Then
    15. SetWindowPos(Handle, 0, 0, 0, 0, 0, 64)
    16. Else
    17. SetWindowPos(Handle, 0, 0, 0, 0, 0, 128)
    18. End If
    19. End Sub
    20. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    21. TaskBarVisible(True)
    22. End Sub
    23. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    24. TaskBarVisible(False)
    25. End Sub
    26. End Class


    Download

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „programmer71“ ()