Come posso determinare quale processo possiede un tasto di scelta rapida in Windows?


Risposte:


46

Attenzione : se si utilizza Win 8 o versioni successive, non utilizzare questa utility poiché creerà alcuni problemi - vedere i commenti.

Se stai utilizzando Windows prima di Windows 8, Windows Hotkey Explorerprobabilmente è quello che vuoi. Questo è anche menzionato nella domanda StackOverflow: scopri quale processo ha registrato un tasto di scelta rapida globale? (API di Windows) .


32
HotKey explorer si rovina abbastanza male in Windows 8 - all'avvio praticamente "preme" ogni tasto di scelta rapida, causando ogni genere di cose strane, dopodiché si blocca e deve essere ucciso.
Nathan Ridley,

2
@NathanRidley Ugh. Vorrei aver letto il tuo commento prima. Questa è stata una combinazione orribile con Win8 e Autohotkey. Questo tipo di bashing della tastiera avrebbe potuto arrecare gravi danni.
VitalyB,

11
NON utilizzare Hotkey Explorer su Windows 10. Fa la stessa cosa menzionata da @NathanRidley. Appena scoperto nel modo più duro.
Artem Russakovskii,

5
Anche abbastanza complicato su Windows 7. Ha cambiato la risoluzione del mio monitor principale su 640x480 (configurazione multi monitor).
Costa

3
Vorrei che ci fosse uno strumento più recente come Hotkey Exporer che funziona per Windows 8 e 10
Flion

60

Questo funziona per me in Win10 (e probabilmente in tutte le altre versioni anche vagamente recenti di Windows) ... anche copiato qui da https://stackoverflow.com/a/43645062/995048 poiché questa pagina sembra venire prima nei risultati di ricerca :

Un modo possibile è utilizzare lo strumento Visual Studio Spy ++ .

Prova questo:

  1. Esegui lo strumento (per me è su C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe, o utilizza spyxx.exeper monitorare i processi a 32 bit)
  2. Nella barra dei menu, seleziona Spia -> Registra messaggi ... (o premi Ctrl+ M)
  3. Seleziona Tutte le finestre nel sistema nel riquadro Windows aggiuntivo
  4. Passa alla scheda Messaggi
  5. Fai clic sul pulsante Cancella tutto
  6. Seleziona WM_HOTKEYnella casella di riepilogo o seleziona Tastiera nei gruppi di messaggi (se stai bene con più rumore potenziale)
  7. Fai clic sul pulsante OK
  8. Premere il tasto di scelta rapida in questione ( Win+ R, ad esempio)
  9. Seleziona la WM_HOTKEYriga nella finestra Messaggi (Tutte le finestre) , fai clic con il pulsante destro del mouse e seleziona Proprietà ... nel menu contestuale
  10. Nella finestra di dialogo Proprietà messaggio , fai clic sul collegamento Maniglia della finestra (questa sarà la maniglia della finestra che ha ricevuto il messaggio)
  11. Fai clic sul pulsante Sincronizza nella finestra di dialogo Proprietà finestra. Questo mostrerà la finestra nella finestra principale della finestra Spy ++.
  12. Nella finestra di dialogo Proprietà finestra, selezionare la scheda Elaborazione
  13. Fare clic sul collegamento ID processo . Questo ti mostrerà il processo (Nel mio Win+ Rcaso: EXPLORER)

3
Questa è un'ottima risposta, richiede molti passaggi ma fornisce informazioni perfettamente dettagliate. Si noti che sarà necessario installare SPY ++ in qualche modo e che è necessario eseguire la versione a 64 bit su un PC a 64 bit o non funzionerà. Penso che il modo più semplice per installare SPY ++ sia installare Visual Studio 2017, assicurati di selezionare il payload C ++. Per i non sviluppatori questo potrebbe essere un po 'troppo lavoro.
Roy T.,

2
Questo è perfetto. Elaborato, ma perfetto!
angularsen,

16
Bella risposta! Solo una nota che la versione a 64 bit di Spy ++ cattura solo i messaggi per le applicazioni a 64 bit , quindi se non vedi il WM_HOTKEYmessaggio nel registro dei messaggi dopo aver premuto il tasto di scelta rapida, potrebbe essere necessario eseguire la versione a 32 bit di Spy ++ .
Dawid Ferenczy Rogožan,

Il collegamento deve essere aggiornato al nuovo sito della documentazione . Per Visual Studio 2017, l'unico payload richiesto è " Funzionalità desktop core di Visual C ++ ". Il tasto di scelta rapida specifico dell'applicazione non è registrato? Ad esempio, Ctrl + B in MS Word renderà il testo in grassetto.
Franklin Yu,

Grazie mille per questo. Finalmente ho scoperto cosa mi rubava Ctrl Shift F. (Era Razer Cortex). Un'altra nota è che a volte spia ++ si arresta in modo anomalo quando si tenta di visualizzare le proprietà. (E quindi non è possibile vedere altri hook fino al riavvio.) Sono stato in grado di risolverlo facendo clic con il tasto destro, prima del passaggio 9, e scegliendo "Interrompi registrazione messaggio". A quel punto, non è più andato in crash quando ho tentato di esaminare le proprietà. Grazie ancora!
Khale_Kitha,

6

Probabilmente è stata data una risposta su Overflow dello stack in questo thread:

Scopri quale processo ha registrato un tasto di scelta rapida globale? (API di Windows)

Ecco la risposta di Pauk :

La tua domanda ha suscitato il mio interesse, quindi ho fatto un po 'di ricerche e, purtroppo non ho una risposta adeguata per te, ho pensato di condividere ciò che ho.

Ho trovato questo esempio di creazione di hook tastiera (in Delphi) scritto nel 1998, ma è compilabile in Delphi 2007 con un paio di modifiche.

È una DLL con una chiamata SetWindowsHookExche passa attraverso una funzione di callback, che può quindi intercettare i tasti: In questo caso, sta armeggiando con loro per divertimento, cambiando il cursore sinistro a destra, ecc. Una semplice app quindi chiama la DLL e riporta indietro i suoi risultati si basano su un evento TTimer. Se sei interessato, posso pubblicare il codice basato su Delphi 2007.

È ben documentato e commentato e potenzialmente potresti usarlo come base per capire dove sta andando la pressione di un tasto. Se fosse possibile ottenere l'handle dell'applicazione che ha inviato i tasti premuti, è possibile rintracciarlo in quel modo. Con quella maniglia sarai in grado di ottenere le informazioni di cui hai bisogno abbastanza facilmente.

Altre app hanno provato a determinare i tasti di scelta rapida esaminando i tasti di scelta rapida poiché possono contenere un tasto di scelta rapida, che è solo un altro termine per tasto di scelta rapida. Tuttavia, la maggior parte delle applicazioni non tende a impostare questa proprietà, pertanto potrebbe non restituire molto. Se sei interessato a quel percorso, Delphi ha accesso all'interfaccia IShellLinkCOM che puoi usare per caricare un collegamento da e ottenere il suo tasto di scelta rapida:

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;

Se hai accesso a Safari Books Online , c'è una buona sezione su come lavorare con collegamenti / collegamenti shell nella Guida per gli sviluppatori di Borland Delphi 6 di Steve Teixeira e Xavier Pacheco. Il mio esempio sopra è una versione macellata da lì e questo sito .

Spero che aiuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.