AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1480188
Accepted
Arctiic
Arctiic
Asked: 2019-09-09 00:03:55 +0800 CST2019-09-09 00:03:55 +0800 CST 2019-09-09 00:03:55 +0800 CST

Como posso criar uma tecla de atalho .ahk (ou similar) para executar ações específicas do programa?

  • 772

Sou um usuário do AHK sem experiência ou educação real em programação de computadores (suponho que o Excel seria a coisa mais próxima que tenho de tal conhecimento / experiência, excluindo a hello, worldexposição do dia 1 aqui e ali, ou cmd/ VB6 lá atrás). Para muitas das minhas tarefas e fluxos de trabalho diários, adotei o uso do AHK, mas a maneira como estou utilizando os scripts sempre foi de entrada literal; em outras palavras, predominantemente apenas entradas de teclas emuladas que produzem sequências de entrada de teclas específicas e superficiais.

De certa forma, isso funciona porque posso utilizar o AHK com pouca ou nenhuma curva de aprendizado - entre outras conveniências - mas obviamente há contras que vêm de mãos dadas com os profissionais. Como tal, fiquei curioso ultimamente para saber se o AHK é capaz de interagir diretamente e invocar ações específicas para programas.

Exemplo conceitual
Vamos pegar o Notepad++, por exemplo (vamos fingir que ele não tem nenhuma funcionalidade nativa para conseguir isso, para fins de exemplo). Desejo configurar uma tecla de atalho para copiar, recortar e colar conteúdo binário . Como -- se possível -- devo abordar a criação do script?

Conceito conjectural
Como parte de minha coleta superficial de informações, tentei correr psr.exepara ver se poderia capturar alguma informação útil. Infelizmente, não tenho conhecimento suficiente para usar os resultados, mas pensei que poderia haver algum método semelhante para capturar o que está acontecendo no back-end da mesma forma que alguém pode usar o keyboard hookpara possivelmente capturar entradas de chave não padrão . Hospedei os dados resultantes aqui , caso possam ser utilizados.

