Comment puis-je déterminer quel processus possède un raccourci clavier dans Windows?

97

Avec un raccourci clavier, comment puis-je savoir quel programme le possède?

aldrinleal
la source
1
quelle version de windows?
Ivo Flipse

Réponses:

46

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 Explorerc'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) .

Hans-Peter Störr
la source
32
L'explorateur de raccourcis clavier tourne mal dans Windows 8. Au démarrage, il "appuie" sur chaque raccourci clavier, ce qui provoque toutes sortes de choses étranges, après quoi il se bloque et doit être tué.
Nathan Ridley
2
@ JonathanRidley Ugh. J'aimerais lire votre commentaire avant. C'était une combinaison horrible avec Win8 et Autohotkey. Ce type de frappe au clavier aurait également pu causer de graves dommages.
VitalyB
11
N'utilisez pas Hotkey Explorer sous Windows 10 non plus. C'est la même chose que @NathanRidley a mentionnée. Je viens de découvrir à la dure.
Artem Russakovskii
5
C'est également assez vicieux sous Windows 7. La résolution de mon moniteur principal est passée à 640x480 (configuration multi-moniteur).
Costa
3
J'aimerais avoir un outil plus récent comme Hotkey Exporer qui fonctionne pour Windows 8 et 10
Flion
60

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:

  1. Exécutez l'outil (pour moi, c'est à C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe, ou utilisez spyxx.exepour surveiller les processus 32 bits)
  2. Dans la barre de menus, sélectionnez Espion -> Enregistrer les messages ... (ou appuyez sur Ctrl+ M).
  3. Vérifier toutes les fenêtres du système dans le cadre Windows additionnel
  4. Passer à l' onglet Messages
  5. Cliquez sur le bouton Tout effacer
  6. Sélectionnez WM_HOTKEYdans la zone de liste ou cochez Clavier dans les groupes de messages (si vous êtes d'accord avec plus de bruit potentiel)
  7. Cliquez sur le bouton OK
  8. Appuyez sur la touche de raccourci en question ( Win+ R, par exemple).
  9. Sélectionnez la WM_HOTKEYligne 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.
  10. 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).
  11. 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 ++.
  12. Dans la boîte de dialogue Propriétés de la fenêtre , sélectionnez l' onglet Processus .
  13. Cliquez sur le lien ID de processus . Cela vous montrera le processus (Dans mon Win+ Rcas: EXPLORER)
utilisateur995048
la source
3
C’est une bonne réponse, cela fait beaucoup d’étapes mais donne des informations parfaitement détaillées. Notez que vous devrez installer SPY ++ d'une manière ou d'une autre et que vous devez exécuter la version 64 bits sur un PC 64 bits, sinon cela ne fonctionnera pas. Je pense que le moyen le plus simple d'installer SPY ++ est d'installer Visual Studio 2017; veillez à sélectionner la charge C ++. Pour les non-développeurs, cela pourrait être un peu trop de travail.
Roy T.
2
C'est parfait. Elaboré, mais parfait!
angularsen
16
Très bonne réponse! Notez simplement que la version 64 bits de Spy ++ n'attrape que les messages des applications 64 bits . Par conséquent, si vous ne voyez pas le WM_HOTKEYmessage 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 ++. .
Commentaires
Le lien doit être mis à jour vers le nouveau site de documentation . Pour Visual Studio 2017, les seules charges utiles requises sont les " fonctionnalités de bureau Visual C ++ principales ". La touche de raccourci spécifique à l'application n'est pas enregistrée? Par exemple, Ctrl + B dans MS Word rendra le texte en gras.
Franklin Yu
Merci beaucoup pour ça. J'ai finalement découvert ce qui volait Ctrl Maj F de moi. (C'était Razer Cortex). Une autre remarque est que parfois, spy ++ se bloque lorsque vous essayez d'afficher les propriétés. (Ensuite, vous ne verrez plus de crochets avant le redémarrage.) J'ai réussi à résoudre ce problème en cliquant avec le bouton droit de la souris avant l'étape 9 et en choisissant "Arrêter l'enregistrement du message". À ce stade, il ne s'est plus écrasé lorsque j'ai tenté d'examiner les propriétés. Merci encore!
Khale_Kitha
6

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 à SetWindowsHookExqui 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 IShellLinkinterface 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é!

Ivo Flipse
la source