Avec un raccourci clavier, comment puis-je savoir quel programme le possède?
Avec un raccourci clavier, comment puis-je savoir quel programme le possède?
Réponses:
Attention : Si vous utilisez Win 8 ou une version ultérieure, n'utilisez pas cet utilitaire, car cela pourrait créer des problèmes - voir les commentaires.
Si vous utilisez une version de Windows antérieure à Windows 8, Windows Hotkey Explorer
c'est probablement ce que vous voulez. Ceci est également mentionné dans la question StackOverflow: Découvrez quel processus a enregistré un raccourci clavier global? (API Windows) .
Cela fonctionne pour moi dans Win10 (et probablement dans toutes les versions encore plus récentes de Windows) ... également copié ici à partir de https://stackoverflow.com/a/43645062/995048 car cette page semble apparaître en premier dans les résultats de recherche :
Une solution possible consiste à utiliser l' outil Visual Studio Spy ++ .
Essayez ceci:
- Exécutez l'outil (pour moi, c'est à
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
, ou utilisezspyxx.exe
pour surveiller les processus 32 bits)- Dans la barre de menus, sélectionnez Espion -> Enregistrer les messages ... (ou appuyez sur Ctrl+ M).
- Vérifier toutes les fenêtres du système dans le cadre Windows additionnel
- Passer à l' onglet Messages
- Cliquez sur le bouton Tout effacer
- Sélectionnez
WM_HOTKEY
dans la zone de liste ou cochez Clavier dans les groupes de messages (si vous êtes d'accord avec plus de bruit potentiel)- Cliquez sur le bouton OK
- Appuyez sur la touche de raccourci en question ( Win+ R, par exemple).
- Sélectionnez la
WM_HOTKEY
ligne dans la fenêtre Messages (toutes les fenêtres) , cliquez avec le bouton droit de la souris et sélectionnez Propriétés ... dans le menu contextuel.- Dans la boîte de dialogue Propriétés du message , cliquez sur le lien Fenêtre (ce sera la poignée de la fenêtre ayant reçu le message).
- Cliquez sur le bouton Synchroniser dans la boîte de dialogue Propriétés de la fenêtre . Cela affichera la fenêtre dans l'arborescence principale de la fenêtre Spy ++.
- Dans la boîte de dialogue Propriétés de la fenêtre , sélectionnez l' onglet Processus .
- Cliquez sur le lien ID de processus . Cela vous montrera le processus (Dans mon Win+ Rcas:
EXPLORER
)
WM_HOTKEY
message dans le journal des messages après avoir appuyé sur la touche de raccourci, vous devrez peut-être exécuter la version 32 bits de Spy ++. .
Cela a probablement été répondu sur Stack Overflow dans ce fil de discussion:
Découvrez quel processus a enregistré un raccourci clavier global? (API Windows)
Voici la réponse de Pauk :
Votre question a piqué mon intérêt, alors j’ai creusé un peu et bien que, malheureusement, je n’ai pas de réponse à vous donner, j’ai pensé partager ce que j’avais.
J'ai trouvé cet exemple de création d'un clavier accroché (dans Delphi) écrit en 1998, mais compilable dans Delphi 2007 avec quelques ajustements.
C'est une DLL avec un appel à
SetWindowsHookEx
qui passe par une fonction de rappel, qui peut ensuite intercepter les frappes de touche: dans ce cas, bricoler avec elles pour le plaisir, changer le curseur de gauche à droite, etc. Une application simple appelle ensuite la DLL et en fait rapport ses résultats basés sur un événement TTimer. Si cela vous intéresse, je peux poster le code basé sur Delphi 2007.Il est bien documenté et commenté, et vous pourriez éventuellement l’utiliser comme base pour déterminer l’orientation d’une presse à touche. Si vous pouviez obtenir le descripteur de l'application qui a envoyé les touches, vous pouvez le suivre de cette façon. Avec cette poignée, vous pourrez obtenir les informations dont vous avez besoin assez facilement.
D'autres applications ont essayé de déterminer les touches de raccourci en passant par leurs raccourcis puisqu'elles peuvent contenir une touche de raccourci, qui est juste un autre terme pour les touches de raccourci. Cependant, la plupart des applications n’ont pas tendance à définir cette propriété, elle risque donc de ne pas revenir beaucoup. Si cette route vous intéresse, Delphi a accès à une
IShellLink
interface COM à partir de laquelle vous pouvez charger un raccourci et obtenir son raccourci clavier: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;
Si vous avez accès à Safari Books Online , le Guide du développeur de Borland Delphi 6, créé par Steve Teixeira et Xavier Pacheco, contient des informations utiles sur l'utilisation de raccourcis / liens shell . Mon exemple ci-dessus est une version bouchée à partir de là et de ce site .
J'espère que ça t'as aidé!