AutoHotKey - scripts com mais de uma tecla Alt-Tab


2

Estou tentando criar um script que copia os campos de um formulário em uma janela para um formulário em outra janela usando Alt-Tab para mover-se entre as janelas.

O primeiro alt-tab funciona para mover da janela 1 para a janela 2, mas o próximo alt-tab para mover da janela 2 para a janela 1 não funciona.

Meu script é o seguinte:

#z :: Enviar ^ c! {tab} ^ v! {tab} {tab} ^ c! {tab} {tab} ^ v! {tab} {tab} ^ c! {tab} {tab} ^ v! {aba}

Ao pressionar a Janela z, eu quero que ele copie o campo atual na janela 1, vá para a janela 2 e cole-o, depois volte para a janela 1 e copie o próximo campo, vá para a janela 2 e cole no próximo campo e assim por diante.

Alguém pode ajudar.

obrigado

Respostas:


2

Não achei o envio de pressionamentos de tecla muito eficaz nesse tipo de circunstância. Existem muitas maneiras diferentes de dar errado. Eu tentaria usar as variáveis ​​internas da área de transferência e trocar apenas entre janelas uma vez.

Você pode usar uma tecla de atalho para executar um conjunto de instruções usando este formato em seu script:

z::
; do a bunch of stuff here
return

Eu pegava os dados do primeiro formulário de uma só vez e os armazenava:

clipboard =  ; Start off empty to allow ClipWait to detect 
Send ^c
ClipWait 
Field1:=ClipboardAll

Send {Tab} ; move to next field

Depois de obter os dados da primeira janela, você pode passar para a próxima janela:

Send AltTab 

(Embora um método melhor seja o WinActivate .)

Na segunda janela, você pode mover o formulário, inserindo dados da primeira:

clipboard = %Field1%
Send ^v
Wait 100

Send {Tab} ; move to field 2...

Consulte a página do AutoHotKey para variáveis ​​da área de transferência para referência.


1

Aqui estão 2 métodos muito simples para fazer exatamente a sequência alt-multiple-tabs desejada. O principal é que você pode especificar dentro dos colchetes quantas vezes deseja pressionar uma tecla !:

1) O seguinte usa o familiar ! para alt e vamos aba-alt 2 janelas de distância. Naturalmente, você pode alterar o '2' para qualquer número que precisar:

Send !{TAB 2}

Portanto, seu script pode ser modificado como:

#z::Send ^c!{tab}^v!{tab 2}^c!{tab 2}^v!{tab 2}^c!{tab 2}^v!{tab}

2) Na próxima, digamos explicitamente quando alt é pressionado e quando é lançado. Novamente, {tab} {tab} é abreviado para {tab 2} :

Send {alt down}{tab 2}{alt up}

Portanto, seu script pode ser modificado como:

#z::Send ^c!{tab}^v{alt down}{tab 2}{alt up}^c{alt down}{tab 2}{alt up}^v{alt down}{tab 2}{alt up}^c{alt down}{tab 2}{alt up}^v!{tab}

Antes de procurar uma solução, também tentei ! {Tab} {tab} que você tentou; apenas o segundo {tab} não é considerado como tendo alt acompanhado.

Encontrei a resposta na Ajuda do AutoHotKey >> Controle do teclado >> Send / SendRaw / SendInput / SendPlay / SendEvent: Enviar chaves e cliques


0

A maneira mais fácil de fazer isso, se os títulos das janelas sempre tiverem pelo menos o mesmo nome parcial (Sem título - Bloco de notas, Documento1 - Bloco de notas, etc), é usar a função WinWaitActive . Se você sabe que eles nunca vão mudar, abra o programa AU3Record.exe (localizado em C: \ Arquivos de Programas \ AutoIt3 \ SciTE \ ScriptWriter \ AU3Record.exe). Comece a gravar e clique entre as janelas algumas vezes. Pare a gravação e escolha os parâmetros que começam com WinWaitActive e os títulos de suas janelas nos parâmetros, remova qualquer coisa que possa mudar e use essas linhas para alternar entre janelas.

É muito mais eficiente fazê-lo dessa maneira, porque você não precisa se preocupar com sequências gigantes de comandos do teclado (faça isso, alt-tab, faça isso, alt-tab, faça isso novamente, alt-tab, etc.) para manter ao editar seu script.

Além disso, como uma nota lateral, eu dividiria as seqüências principais em menores. É mais fácil gerenciá-los quando houver apenas 2 ou 3 chaves em uma sequência por linha. Se você ainda precisar que tudo seja executado ao mesmo tempo, torne-o uma função.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.