Tastenkombination abfragen, obwohl Programm nicht im Fokus ist?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Cozy schrieb:

    Man soll mit ein paar Tastenkombinationen die wichtigsten Programme und Aktionen machen können.
    Dann arbeite mit Hotkeys. Teste mal dies:
    Form mir 2 Buttons und einem Label.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal modifier As Integer, ByVal key As Integer) As Integer
    3. Private Declare Function UnregisterHotKey Lib "user32" (ByVal Hwnd As IntPtr, ByVal ID As Integer) As Integer
    4. Private Const Key_None As Integer = &H0
    5. Private Const Key_Alt As Integer = &H1
    6. Private Const Key_Ctrl As Integer = &H2
    7. Private Const Key_Shift As Integer = &H4
    8. Private Const Key_Win As Integer = &H8
    9. Private Const WM_HOTKEY As Integer = &H312
    10. Protected Overrides Sub WndProc(ByRef m As Message)
    11. If m.Msg = WM_HOTKEY Then
    12. Select Case CInt(m.WParam)
    13. Case 1 : Label1.Text = "A"
    14. Case 2 : Label1.Text = "Alt + B"
    15. Case 3 : Label1.Text = "Shift + Ctrl + C"
    16. Case 4 : Label1.Text = "Shift + Ctrl + Alt + Win + Q"
    17. End Select
    18. End If
    19. MyBase.WndProc(m)
    20. End Sub
    21. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    22. RegisterHotKey(Me.Handle, 1, Key_None, Keys.A)
    23. RegisterHotKey(Me.Handle, 2, Key_Alt, Keys.B)
    24. RegisterHotKey(Me.Handle, 3, Key_Shift Or Key_Ctrl, Keys.C)
    25. RegisterHotKey(Me.Handle, 4, Key_Shift Or Key_Ctrl Or Key_Alt Or Key_Win, Keys.Q)
    26. End Sub
    27. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    28. UnregisterHotKey(Me.Handle, 1)
    29. UnregisterHotKey(Me.Handle, 2)
    30. UnregisterHotKey(Me.Handle, 3)
    31. UnregisterHotKey(Me.Handle, 4)
    32. End Sub
    33. End Class
    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!
    @RodFromGermany
    Die shortcuts sind ja zum Glück kein Problem mehr. Mein Problem ist ja jetzt, dass ich nicht weiß, wie ich aus der settings.xml die Einträge auslesen kann.
    Ich kam, sah und vergaß, was ich vorhatte.
    @Cozy So was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Hotkeys As List(Of MyHotkeys)
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.Hotkeys = New List(Of MyHotkeys)
    5. Me.Hotkeys.Add(New MyHotkeys(1, "bla"))
    6. Me.Hotkeys.Add(New MyHotkeys(2, "blabla"))
    7. End Sub
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Using sw = New IO.StreamWriter("c:\Temp\settings.xml", False)
    10. Dim x = New System.Xml.Serialization.XmlSerializer(GetType(List(Of MyHotkeys)))
    11. x.Serialize(sw, Me.Hotkeys)
    12. End Using
    13. End Sub
    14. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    15. Dim keys As List(Of MyHotkeys)
    16. Using sr = New IO.StreamReader("c:\Temp\settings.xml")
    17. Dim serial As New System.Xml.Serialization.XmlSerializer(GetType(List(Of MyHotkeys)))
    18. keys = DirectCast(serial.Deserialize(sr), List(Of MyHotkeys))
    19. End Using
    20. MessageBox.Show(keys.Count.ToString)
    21. ' hier was mit der Liste tun
    22. End Sub
    23. End Class
    24. <Serializable>
    25. Public Class MyHotkeys
    26. Public Property Keys As Integer
    27. Public Property Name As String
    28. Public Sub New()
    29. End Sub
    30. Public Sub New(key As Integer, nam As String)
    31. Me.Keys = key
    32. Me.Name = nam
    33. End Sub
    34. End Class
    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!