EDIT: Para esclarecer qualquer confusão, não estou me referindo à especificidade condicional em relação às condições de acionamento de um script (por exemplo, #winactive). É um pouco difícil descrever mais do que já fiz sem causar mais confusão e fazer com que isso fique muito complicado, eu acho, mas se eu tiver que dar um exemplo análogo, então o que eu quero alcançar pode ser vagamente comparado à execução de um programa com argumentos específicos example.exe -function -parameterem vez de automatizar o processo de execução example.exeseguido por pressionamentos de tecla pré-determinados para navegar para a referida função de exemplo Alt + F, F, Ppor meio da interface do usuário.

EDIT # 2: Tudo bem, aparentemente ainda não estou transmitindo adequadamente o significado da minha pergunta. Vou fazer mais uma tentativa antes de desistir disso.

Objetivo da amostra:

  • Crie uma tecla de atalho que invoque esta função:

Exemplo de comando

  • A maneira que eu faria atualmente :
    • Atribuir tecla de atalho que aciona uma sendsequência de entradaAlt + E, P, P, C, Enter
  • Do jeito que eu quero fazer:
    • Atribua uma tecla de atalho que chama diretamente a Copy Binary Contentfunção.
  • Desafios: identificar qual função AHK alcança isso (por exemplo, DllCall?), e enumerar os identificadores/argumentos corretos e disponíveis da função
  • O uso do PSR.exe registra as seguintes ações:

...Etapa 1: Usuário clique com o botão esquerdo em "Editar (item de menu)" em "*ne" Programa: NOTEPAD++.EXE Elementos da interface do usuário: Editar, Aplicativo, *novo 1 - Notepad++ [Administrador], Notepad++

Etapa 2: Usuário clique com o botão esquerdo em "Copiar conteúdo binário (item de menu)" Programa: NOTEPAD++.EXE Elementos da interface do usuário: Copiar conteúdo binário, Colar especial, nº 32768, *novo 1 - Notepad++ [Administrador], Notepad++...

Observe o "#32768" ! Existe uma maneira de chamar diretamente essa função?

notepad++ autohotkey
  • 1 1 respostas
  • 481 Views

1 respostas

  • Voted
  1. Best Answer
    JJohnston2
    2019-09-09T22:13:12+08:002019-09-09T22:13:12+08:00

    Entendo a questão conforme delineada e faz muito sentido, pois tentei (e consegui) fazer isso em vários graus com diferentes programas.

    Existem alguns métodos para fazer o que você procura, listados em ordem crescente de complexidade abaixo (na minha opinião)...

    WinMenuSelectItem

    Para iniciantes, a abordagem abaixo do ideal é WinMenuSelectItempara programas que possuem menus padrão do Windows (em vez da faixa de opções, por exemplo).

    Esse método pode evitar a necessidade de enviar todas as teclas digitadas apenas para acionar uma opção de menu existente. No entanto, fazer com que esses WinMenuSelectItemcomandos funcionem às vezes é complicado e pode não ser tão simples de depurar se não estiver funcionando corretamente (se transforma em tentativa e erro). Às vezes, desisti completamente de tentar fazer esse trabalho e voltei a usar as teclas digitadas.

    No entanto, uma vez que uma determinada função está funcionando com este método, a janela não precisa necessariamente estar ativa para executá-la, o que é bom.

    PostMessage/SendMessage

    O segundo método para programas padrão do Windows é usar PostMessageou SendMessage. Usando um inspetor do Windows (Spy ++? Existem outros populares também, mas não me lembro o nome de imediato. Talvez uma das ferramentas do Sysinternals?), Você pode registrar essas mensagens e ver o que a função de menu aciona quando você faz isso manualmente e, em seguida, envie essa mensagem. Você basicamente registraria todas as mensagens do Windows e, em seguida, filtraria apenas essa janela para ver o que é enviado e tentaria replicá-lo no código.

    Este é provavelmente um exemplo ruim, mas um trecho de código aleatório utilizando SendMessage:

    SendMessage, % TCM_SETCURFOCUS:=0x1330,1 ,          , SysTabControl321, % helpWinTitle
    SendMessage, % WM_SETTEXT:=0x0C       ,  , &HelpItem, Edit1,            % helpWinTitle   ; Edit1 = Search Tab search
    SendMessage, % WM_KEYDOWN:=0x100      ,13,          , Edit1,            % helpWinTitle
    

    Objetos COM

    Para programas do tipo Microsoft Office, a melhor maneira de obter 'nos bastidores' é conectar-se via COM Objects, que então expõe essencialmente todos os modelos de objeto que já estão disponíveis no VBA. Isso é fantástico para fazer o que você precisa no Word/Excel/etc. já que você pode apenas procurar o código VBA para ele e, em seguida, implementar um equivalente no AutoHotkey apenas para realizar uma tarefa específica. Outra vantagem é que ele não requer privilégios de macro para se conectar ao programa e executar algo, ele [Word/Excel/etc.] só precisa estar em execução.

    Acessibilidade

    Por último, mas não menos importante, a acessibilidade pode ser utilizada para localizar e executar funções que não estão em um menu padrão, mas existem no layout da GUI de um programa ou barra de ferramentas. Isso geralmente é muito mais avançado e tedioso, mas pode encontrar coisas "nos bastidores" que você não conseguiria executar de outra forma sem apenas usar teclas / cliques do mouse.

    Normalmente, você precisa usar um visualizador de árvore de acessibilidade para pesquisar uma configuração de GUI específica para encontrar o que deseja executar e, em seguida, passar uma referência de árvore para o código que chamará essa função, "pressione" ou "clique" no botão , etc. Isso é mais útil nos casos em que os controles padrão do Windows não são usados ​​e você apenas obtém uma NETUIHWND1referência ao passar o mouse sobre um controle durante a execução do Window Spy. A acessibilidade permite que você realmente se aprofunde na construção disso NETUIHWND1para encontrar e/ou executar algo dentro dele (texto, botões, etc.)

    Resumo

    Isso pode ser feito? Sim. Obviamente, há muita programação envolvida com algumas dessas opções, mas esses são os tópicos que eu recomendaria começar se você for pesquisar os arquivos de ajuda e fóruns do AutoHotkey.

    • 2

relate perguntas

  • Mantenha o tipo/extensão de arquivo atual na caixa de diálogo "Salvar como..." do Notepad++

  • Contando vírgulas em uma string de texto e adicionando uma nova linha

  • Removendo informações

  • Notepad ++ excluir até dois pontos para cada linha com substituir tudo

  • NotePad++ User Defined Lang não mostra instruções condicionais

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    Serviço do Windows 10 chamado AarSvc_70f961. O que é e como posso desativá-lo?

    • 2 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Marko Smith

    ssl.SSLCertVerificationError: falha na verificação do certificado [SSL: CERTIFICATE_VERIFY_FAILED]: não foi possível obter o certificado do emissor local (_ssl.c:1056)

    • 4 respostas
  • Marko Smith

    Como posso saber em qual unidade o Windows está instalado?

    • 6 respostas
  • Martin Hope
    Albin Como faço para ativar o WindowsXP agora que o suporte acabou? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch O Windows 10 exclui muitos arquivos minúsculos muito lentamente. Algo pode ser feito para agilizar? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Como Ctrl+C e Ctrl+V funcionam? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve