[Utilitários]SendKeys

Started by bironet, 09 de April , 2008, 10:27:55 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

bironet

Este utilitário é um aplicativo Windows de arquivo único, o SendKeys.exe, que pode ser executado com argumentos na linha de comando para enviar pressionamento de teclas para a janela de um outro aplicativo rodando no Windows® de forma independente e com o controle do inicio, do durante e do final do envio.

Ele é interessante para ser chamado a partir de scripts que não tenham a instrução SendKeys como BATs do DOS ou a partir de códigos onde a instrução Sendkeys disponível não ofereça um controle adequado para ser chamada a partir de certas posições de um procedimento como em VBA

Características:
- Pode ser definida uma espera em segundos antes de iniciar o envio das teclas;
- Pode ser definida uma espera em segundos para desistir, se a janela alvo não for encontrada;
- A janela alvo pode ser a janela ativa ou uma com título definido;
- A sintaxe do texto a ser enviado é a mesma da instrução Sendkeys do VBA com as seguintes características adicionais não existentes em VBA:
   {PAUSE} - Pausa 1 segundo antes de enviar as teclas seguintes;
   {PAUSE n} - Pausa n segundos antes de enviar as teclas seguintes;
   {PRTSC} - Envia a tecla 'Print Screen' para capturar a tela inteira;
   %{PRTSC} - Envia as teclas 'Alt + Print Screen' para capturar apenas a janela ativa;
   ^%{DEL} - Envia as teclas 'Ctrl + Alt + DEL' para DESLIGAR o computador, SE POSSÍVEL;
   ^%{DEL 1} - Envia as teclas 'Ctrl + Alt + DEL' para DESLIGAR o computador, FORÇADAMENTE;
   ^%{DEL 2} - Envia as teclas 'Ctrl + Alt + DEL' para REINICIAR o computador, SE POSSÍVEL;
   ^%{DEL 3} - Envia as teclas 'Ctrl + Alt + DEL' para REINICIAR o computador, FORÇADAMENTE;
   ^%{DEL 4} - Envia as teclas 'Ctrl + Alt + DEL' para FAZER LOGOFF do usuário, SE POSSÍVEL;
   ^%{DEL 5} - Envia as teclas 'Ctrl + Alt + DEL' para FAZER LOGOFF do usuário, FORÇADAMENTE.
- Roda em silêncio e, opcionalmente, até sem alerta de falhas;
- Pode registrar o final da execução salvando um arquivo log (Sendkeys.log) no disco que pode ser usado para sincronização;
- Podem ser realizadas execuções simultâneas e teclas podem ser enviadas para mais de uma janela simultaneamente;
- Rodando o SendKeys.exe sem argumentos, ele exibi uma caixa de diálogo com uma ajuda rápida, um comando para teste e um outro comando para ajuda mais detalhada.

Sintaxe:
Caminho\SendKeys.exe Arg1 Arg2 Arg3 Arg4 [Arg5]
Argumentos separados por espaços e Arg5 é opcional.

Arg1 - Espera em segundos antes de iniciar o envio, depois de ativar;
Arg2 - Espera em segundos para desistir, se a janela não for encontrada;
Arg3 - Texto do título da janela do aplicativo (Ver Obs1 e 2.);
Arg4 - Texto com as teclas a serem enviadas (Ver Obs1 e 3);
Arg5 - Opcional: 1 - Roda em silêncio sem alerta de falhas; 2 - Salva um arquivo de log (Sendkesy.log) no disco para marcar o final da execução. Para sincronizar, um script em BAT do DOS ou em VBA pode apagar este arquivo log, enviar as teclas e pausar até ele ser criado novamente.

Obs1.: Aspas são necessárias, se houver espaço no texto.

Obs2.: No lugar do texto do título pode ser usado também o número retornado pela função Shell do VBA. Título vazio (Aspas sem texto) envia teclas para a janela ativa.

Obs3.: Para o envio de teclas especiais, ver a ajuda do VBA para a instrução Sendkeys. A única diferença é o caractere þ (Alt+0254) que aqui tem um significado especial; Ele gera uma pausa de 1 segundo antes do envio das teclas seguintes e pode ser repetido para gerar pausas maiores.

Exemplos:

1 – Em BAT do DOS ou na caixa do comando executar do Windows pode ser algo assim:

SendKeys.exe 1 10 "Sem título - Bloco de Notas" "Alô!~þDepois de 1s.~þþDepois de 3s.~"

2 - Em VBA usa-se a função Shell como no código teste abaixo:

Dim Ret
Shell "Notepad.exe", vbNormalFocus
Ret = Shell("Path\SendKeys.exe 1 10 ""Sem título - Bloco de Notas"" ""Alô!~þDepois de 1s.~þþDepois de 3s.~"", vbNormalFocus)
Tested.

Sintaxe Completa do Texto a Enviar:
Cada tecla é representada por um ou mais caracteres. Para especificar um único caractere de teclado, utilize o próprio caractere. Por exemplo, para representar a letra A, utilize "A" para string. Para representar mais de um caractere, anexe cada caractere adicional ao que o antecede. Para representar as letras A, B e C, utilize "ABC" para string.

O sinal de adição (+), circunflexo (^), sinal de porcentagem (%), til (~) e parênteses ( ) possuem significados especiais para SendKeys. Para especificar um desses caracteres, coloque-os entre chaves ({}). Por exemplo, para especificar o sinal de adição, utilize {+}. Os colchetes ([ ]) não têm significado especial para SendKeys, mas você deve colocá-los entre chaves. Em outros aplicativos, os colchetes têm um significado especial que pode ser importante quando ocorrer intercâmbio dinâmico de dados (DDE, Dynamic Data Exchange). Para especificar caracteres de chaves, utilize {{} e {}}.

Para especificar caracteres que não são exibidos quando você pressiona uma tecla, como ENTER ou TAB, e teclas que representam ações em vez de caracteres, utilize os códigos a seguir.

Tecla Código
BACKSPACE {BACKSPACE}, {BS} ou {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL ou DELETE {DELETE} ou {DEL}
SETA PARA BAIXO {DOWN}
END {END}
ENTER  {ENTER}ou ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS ou INSERT {INSERT} ou {INS}
SETA À ESQUERDA {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
SETA À DIREITA {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
SETA ACIMA {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

 
Estas, apesar de não existir no VBA, também são suportadas aqui.

Tecla Código
Print Screen {PRTSC}
Pausar 1 segundo {PAUSE}
Pausar n segundos {PAUSE n}

Para especificar teclas combinadas com qualquer combinação das teclas SHIFT, CTRL e ALT, preceda o código de teclas de um ou mais dos códigos a seguir:

Tecla Código
SHIFT +
CTRL ^
ALT %


Para especificar que qualquer combinação de SHIFT, CTRL e ALT deve ser mantida pressionada enquanto várias outras teclas são pressionadas, coloque o código dessas teclas entre parênteses. Por exemplo, para especificar manter pressionada SHIFT enquanto E e C são pressionadas, utilize "+(EC)". Para especificar manter pressionada SHIFT enquanto E é pressionada, seguida de C sem SHIFT, utilize "+EC".
Para especificar a repetição de teclas, utilize a forma {tecla número}. Você deve colocar um espaço entre tecla e número. Por exemplo, {ESQUERDA 42} significa pressionar a tecla SETA À ESQUERDA 42 vezes; {h 10} significa pressionar H 10 vezes.

Observação   Você não pode utilizar SendKeys para enviar pressionamentos de teclas para um aplicativo que não tenha sido projetado para ser executado no Microsoft Windows.

oRlAnd CpaP