Étant donné une touche de raccourci, comment puis-je trouver le programme qui la possède ?
Réponses
Trop de publicités?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 :
- 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 utiliserspyxx.exe
pour surveiller les processus 32 bits)- Dans la barre de menu, sélectionnez Espionner -> Messages du journal... (ou frappe Ctrl + M )
- Vérifiez Toutes les fenêtres du système dans le Fenêtres supplémentaires cadre
- Passez à la Messages onglet
- Cliquez sur le bouton Effacer tout bouton
- 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)- Cliquez sur le bouton OK bouton
- Appuyez sur la touche de raccourci en question ( Win + R par exemple)
- Sélectionnez le
WM_HOTKEY
dans le Messages (Tous les Windows) cliquez à droite et sélectionnez Propriétés... dans le menu contextuel- 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)
- 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++.
- Sur le Propriétés de la fenêtre sélectionnez l'option Processus onglet
- Cliquez sur le bouton ID du processus lien. Cela vous montrera le processus (dans mon Win + R cas :
EXPLORER
)
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) .
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.
Il s'agit d'une version bêta précoce, alors signalez tout problème si vous en trouvez.
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 !
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.
- Réponses précédentes
- Plus de réponses