Como posso determinar qual processo possui uma tecla de atalho no Windows?

86

Dada uma tecla de atalho, como posso encontrar qual o programa que possui?

aldrinleal
fonte
1
qual versão do windows?
Ivo Flipse

Respostas:

44

Cuidado : Se você usar o Win 8 ou posterior, não use este utilitário, pois isso criará alguns problemas - veja os comentários.

Se você estiver executando um Windows anterior ao Windows 8, Windows Hotkey Explorer é provavelmente o que você quer. Isso também é mencionado na pergunta do StackOverflow: Descubra qual processo registrou uma tecla de atalho global? (API do Windows) .

Hans-Peter Störr
fonte
28
O HotKey Explorer se estraga muito no Windows 8 - na inicialização, basicamente, "pressiona" todas as teclas de atalho, fazendo com que todo tipo de coisas estranhas aconteçam, após o que trava e precisa ser eliminado.
Nathan Ridley
2
@NathanRidley Ugh. Eu gostaria de ler seu comentário antes. Esta foi uma combinação horrível com Win8 e Autohotkey. Esse tipo de ataque de teclado poderia ter causado alguns danos sérios também.
VitalyB
10
NÃO use o Hotkey Explorer no Windows 10 também. Ele faz a mesma coisa que @NathanRidley mencionou. Apenas descobri da maneira mais difícil.
Artem Russakovskii
5
Também é muito ruim no Windows 7. Ele mudou a resolução do meu monitor principal para 640x480 (configuração de vários monitores).
Costa
3
Eu gostaria que houvesse uma ferramenta mais recente como o Hotkey Explorer, que funciona para o Windows 8 e; 10
Flion
38

Isso funciona para mim no Win10 (e provavelmente em todas as outras versões do Windows, vagamente recentes) ... também copiado aqui de https://stackoverflow.com/a/43645062/995048 já que esta página parece aparecer primeiro nos resultados de pesquisa:

Uma maneira possível é usar o Ferramenta Visual Studio Spy ++ .

Experimente:

  1. Execute a ferramenta (para mim, está em C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe )
  2. Na barra de menus, selecione Espião - & gt; Mensagens de log ... (ou acertar Ctrl + M )
  3. Verifica Todas as janelas no sistema no Janelas Adicionais quadro, Armação
  4. Mude para o Mensagens aba
  5. Clique no Limpar tudo botão
  6. Selecione WM_HOTKEY na caixa de listagem ou verifique Teclado em Grupos de mensagens (se você está bem com mais ruído potencial)
  7. Clique no Está bem botão
  8. Pressione a tecla de atalho em questão ( Ganhar + R , por exemplo)
  9. Selecione os WM_HOTKEY linha no Mensagens (todas as janelas) janela, clique com o botão direito e selecione Propriedades ... no menu de contexto
  10. No Propriedades da Mensagem diálogo, clique no Maçaneta da janela link (este será o identificador da janela que recebeu a mensagem)
  11. Clique no Sincronizar botão no Propriedades da janela diálogo. Isso mostrará a janela no treeview principal da janela do Spy ++.
  12. No Propriedades da janela diálogo, selecione o Processo aba
  13. Clique no ID do processo ligação. Isto irá mostrar-lhe o processo (na minha Ganhar + R caso: EXPLORER )
user995048
fonte
3
Esta é uma ótima resposta, é um monte de etapas, mas dá informações perfeitamente detalhadas. Observe que você precisará instalar o SPY ++ de alguma forma e que precisa executar a versão de 64 bits em um PC de 64 bits ou não funcionará. Acho que a maneira mais fácil de instalar o SPY ++ é instalar o Visual Studio 2017, certifique-se de selecionar o payload do C ++. Para não desenvolvedores isso pode ser um pouco demais.
Roy T.
1
Isto é perfeito. Elaborar, mas perfeito!
angularsen
13
Ótima resposta! Apenas uma nota que a versão de 64 bits do Spy ++ captura apenas mensagens para aplicativos de 64 bits , então se você não vê o WM_HOTKEY mensagem no Log de mensagens depois de pressionar a tecla de atalho, você pode precisar executar a versão de 32 bits do Spy ++.
Dawid Ferenczy
Link deve ser atualizado para novo site de documentação . Para o Visual Studio 2017, a única carga necessária é " Recursos principais do desktop do Visual C ++ "A tecla de atalho específica do aplicativo não está conectada? Por exemplo, Ctrl + B no MS Word tornará o texto em negrito.
Franklin Yu
Muito obrigado por isso. Eu finalmente descobri o que estava roubando Ctrl Shift F de mim. (Foi o Razer Cortex). Outra observação é que, às vezes, o spy + + falha quando você tenta visualizar as propriedades. (E então você não pode ver mais ganchos até a reinicialização). Consegui resolver isso clicando com o botão direito, antes do passo 9, e escolhendo "Stop Logging Message". Nesse ponto, ele não caiu mais quando tentei examinar as propriedades. Obrigado novamente!
Khale_Kitha
5

Isso provavelmente foi respondido no Stack Overflow neste thread:

Descubra qual processo registrou uma tecla de atalho global? (API do Windows)

Aqui Pauk resposta:

Sua pergunta despertou meu interesse, então eu fiz um pouco de escavação e   enquanto, infelizmente, não tenho uma resposta adequada para você, pensei   Eu compartilharia o que tenho.

Eu achei isto exemplo de criação de gancho de teclado (em Delphi) escrito em 1998, mas é compilável em Delphi 2007 com um par de   ajustes.

É uma DLL com uma chamada para SetWindowsHookEx que passa por um   função de retorno de chamada, que pode então interceptar os toques de tecla: neste caso,   está mexendo com eles por diversão, mudando o cursor da esquerda para a direita, etc.   Um aplicativo simples, em seguida, chama a DLL e relata seus resultados com base em   um evento TTimer. Se você estiver interessado, posso postar o Delphi 2007 com base   código.

É bem documentado e comentado e você potencialmente poderia usá-lo como   uma base de trabalho para onde uma chave de imprensa está indo. Se você pudesse conseguir   o identificador do aplicativo que enviou os toques de tecla, você poderia   rastreie isso de volta. Com esse identificador você seria capaz de obter o   informações que você precisa com bastante facilidade.

Outros aplicativos tentaram determinar as teclas de atalho, passando por suas   Atalhos, pois eles podem conter uma tecla de atalho, que é apenas outra   prazo para tecla de atalho. No entanto, a maioria das aplicações não tende a definir   propriedade por isso pode não retornar muito. Se você está interessado nisso   rota, Delphi tem acesso a IShellLink Interface COM que você poderia   use para carregar um atalho e obter sua hotkey:

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;

Se você tem acesso a Safari Books Online , existe um Boa   seção sobre como trabalhar com atalhos / links de shell na Borland   Delphi 6 Developer's Guide, de Steve Teixeira e Xavier Pacheco. Minhas   exemplo acima é uma versão massacrada de lá e esse site .

Espero que ajude!

Ivo Flipse
fonte