AutoHotKey - scripts com mais de um Alt-Tab

2

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

A primeira aba alt funciona da janela 1 para a janela 2, mas a próxima aba-alt para mover da janela 2 para a janela 1 não funciona.

Meu script é o seguinte:

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

Ao pressionar Window z eu quero copiar o campo atual na janela 1, mover para a janela 2 e colá-lo, então voltar para a janela 1 e copiar o próximo campo, mover para a janela 2 e colar no próximo campo e assim por diante.

Alguém pode ajudar.

Obrigado

    
por arrogers 12.10.2010 / 11:02

3 respostas

2

Eu não encontrei o envio de strings de teclas para ser muito eficaz neste tipo de circunstância. Existem muitas maneiras diferentes de dar errado. Eu tentaria usar o construído em variáveis da área de transferência e só trocar entre as janelas uma vez.

Você pode usar uma tecla de atalho para fazer um conjunto de instruções usando esse formato no seu script:

z::
; do a bunch of stuff here
return

Eu pegaria os dados do primeiro formulário de uma só vez e os armazenaria:

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 ir para a próxima janela:

Send AltTab 

(Embora um método melhor seja WinActivate .)

Na segunda janela, você pode mover o formulário para baixo, inserindo dados do primeiro:

clipboard = %Field1%
Send ^v
Wait 100

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

Veja a página AutoHotKey de Variáveis da Área de Transferência para referência.

    
por 15.10.2010 / 22:15
1

Aqui estão 2 métodos muito simples para fazer exatamente a sequência de alt-multiple-tabs que você deseja. O principal é, você pode especificar dentro das chaves quantas vezes você quer que uma tecla seja pressionada!:

1) O seguinte usa o familiar ! para alt e permite que você mantenha duas janelas separadas. Naturalmente, você pode mudar o '2' para qualquer número que precisar:

Send !{TAB 2}

Então, o 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) Este próximo diz explicitamente quando alt é pressionado e quando é liberado. Novamente, {tab} {tab} é abreviado para {tab 2} :

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

Então, o 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; é só que a segunda {tab} não é considerada como tendo o alt acompanhado.

Encontrei a resposta na Ajuda do AutoHotKey > > Controle do teclado > > Enviar / SendRaw / SendInput / SendPlay / SendEvent: Enviar chaves & Cliques

    
por 13.05.2011 / 18:52
0

A maneira mais fácil de fazer isso, se os títulos das janelas sempre tiverem pelo menos o mesmo nome parcial (Untitled - Notepad, Document1 - Notepad, etc) é usar 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 para frente e para trás entre as janelas algumas vezes. Pare de gravar e pegue as linhas 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 as janelas.

É muito mais eficiente fazê-lo dessa forma, porque você não precisa se preocupar com strings gigantes de comandos de 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 sequências de teclas em outras menores. É mais fácil gerenciá-los quando há apenas 2 ou 3 chaves em uma sequência por linha. Se você ainda precisar que todas sejam executadas ao mesmo tempo, torne-as uma função.

    
por 13.05.2011 / 19:28