132 votes

Comment puis-je déterminer quel processus est propriétaire d'un raccourci clavier dans Windows ?

Étant donné une touche de raccourci, comment puis-je trouver le programme qui la possède ?

90voto

user995048 Points 1017

Cela fonctionne pour moi sous Win10 (et probablement toutes les autres versions de Windows, même vaguement récentes)... également copié ici de https://stackoverflow.com/a/43645062/995048 puisque cette page semble apparaître en premier dans les résultats de recherche :

Un moyen possible est d'utiliser le Outil Visual Studio Spy++ .

Essayez ceci :

  1. Exécutez l'outil (pour moi, il se trouve à l'adresse suivante C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe ou utiliser spyxx.exe pour surveiller les processus 32 bits)
  2. Dans la barre de menu, sélectionnez Espionner -> Messages du journal... (ou frappe Ctrl + M )
  3. Vérifiez Toutes les fenêtres du système dans le Fenêtres supplémentaires cadre
  4. Passez à la Messages onglet
  5. Cliquez sur le bouton Effacer tout bouton
  6. Sélectionnez WM_HOTKEY dans la zone de liste, ou cochez Clavier en Groupes de messages (si vous êtes d'accord avec plus de bruit potentiel)
  7. Cliquez sur le bouton OK bouton
  8. Appuyez sur la touche de raccourci en question ( Win + R par exemple)
  9. Sélectionnez le WM_HOTKEY dans le Messages (Tous les Windows) cliquez à droite et sélectionnez Propriétés... dans le menu contextuel
  10. Dans le Propriétés des messages cliquez sur le bouton Poignée de fenêtre lien (ce sera le handle de la fenêtre qui a reçu le message)
  11. Cliquez sur le bouton Synchroniser sur le bouton Propriétés de la fenêtre dialogue. La fenêtre s'affiche alors dans l'arborescence de la fenêtre principale de Spy++.
  12. Sur le Propriétés de la fenêtre sélectionnez l'option Processus onglet
  13. Cliquez sur le bouton ID du processus lien. Cela vous montrera le processus (dans mon Win + R cas : EXPLORER )

48voto

Hans-Peter Störr Points 1971

Attention : Si vous utilisez Win 8 ou une version ultérieure, n'utilisez pas cet utilitaire car il créera quelques problèmes - voir les commentaires.

Si vous utilisez un Windows antérieur à Windows 8, alors Windows Hotkey Explorer est probablement ce que vous voulez. Cela est également mentionné dans la question StackOverflow : Trouver le processus qui a enregistré une touche de raccourci globale (API Windows) .

22voto

itachi Points 356

J'ai récemment écrit un petit utilitaire - Hotkey Detective - pour les nouvelles versions de Windows (testé sur 8.1 et 10). Il indique simplement quel processus possède le raccourci clavier lorsque vous déclenchez la frappe.

À la différence d'autres outils connus, comme Explorateur de touches En effet, mon utilitaire ne liste pas toutes les touches de raccourci, car cela impliquerait de les déclencher artificiellement toutes, ce qui finirait par casser le système. Afin de voir quel processus est le coupable, il suffit d'exécuter mon utilitaire avec des privilèges d'administrateur et appuyez sur la touche de raccourci volée. C'est tout.

Les sources de Hotkey Detective et un manuel d'utilisation rapide peuvent être trouvés à l'adresse suivante GitHub . El versions binaires sont là aussi.

enter image description here

Il s'agit d'une version bêta précoce, alors signalez tout problème si vous en trouvez.

6voto

cmeerw Points 266

Cette question a probablement trouvé une réponse sur Stack Overflow dans ce fil de discussion :

Trouver le processus qui a enregistré une touche de raccourci globale (API Windows)

Voici Pauk La réponse de la Commission :

Votre question a piqué mon intérêt, j'ai donc fait quelques recherches et Malheureusement, je n'ai pas de réponse précise à vous donner. partager ce que j'ai.

J'ai trouvé ceci exemple de création d'un hook de clavier (en Delphi) écrit en 1998, mais il est compilable en Delphi 2007 avec quelques modifications.

C'est une DLL avec un appel à SetWindowsHookEx qui passe par une fonction de rappel, qui peut alors intercepter les frappes de touches : Dans ce cas, il les manipule pour le plaisir, en changeant le curseur gauche en curseur droit, etc. Une application simple appelle ensuite la DLL et renvoie ses résultats en fonction d'un événement TTimer. un événement TTimer. Si vous êtes intéressé, je peux poster le code basé sur Delphi 2007. code.

Il est bien documenté et commenté et vous pourriez potentiellement l'utiliser comme comme base de travail pour savoir où va une touche pressée. Si vous pouviez obtenir l'identifiant de l'application qui a envoyé les touches, vous pourriez remonter la piste de cette façon. Avec ce handle vous seriez capable d'obtenir les informations dont vous avez besoin assez facilement.

D'autres applications ont essayé de déterminer les touches de raccourci en passant par leur raccourcis, puisqu'ils peuvent contenir une touche de raccourci, qui n'est qu'un autre terme pour la touche de raccourci. terme pour hotkey. Cependant, la plupart des applications n'ont pas tendance à définir cette propriété. de sorte qu'il n'y a pas beaucoup de résultats. Si vous êtes intéressé par cette cette voie, Delphi a accès à IShellLink interface COM que vous pourriez pour charger un raccourci et obtenir sa touche de raccourci :

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 à Livres de safari en ligne il existe un bon section sur l'utilisation des raccourcis / liens Shell. dans la base de données Borland Delphi 6 Developer's Guide de Steve Teixeira et Xavier Pacheco. Mon exemple exemple ci-dessus est une version massacrée de cet ouvrage. ce site .

J'espère que cela vous aidera !

1voto

Abulurd Points 101

Ces réponses n'ont pas fonctionné pour moi parce que - si je comprends bien - le raccourci venait juste d'être déposé sur une .lnk qui n'a pas été supprimé lors d'une désinstallation. Spy++ se bloque lorsqu'il est invoqué.

En suivant les étapes sur cette réponse solution : trouver le raccourci en question (le mien se cachait dans le menu de démarrage, sans apparaître sous le bouton de démarrage de Windows pour une raison quelconque) et supprimer son paramètre de raccourci (en utilisant la touche d'espacement arrière) ou simplement supprimer le raccourci tout court.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X