Dada una tecla de acceso rápido, ¿cómo puedo encontrar qué programa la posee?
Dada una tecla de acceso rápido, ¿cómo puedo encontrar qué programa la posee?
Respuestas:
Precaución : Si usa Win 8 o posterior, no use esta utilidad ya que creará algunos problemas - vea los comentarios.
Si está ejecutando un Windows anterior a Windows 8, entonces Windows Hotkey Explorer
probablemente sea lo que desea. Esto también se menciona en la pregunta de StackOverflow: ¿ Averiguar qué proceso registró una tecla de acceso rápido global? (API de Windows) .
Esto funciona para mí en Win10 (y probablemente en todas las demás versiones de Windows incluso vagamente recientes) ... también copiado aquí desde https://stackoverflow.com/a/43645062/995048 ya que esta página parece aparecer primero en los resultados de búsqueda :
Una forma posible es usar la herramienta Visual Studio Spy ++ .
Prueba esto:
- Ejecute la herramienta (para mí, está en
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
, o úselaspyxx.exe
para monitorear procesos de 32 bits)- En la barra de menú, seleccione Espiar -> Registrar mensajes ... (o presione Ctrl+ M)
- Verifique todas las ventanas del sistema en el marco adicional de Windows
- Cambie a la pestaña Mensajes
- Haga clic en el botón Borrar todo
- Seleccione
WM_HOTKEY
en el cuadro de lista o marque Teclado en grupos de mensajes (si está de acuerdo con más ruido potencial)- Haz clic en el botón Aceptar
- Presione la tecla de acceso rápido en cuestión ( Win+ R, por ejemplo)
- Seleccione la
WM_HOTKEY
línea en la ventana Mensajes (Todas las ventanas) , haga clic con el botón derecho y seleccione Propiedades ... en el menú contextual- En el cuadro de diálogo Propiedades del mensaje , haga clic en el enlace Identificador de ventana (este será el identificador de la ventana que recibió el mensaje)
- Haga clic en el botón Sincronizar en el cuadro de diálogo Propiedades de la ventana. Esto mostrará la ventana en la vista de árbol de la ventana principal de Spy ++.
- En el cuadro de diálogo Propiedades de la ventana, seleccione la pestaña Proceso
- Haga clic en el enlace de ID de proceso . Esto le mostrará el proceso (En mi Win+ Rcaso:
EXPLORER
)
WM_HOTKEY
mensaje en el registro de mensajes después de presionar la tecla de acceso rápido, es posible que deba ejecutar la versión de 32 bits de Spy ++ .
Esto probablemente ha sido respondido en Stack Overflow en este hilo:
¿Averigüe qué proceso registró una tecla de acceso rápido global? (API de Windows)
Aquí está la respuesta de Pauk :
Su pregunta despertó mi interés, así que he investigado un poco y, aunque desafortunadamente no tengo una respuesta adecuada para usted, pensé en compartir lo que tengo.
Encontré este ejemplo de creación de enlace de teclado (en Delphi) escrito en 1998, pero se puede compilar en Delphi 2007 con un par de ajustes.
Es una DLL con una llamada
SetWindowsHookEx
que pasa a través de una función de devolución de llamada, que luego puede interceptar pulsaciones de teclas: en este caso, es jugar con ellos por diversión, cambiar el cursor de izquierda a derecha, etc. Una aplicación simple luego llama a la DLL e informa sus resultados basados en un evento TTimer. Si está interesado, puedo publicar el código basado en Delphi 2007.Está bien documentado y comentado, y potencialmente podría usarlo como base para determinar hacia dónde se dirige una pulsación de tecla. Si pudiera obtener el identificador de la aplicación que envió las pulsaciones de teclas, podría rastrearlo de esa manera. Con ese identificador, podría obtener la información que necesita con bastante facilidad.
Otras aplicaciones han intentado determinar las teclas de acceso rápido mediante sus accesos directos, ya que pueden contener una tecla de acceso directo, que es solo otro término para la tecla de acceso rápido. Sin embargo, la mayoría de las aplicaciones no tienden a establecer esta propiedad, por lo que es posible que no devuelva mucho. Si está interesado en esa ruta, Delphi tiene acceso a la
IShellLink
interfaz COM que puede usar para cargar un acceso directo y obtener su tecla de acceso rápido: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 tiene acceso a Safari Books Online , hay una buena sección sobre cómo trabajar con accesos directos / enlaces de shell en la Guía del desarrollador de Borland Delphi 6 por Steve Teixeira y Xavier Pacheco. Mi ejemplo anterior es una versión descuartizada desde allí y este sitio .
¡Espero que ayude!