Dato un tasto di scelta rapida, come posso sapere quale programma lo possiede?
Dato un tasto di scelta rapida, come posso sapere quale programma lo possiede?
Risposte:
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 Explorer
probabilmente è quello che vuoi. Questo è anche menzionato nella domanda StackOverflow: scopri quale processo ha registrato un tasto di scelta rapida globale? (API di Windows) .
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:
- Esegui lo strumento (per me è su
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
, o utilizzaspyxx.exe
per monitorare i processi a 32 bit)- Nella barra dei menu, seleziona Spia -> Registra messaggi ... (o premi Ctrl+ M)
- Seleziona Tutte le finestre nel sistema nel riquadro Windows aggiuntivo
- Passa alla scheda Messaggi
- Fai clic sul pulsante Cancella tutto
- Seleziona
WM_HOTKEY
nella casella di riepilogo o seleziona Tastiera nei gruppi di messaggi (se stai bene con più rumore potenziale)- Fai clic sul pulsante OK
- Premere il tasto di scelta rapida in questione ( Win+ R, ad esempio)
- Seleziona la
WM_HOTKEY
riga nella finestra Messaggi (Tutte le finestre) , fai clic con il pulsante destro del mouse e seleziona Proprietà ... nel menu contestuale- Nella finestra di dialogo Proprietà messaggio , fai clic sul collegamento Maniglia della finestra (questa sarà la maniglia della finestra che ha ricevuto il messaggio)
- Fai clic sul pulsante Sincronizza nella finestra di dialogo Proprietà finestra. Questo mostrerà la finestra nella finestra principale della finestra Spy ++.
- Nella finestra di dialogo Proprietà finestra, selezionare la scheda Elaborazione
- Fare clic sul collegamento ID processo . Questo ti mostrerà il processo (Nel mio Win+ Rcaso:
EXPLORER
)
WM_HOTKEY
messaggio nel registro dei messaggi dopo aver premuto il tasto di scelta rapida, potrebbe essere necessario eseguire la versione a 32 bit di Spy ++ .
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
SetWindowsHookEx
che 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
IShellLink
COM 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!