Dada uma tecla de atalho, como posso encontrar qual o programa que possui?
Dada uma tecla de atalho, como posso encontrar qual o programa que possui?
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) .
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:
- Execute a ferramenta (para mim, está em
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
)- Na barra de menus, selecione Espião - & gt; Mensagens de log ... (ou acertar Ctrl + M )
- Verifica Todas as janelas no sistema no Janelas Adicionais quadro, Armação
- Mude para o Mensagens aba
- Clique no Limpar tudo botão
- Selecione
WM_HOTKEY
na caixa de listagem ou verifique Teclado em Grupos de mensagens (se você está bem com mais ruído potencial)- Clique no Está bem botão
- Pressione a tecla de atalho em questão ( Ganhar + R , por exemplo)
- Selecione os
WM_HOTKEY
linha no Mensagens (todas as janelas) janela, clique com o botão direito e selecione Propriedades ... no menu de contexto- No Propriedades da Mensagem diálogo, clique no Maçaneta da janela link (este será o identificador da janela que recebeu a mensagem)
- Clique no Sincronizar botão no Propriedades da janela diálogo. Isso mostrará a janela no treeview principal da janela do Spy ++.
- No Propriedades da janela diálogo, selecione o Processo aba
- Clique no ID do processo ligação. Isto irá mostrar-lhe o processo (na minha Ganhar + R caso:
EXPLORER
)
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 ++.
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!