Wie kann ich anhand eines Hotkeys herausfinden, welches Programm es besitzt?
Wie kann ich anhand eines Hotkeys herausfinden, welches Programm es besitzt?
Antworten:
Achtung : Wenn Sie Windows 8 oder höher verwenden, sollten Sie dieses Dienstprogramm nicht verwenden, da dies zu Problemen führen kann (siehe Kommentare).
Wenn Sie ein Windows vor Windows 8 verwenden, Windows Hotkey Explorer
ist dies wahrscheinlich das, was Sie möchten. Dies wird auch in der StackOverflow-Frage erwähnt: Finden Sie heraus, bei welchem Prozess ein globaler Hotkey registriert wurde. (Windows API) .
Dies funktioniert für mich in Win10 (und wahrscheinlich auch in allen anderen vage aktuellen Windows-Versionen) ... und wurde hier von https://stackoverflow.com/a/43645062/995048 kopiert, da diese Seite in den Suchergebnissen an erster Stelle zu stehen scheint :
Eine Möglichkeit besteht darin, das Visual Studio-Tool Spy ++ zu verwenden .
Probieren Sie es aus:
- Führen Sie das Tool aus (für mich ist es "at"
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
oder wirdspyxx.exe
zum Überwachen von 32-Bit-Prozessen verwendet)- Wählen Sie in der Menüleiste Spion -> Nachrichten protokollieren ... (oder drücken Sie Ctrl+ M)
- Überprüfen Sie alle Fenster im System im weiteren Windows - Rahmen
- Wechseln Sie zur Registerkarte Nachrichten
- Klicken Sie auf die Schaltfläche Alle löschen
- Wählen Sie
WM_HOTKEY
im Listenfeld aus, oder aktivieren Sie die Option Tastatur in Nachrichtengruppen (wenn Sie mehr potenzielles Rauschen hören).- Klicken Sie auf die Schaltfläche OK
- Betätigen Sie den entsprechenden Hotkey ( z. B. Win+ R)
- Markieren Sie die
WM_HOTKEY
Zeile im Fenster Nachrichten (Alle Windows) , klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften ... im Kontextmenü- Im Nachrichteneigenschaften Dialog klicken Sie auf den Fenstergriff Link (dies wird der Griff für das Fenster, das die Nachricht empfangen)
- Klicken Sie im Dialogfeld Fenstereigenschaften auf die Schaltfläche Synchronisieren . Dadurch wird das Fenster in der Hauptstruktur des Spy ++ - Fensters angezeigt.
- Auf der Fenstereigenschaften Dialog wählen Sie den Prozess Registerkarte
- Klicken Sie auf den Link Prozess-ID . Dies zeigt Ihnen den Prozess (In meinem Win+ RFall:
EXPLORER
)
WM_HOTKEY
die Nachricht also nach dem Drücken des Hotkeys nicht im Nachrichtenprotokoll sehen , müssen Sie möglicherweise die 32-Bit-Version von Spy ++ ausführen .
Dies wurde wahrscheinlich auf Stack Overflow in diesem Thread beantwortet:
Finden Sie heraus, welcher Prozess einen globalen Hotkey registriert hat? (Windows API)
Hier ist Pauks Antwort:
Ihre Frage hat mein Interesse geweckt, also habe ich ein bisschen gegraben und obwohl ich leider keine richtige Antwort für Sie habe, dachte ich, ich würde teilen, was ich habe.
Ich habe dieses Beispiel für das Erstellen eines Tastatur-Hooks (in Delphi) gefunden, das 1998 geschrieben wurde, in Delphi 2007 jedoch mit ein paar Änderungen kompiliert werden kann.
Es ist eine DLL mit einem Aufruf
SetWindowsHookEx
, der eine Rückruffunktion durchläuft, die dann Tastatureingaben abfängt: In diesem Fall wird zum Spaß daran herumgebastelt, der Cursor von links nach rechts geändert usw. Eine einfache App ruft dann die DLL auf und meldet sich zurück Die Ergebnisse basieren auf einem TTimer-Ereignis. Wenn Sie interessiert sind, kann ich den auf Delphi 2007 basierenden Code veröffentlichen.Es ist gut dokumentiert und kommentiert, und Sie können es möglicherweise als Grundlage für die Ermittlung der Position verwenden, an der ein Tastendruck ausgeführt wird. Wenn Sie das Handle der Anwendung erhalten könnten, die die Tastenanschläge gesendet hat, könnten Sie es auf diese Weise zurückverfolgen. Mit diesem Handle können Sie ganz einfach die Informationen abrufen, die Sie benötigen.
Andere Apps haben versucht, Hotkeys über ihre Shortcuts zu ermitteln, da sie einen Shortcut-Schlüssel enthalten können, der nur ein anderer Begriff für Hotkey ist. Die meisten Anwendungen tendieren jedoch nicht dazu, diese Eigenschaft festzulegen, sodass sie möglicherweise nicht viel zurückgibt. Wenn Sie an dieser Route interessiert sind, hat Delphi Zugriff auf die
IShellLink
COM-Schnittstelle, über die Sie eine Verknüpfung laden und den Hotkey abrufen können:uses ShlObj, ComObj, ShellAPI, ActiveX, CommCtrl; procedure GetShellLinkHotKey; var LinkFile : WideString; SL: IShellLink; PF: IPersistFile; HotKey : Word; HotKeyMod: Byte; HotKeyText : string; begin LinkFile := 'C:\Temp\Temp.lnk'; OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL)); // The IShellLink implementer must also support the IPersistFile // interface. Get an interface pointer to it. PF := SL as IPersistFile; // Load file into IPersistFile object OleCheck(PF.Load(PWideChar(LinkFile), STGM_READ)); // Resolve the link by calling the Resolve interface function. OleCheck(SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI)); // Get hotkey info OleCheck(SL.GetHotKey(HotKey)); // Extract the HotKey and Modifier properties. HotKeyText := ''; HotKeyMod := Hi(HotKey); if (HotKeyMod and HOTKEYF_ALT) = HOTKEYF_ALT then HotKeyText := 'ALT+'; if (HotKeyMod and HOTKEYF_CONTROL) = HOTKEYF_CONTROL then HotKeyText := HotKeyText + 'CTRL+'; if (HotKeyMod and HOTKEYF_SHIFT) = HOTKEYF_SHIFT then HotKeyText := HotKeyText + 'SHIFT+'; if (HotKeyMod and HOTKEYF_EXT) = HOTKEYF_EXT then HotKeyText := HotKeyText + 'Extended+'; HotKeyText := HotKeyText + Char(Lo(HotKey)); if (HotKeyText = '') or (HotKeyText = #0) then HotKeyText := 'None'; ShowMessage('Shortcut Key - ' + HotKeyText); end;
Wenn Sie Zugriff auf Safari Books Online haben , finden Sie im Borland Delphi 6-Entwicklerhandbuch von Steve Teixeira und Xavier Pacheco einen guten Abschnitt zum Arbeiten mit Verknüpfungen / Shell-Links . Mein Beispiel oben ist eine abgeschlachtete Version von dort und dieser Site .
Ich hoffe, das hilft!