AW: Systemweiten HotKey per Excle-Makro setzen
24.02.2026 21:30:36
xlKing
Hi,
mal abgesehen davon, dass es HotKey-Programme gibt, mit denen du unter Windows bestimmten Tasten beliebige Funktionen zuweisen kannst. Was willst du denn eigentlich machen? Und welche Windows-Version hast du?
Man könnte in Excel einen Timer setzen, der prüft ob eine bestimmte Tastenkombination gedrückt wurde. Das funktioniert auch ASync. Du müsstest nur die Start-Funktion ausführen. z.B. im Workbook-Open-Ereignis. Dann wird das Makro bei der Kombi ausgeführt. Es gibt jedoch, nach dem was ich so lese, in Windows 11 offenbar keine Möglichkeit, aus Excel heraus sich selbst in den Vordergrund zu bringen und zu aktivieren. Das scheint beabsichtigt, ist allerdings sehr nervig. Bis Windows 10 funktionierte das ohne Probleme.
Hier der Code:
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
Declare PtrSafe Function KeyPressed Lib "user32.dll" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer 'Wichtig Welche Taste wurde gedrückt
Dim tm As LongPtr
Dim KeyCombiPressed As Boolean
Dim HotKeyOn As Boolean
Sub StartTimer()
tm = SetTimer(Application.hwnd, 0, 250, AddressOf EvtChecker)
HotKeyOn = True
End Sub
Public Sub EvtChecker(ByVal hwnd As LongPtr, ByVal uMsg As LongPtr, ByVal wParam As LongPtr, ByVal lParam As LongPtr)
If CBool(KeyPressed(17) And &H8000) And CBool(KeyPressed(186) And &H8000) And KeyCombiPressed = False And HotKeyOn Then
KeyCombiPressed = True
Call Makro1
ElseIf CBool(KeyPressed(186)) = False Then
KeyCombiPressed = False
End If
End Sub
Sub StopTimer()
KillTimer Application.hwnd, 0
HotKeyOn = False
End Sub
Sub Makro1()
Debug.Print "Taste Strg+Ü wurde gedrückt am " & Now
End Sub
Gruß Mr. K.