Wie kann ich feststellen, welcher Prozess einen Hotkey in Windows besitzt?

97

Wie kann ich anhand eines Hotkeys herausfinden, welches Programm es besitzt?

aldrinleal
quelle
1
welche version von windows?
Ivo Flipse

Antworten:

46

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 Explorerist 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) .

Hans-Peter Störr
quelle
32
Der HotKey-Explorer ist in Windows 8 ziemlich kaputt - beim Start drückt er im Grunde jeden Hotkey, wodurch alle möglichen seltsamen Dinge passieren, wonach er abstürzt und getötet werden muss.
Nathan Ridley
2
@ NathanRidley Ugh. Ich wünschte, ich hätte Ihren Kommentar schon einmal gelesen. Dies war eine schreckliche Kombination mit Win8 und Autohotkey. Diese Art von Tastatur-Bashing hätte auch ernsthaften Schaden anrichten können.
VitalyB
11
Verwenden Sie den Hotkey-Explorer auch unter Windows 10 NICHT. Es macht dasselbe, was @ NathanRidley erwähnt hat. Gerade auf die harte Tour rausgefunden.
Artem Russakovskii
5
Auch unter Windows 7 ziemlich bescheuert. Die Auflösung meines Hauptmonitors wurde auf 640 x 480 (Multi-Monitor-Setup) umgestellt.
Costa
3
Ich wünschte, es gäbe ein neueres Tool wie Hotkey Exporer, das für Windows 8 und 10
funktioniert
60

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:

  1. 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.exeoder wird spyxx.exezum Überwachen von 32-Bit-Prozessen verwendet)
  2. Wählen Sie in der Menüleiste Spion -> Nachrichten protokollieren ... (oder drücken Sie Ctrl+ M)
  3. Überprüfen Sie alle Fenster im System im weiteren Windows - Rahmen
  4. Wechseln Sie zur Registerkarte Nachrichten
  5. Klicken Sie auf die Schaltfläche Alle löschen
  6. Wählen Sie WM_HOTKEYim Listenfeld aus, oder aktivieren Sie die Option Tastatur in Nachrichtengruppen (wenn Sie mehr potenzielles Rauschen hören).
  7. Klicken Sie auf die Schaltfläche OK
  8. Betätigen Sie den entsprechenden Hotkey ( z. B. Win+ R)
  9. Markieren Sie die WM_HOTKEYZeile im Fenster Nachrichten (Alle Windows) , klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften ... im Kontextmenü
  10. Im Nachrichteneigenschaften Dialog klicken Sie auf den Fenstergriff Link (dies wird der Griff für das Fenster, das die Nachricht empfangen)
  11. Klicken Sie im Dialogfeld Fenstereigenschaften auf die Schaltfläche Synchronisieren . Dadurch wird das Fenster in der Hauptstruktur des Spy ++ - Fensters angezeigt.
  12. Auf der Fenstereigenschaften Dialog wählen Sie den Prozess Registerkarte
  13. Klicken Sie auf den Link Prozess-ID . Dies zeigt Ihnen den Prozess (In meinem Win+ RFall: EXPLORER)
user995048
quelle
3
Dies ist eine großartige Antwort, es sind viele Schritte, aber es gibt perfekt detaillierte Informationen. Beachten Sie, dass Sie SPY ++ irgendwie installieren müssen und dass Sie die 64-Bit-Version auf einem 64-Bit-PC ausführen müssen, da dies sonst nicht funktioniert. Ich denke, der einfachste Weg, SPY ++ zu installieren, ist die Installation von Visual Studio 2017. Achten Sie darauf, die C ++ - Nutzdaten auszuwählen. Für Nicht-Entwickler ist dies möglicherweise etwas zu viel Arbeit.
Roy T.
2
Dies ist perfekt. Aufwändig, aber perfekt!
Angularsen
16
Gute Antwort! Nur eine Anmerkung: Die 64-Bit-Version von Spy ++ fängt nur Nachrichten für 64-Bit-Anwendungen ab . Wenn Sie WM_HOTKEYdie 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 .
Dawid Ferenczy Rogožan
Der Link sollte auf eine neue Dokumentationsseite aktualisiert werden . Für Visual Studio 2017 ist als einzige Nutzlast " Visual C ++ - Desktop-Kernfunktionen " erforderlich . Anwendungsspezifischer Hotkey ist nicht angemeldet? Beispielsweise wird der Text mit Strg + B in MS Word fett dargestellt.
Franklin Yu
Vielen Dank dafür. Ich habe endlich herausgefunden, was mir Ctrl Shift F geklaut hat. (Es war Razer Cortex). Ein weiterer Hinweis ist, dass Spy ++ manchmal abstürzt, wenn Sie versuchen, die Eigenschaften anzuzeigen. (Und dann können Sie bis zum Neustart keine Hooks mehr sehen.) Ich konnte das Problem beheben, indem ich vor Schritt 9 mit der rechten Maustaste geklickt und "Stop Logging Message" gewählt habe. Zu diesem Zeitpunkt stürzte es nicht mehr ab, als ich versuchte, die Eigenschaften zu untersuchen. Danke noch einmal!
Khale_Kitha
6

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 IShellLinkCOM-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!

Ivo Flipse
quelle