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


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


80


origem


qual versão do windows? - Ivo Flipse♦


Respostas:


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


44



HotKey Explorer estraga bastante no Windows 8 - na inicialização, basicamente, "pressiona" cada tecla de atalho, fazendo com que todos os tipos de coisas estranhas aconteçam, após o que trava e tem que ser morto. - Nathan Ridley
@NathanRidley Ugh. Eu gostaria de ler seu comentário antes. Esta foi uma combinação horrível com Win8 e Autohotkey. Esse tipo de golpe de teclado poderia ter causado alguns danos sérios também. - VitalyB
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
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
Eu gostaria que houvesse uma ferramenta mais recente como o Hotkey Exporer que funciona para o Windows 8 e 10 - Flion


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, é em C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe)
  2. Na barra de menus, selecione Espião -> 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 dentro 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)

28



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.
Isto é perfeito. Elaborar, mas perfeito! - angularsen
Ó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 útil 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


Isso provavelmente foi respondido no Stack Overflow neste thread:

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

Aqui Paukresposta:

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 (no 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 callback, 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   rastreá-lo dessa maneira. 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!


5