¿Cómo puedo determinar qué proceso posee una tecla de acceso rápido en Windows?

97

Dada una tecla de acceso rápido, ¿cómo puedo encontrar qué programa la posee?

aldrinleal
fuente
1
¿Qué versión de Windows?
Ivo Flipse

Respuestas:

46

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 Explorerprobablemente 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) .

Hans-Peter Störr
fuente
32
HotKey explorer se arruina bastante mal en Windows 8: en el inicio básicamente "presiona" cada tecla de acceso rápido, provocando todo tipo de cosas extrañas, después de lo cual se bloquea y debe ser eliminado.
Nathan Ridley
2
@NathanRidley Ugh. Desearía leer tu comentario antes. Esta fue una combinación horrible con Win8 y Autohotkey. Este tipo de golpe de teclado también podría haber causado daños graves.
VitalyB
11
NO use Hotkey Explorer en Windows 10 tampoco. Hace lo mismo que mencionó @NathanRidley. Me acabo de enterar por las malas.
Artem Russakovskii
55
También bastante complicado en Windows 7. Cambió la resolución de mi monitor principal a 640x480 (configuración de monitor múltiple).
Costa
3
Desearía que hubiera una herramienta más reciente como Hotkey Exporer que funcione para Windows 8 y 10
Flion
60

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:

  1. Ejecute la herramienta (para mí, está en C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe, o úsela spyxx.exepara monitorear procesos de 32 bits)
  2. En la barra de menú, seleccione Espiar -> Registrar mensajes ... (o presione Ctrl+ M)
  3. Verifique todas las ventanas del sistema en el marco adicional de Windows
  4. Cambie a la pestaña Mensajes
  5. Haga clic en el botón Borrar todo
  6. Seleccione WM_HOTKEYen el cuadro de lista o marque Teclado en grupos de mensajes (si está de acuerdo con más ruido potencial)
  7. Haz clic en el botón Aceptar
  8. Presione la tecla de acceso rápido en cuestión ( Win+ R, por ejemplo)
  9. Seleccione la WM_HOTKEYlínea en la ventana Mensajes (Todas las ventanas) , haga clic con el botón derecho y seleccione Propiedades ... en el menú contextual
  10. 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)
  11. 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 ++.
  12. En el cuadro de diálogo Propiedades de la ventana, seleccione la pestaña Proceso
  13. Haga clic en el enlace de ID de proceso . Esto le mostrará el proceso (En mi Win+ Rcaso: EXPLORER)
usuario995048
fuente
3
Esta es una gran respuesta, son muchos pasos pero brinda información perfectamente detallada. Tenga en cuenta que necesitará instalar SPY ++ de alguna manera y que necesita ejecutar la versión de 64 bits en una PC de 64 bits o no funcionará. Creo que la forma más fácil de instalar SPY ++ es instalar Visual Studio 2017, asegúrese de seleccionar la carga útil de C ++. Para los no desarrolladores, esto podría ser demasiado trabajo.
Roy T.
2
Esto es perfecto. Elaborado, pero perfecto!
angularsen
16
¡Gran respuesta! Solo una nota de que la versión de 64 bits de Spy ++ captura solo mensajes para aplicaciones de 64 bits , por lo que si no ve el WM_HOTKEYmensaje 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 ++ .
Dawid Ferenczy Rogožan
El enlace debe actualizarse al nuevo sitio de documentación . Para Visual Studio 2017, la única carga útil requerida es " Características principales del escritorio de Visual C ++ ". ¿La tecla de acceso directo específica de la aplicación no está registrada? Por ejemplo, Ctrl + B en MS Word pondrá el texto en negrita.
Franklin Yu
Muchas gracias por esto. Finalmente descubrí lo que me estaba robando Ctrl Shift F. (Era Razer Cortex). Otra nota es que a veces spy ++ se bloquea cuando intenta ver las propiedades. (Y luego no puede ver más ganchos hasta que se reinicie). Pude resolver esto haciendo clic derecho, antes del paso 9, y seleccionando "Detener mensaje de registro". En ese punto, ya no se bloqueó cuando intenté examinar las propiedades. ¡Gracias de nuevo!
Khale_Kitha
6

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 SetWindowsHookExque 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 IShellLinkinterfaz 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!

Ivo Flipse
fuente