Envia pressionamentos de teclas e cliques do mouse simulados para a janela ativa.
Send Teclas SendRaw Teclas SendInput Teclas SendPlay Teclas SendEvent Teclas
A sequência de teclas a enviar. Tal como em outros comandos, a vírgula na frente do primeiro parâmetro é opcional.
Por padrão (isto é, se nem o comando SendRaw nem o modo bruto ou modo text são usados), os caracteres ^+!#{}
têm um significado especial. Os caracteres ^+!#
representam as teclas modificadoras Ctrl, Shift, Alt e Win, respectivamente. Isso afeta somente a tecla que vier logo depois. Para enviar a correspondente tecla modificadora em si, envolva o nome da tecla em chaves. Apenas pressione (segure) ou solte a tecla, e escreva a palavra “down” ou “up” após o nome da tecla (pressionar e soltar, respectivamente), como mostrado abaixo.
Símbolo | Tecla | Pressionar | Soltar | Exemplos |
---|---|---|---|---|
^ | {Ctrl} | {Ctrl down} | {Ctrl up} | Send ^{Home} pressiona Ctrl+Home |
+ | {Shift} | {Shift down} | {Shift up} | Send +abC envia o texto "AbC"Send !+a pressiona Alt+Shift+A |
! | {Alt} | {Alt down} | {Alt up} | Send !a pressiona Alt+A |
# | {LWin} {RWin} |
{LWin down} {RWin down} |
{LWin up} {RWin up} |
Send #e segura Win e então pressiona E |
Observação: Tendo em vista que as letras maiúsculas são produzidas mediante o envio da tecla Shift, A
produz um efeito diferente de a
em alguns programas. Por exemplo, !A
pressiona Alt+Shift+A e !a
pressiona Alt+A. Se estiver em dúvida, use letra minúscula.
Os caracteres {}
são usados para envolver nomes de teclas e outras opções, bem como para enviar caracteres especiais literalmente. Por exemplo, {Tab}
é Tab e {!}
é um ponto de exclamação literal.
[v.1.1.27+]: envolver uma letra puramente ASCII (a-z ou A-Z) em chaves força-a a ser enviada com o código de tecla virtual, mesmo se o caractere não existir no layout do teclado em uso. Em outras palavras, Send a
produz a letra “a” enquanto Send {a}
pode ou não produzir “a”, dependendo do layout do teclado. Para detalhes, veja as observações abaixo.
Send: por padrão, Send é sinônimo de SendEvent; mas também pode se tornar um sinônimo de SendInput ou SendPlay por meio do comando SendMode.
SendRaw: similar ao Send, exceto que todos os caracteres das Teclas são interpretados e enviados literalmente. Veja modo bruto para detalhes.
SendInput e SendPlay [v1.0.43+]: SendInput e SendPlay usam a mesma sintaxe do Send mas são geralmente mais rápidas e mais confiáveis. Além disso, essas duas variantes do Send memorizam a atividade do teclado e mouse durante o envio, o que impede que as teclas pressionadas pelo usuário sejam indesejadamente intercaladas com aquelas enviadas pelos comandos SendInput e SendPlay. SendMode pode ser usado para fazer com que Send torne-se sinônimo de SendInput ou SendPlay. Para mais detalhes de cada modo, veja SendInput e SendPlay abaixo.
SendEvent [v1.0.43+]: SendEvent envia pressionamentos de teclas usando o mesmo método do comando Send tal como este funcionava nas versões anteriores à 1.0.43. A frequência com que as teclas são enviadas é determinada pelo comando SetKeyDelay.
Os modos a seguir afetam a interpretação dos caracteres nas Teclas ou o comportamento de comandos que enviam pressionamentos de teclas como Send, SendInput, SendPlay, SendEvent e ControlSend. Esses modos são especificados como {x}
em “Teclas”, onde x é Raw, Text ou Blind. Por exemplo, {Raw}
.
O modo bruto pode ser habilitado com {Raw}
, SendRaw ou ControlSendRaw, que faz com que todos os caracteres subsequentes, incluindo os caracteres especiais ^+!#{}
, sejam interpretados literalmente em vez de traduzir {Enter}
para Enter, ^c
para Ctrl+C, etc. Por exemplo, tanto Send {Raw}{Tab}
e SendRaw {Tab}
enviam {Tab}
em vez de Tab.
O modo bruto não afeta a interpretação de sequências de escape, referências a variáveis e expressões. Por exemplo, SendRaw ``100%
envia a string `100%
. Quando usar ControlSend também é necessário escapar vírgulas literais (`,
).
O modo text pode ser habilitado com {Text}
, o que é similar ao modo bruto, exceto que não se tenta traduzir os caracteres (com exceção de `r
, `n
, `t
e `b
) para os respectivos códigos de teclas; em vez disso, o método alternativo é usado para todos os demais caracteres. Para SendEvent, SendInput e ControlSend, isso melhora a confiabilidade porque os caracteres são muito menos dependentes da precisão do estado da tecla modificadora — se pressionada ou solta. Esse modo pode ser combinado com o modo blind para evitar a soltura de quaisquer teclas modificadoras: Send {Blind}{Text}seu texto
. Contudo, alguns aplicativos requerem que as teclas modificadoras sejam soltas.
`n
, `r
e `r`n
são todas traduzidas para um único Enter, ao contrário do comportamento padrão e do modo bruto, que traduzem `r`n
para dois Enters. `t
é traduzido para Tab e `b
para Backspace, mas todos os demais caracteres são enviados sem tradução.
[v1.1.29+]: da mesma forma que no modo blind, o modo text ignora o SetStoreCapsLockMode (isto é, o estado da tecla CapsLock não é alterado) e não espera que a tecla Win seja solta. Isso é porque o modo text tipicamente não depende do estado da tecla CapsLock e não pode desencadear a tecla de atalho Win+L do sistema. Entretanto, isso só se aplica quando as Teclas começam com {Text}
ou {Blink}{Text}
.
O modo blind pode ser habilitado com {Blind}
, o que dá ao script mais controle ao desabilitar várias coisas que normalmente acontecem automaticamente, de forma a fazer com que o script funcione da maneira esperada. {Blind}
deve ser o primeiro item na string para habilitar o modo blind. Ele tem os seguintes efeitos:
+s::Send {Blind}abc
enviaria ABC em vez de abc porque o usuário está mantendo Shift pressionada.^space::Send {Ctrl up}
automaticamente pressiona Ctrl de novo se o usuário ainda estiver fisicamente segurando Ctrl, ao passo que ^space::Send {Blind}{Ctrl up}
permite que Ctrl esteja logicamente solta apesar de estar fisicamente pressionada.O modo blind é usado internamente ao se remapear uma tecla. Por exemplo, o remapeamento a::b
produziria: 1) “b” quando você pressiona “a”; 2) “B” maiúsculo quando você pressiona “A” maiúsculo; e 3) Ctrl+B quando você digita Ctrl+A.
{Blind}
não é suportado pelo comando SendRaw ou ControlSendRaw; use {Blind}{Raw}
no lugar.
O modo blind não é completamente suportado por SendPlay especialmente quando lidando com as teclas modificadoras (Ctrl, Alt, Shift e Win).
A tabela a seguir lista as teclas especiais que podem ser enviadas (cada nome de tecla deve ser envolto em chaves):
Nome da tecla | Descrição |
---|---|
{F1} - {F24} | Teclas de função. Por exemplo: {F12} é F12. |
{!} | ! |
{#} | # |
{+} | + |
{^} | ^ |
{{} | { |
{}} | } |
{Enter} | Enter no teclado principal |
{Escape} ou {Esc} | Esc |
{Space} | Space (esta só é necessária para enviar strings com espaços que aparecem ou no início ou no final delas — as que vierem no meio podem ser espaços literais. |
{Tab} | Tab |
{Backspace} ou {BS} | Backspace |
{Delete} ou {Del} | Del |
{Insert} ou {Ins} | Ins |
{Up} | ↑ (seta para cima) no teclado principal |
{Down} | ↓ (seta para baixo) no teclado principal |
{Left} | ← (seta para a esquerda) no teclado principal |
{Right} | → (seta para a direita) no teclado principal |
{Home} | Home no teclado principal |
{End} | End no teclado principal |
{PgUp} | PgUp no teclado principal |
{PgDn} | PgDn no teclado principal |
{CapsLock} | CapsLock (usando SetCapsLockState é mais confiável nos Windows 2000 e XP). Enviar {CapsLock} pode exigir que se declare SetStoreCapsLockmode Off antes |
{ScrollLock} | ScrollLock (veja também: SetScrollLockState) |
{NumLock} | NumLock (veja também: SetNumLockState) |
{Control} ou {Ctrl} | Ctrl (informações técnicas: envia a tecla virtual neutra mas o código de leitura esquerdo) |
{LControl} ou {LCtrl} | Ctrl da esquerda (informações técnicas: envia a tecla virtual da esquerda em vez da neutra) |
{RControl} ou {RCtrl} | Tecla Ctrl da direita |
{Control down} ou {Ctrl down} | Segura Ctrl até que {Ctrl up} seja enviada. To hold down the left or right key instead, replace Ctrl with LCtrl or RCtrl. |
{Alt} | Alt (informações técnicas: envia a tecla virtual neutra mas o código de leitura esquerdo) |
{LAlt} | Alt da esquerda (informações técnicas: envia a tecla virtual da esquerda em vez da neutra) |
{RAlt} | Tecla Alt da direita (ou AltGr, dependendo do layout do teclado) |
{Alt down} | Segura Alt até que {Alt up} seja enviada To hold down the left or right key instead, replace Alt with LAlt or RAlt. |
{Shift} | Shift (informações técnicas: envia a tecla virtual neutra mas o código de leitura esquerdo) |
{LShift} | Shift da esquerda (informações técnicas: envia a tecla virtual da esquerda em vez da neutra) |
{RShift} | Tecla Shift da direita |
{Shift down} | Segura Shift até que {Shift up} seja enviada. To hold down the left or right key instead, replace Shift with LShift or RShift. |
{LWin} | Tecla Win (botão do Windows) da esquerda |
{RWin} | Tecla Win da direita |
{LWin down} | Segura Win até que {Win up} seja enviada |
{RWin down} | Segura Win da direita até que {RWin up} seja enviada |
{AppsKey} | Menu (invoca o menu contexto que abre ao se clicar com o botão direito) |
{Sleep} | Adormecer (aguardar uma quantidade especificada de milissegundos) |
{ASC nnnnn} | Envia uma combinação com Alt+nnnnn, que pode ser usada para gerar caracteres especiais que não existem no teclado. Para gerar caracteres ASCII, especifique um número entre 1 e 255. Para gerar caracteres ANSI (padrão na maioria dos idiomas), especifique um número entre 128 e 255, mas insira um zero na frente, como {Asc 0133}. Caracteres Unicode podem ser gerados especificando-se um número entre 256 e 65535 (sem um zero na frente). Contudo, isso não é suportado por todos os programas. Para alternativas, veja a seção abaixo. |
{U+nnnn} | [AHK_L 24+]: envia um caractere Unicode onde nnnn é o valor hexadecimal do caractere excluindo-se o prefixo 0x. Isso tipicamente não é necessário em versões Unicode do AutoHotkey, em que os comandos Send e ControlSend automaticamente suportam texto Unicode. SendInput() ou WM_CHAR será usado para enviar o caractere e o modo atual do comando Send não terá efeito. Caracteres enviados desta forma normalmente não desencadeiam teclas de atalho ou hotkeys. |
{vkXX} |
Envia um pressionamento de tecla que contém a tecla virtual XX e código de leitura YYY. Por exemplo: Os valores para XX e YYY são hexadecimais e podem normalmente ser determinados por meio do item de menu View -> Key history da janela principal do script. Veja também: Teclas Especiais Atenção: combinar vk e sc deste jeito só é válido com Send. Antes da versão [1.1.27], as hotkeys permitiam mas ignoravam todos os caracteres não hexadecimais que sucediam XX. |
{Numpad0} - {Numpad9} | As teclas de algarismos do teclado numérico (como visto quando NumLock está LIGADA). Por exemplo: {Numpad5} é 5. |
{NumpadDot} | . (ponto do teclado numérico) (como visto quando NumLock está LIGADA). |
{NumpadEnter} | Enter no teclado numérico |
{NumpadMult} | * (asterisco/sinal de multiplicação do teclado numérico) |
{NumpadDiv} | / (barra/sinal de divisão do teclado numérico) |
{NumpadAdd} | + (sinal de adição do teclado numérico) |
{NumpadSub} | - (hífen/sinal de subtração do teclado numérico) |
{NumpadDel} | Del no teclado numérico (esta tecla e as seguintes são as usadas quando NumLock está DESLIGADA. |
{NumpadIns} | Ins no teclado numérico |
{NumpadClear} | Tecla “Clear” no teclado numérico (normalmente 5 quando a tecla NumLock está DESLIGADA) |
{NumpadUp} | ↑ (tecla seta para cima) no teclado numérico |
{NumpadDown} | ↓ (tecla seta para baixo) no teclado numérico |
{NumpadLeft} | ← (tecla seta para a esquerda) no teclado numérico |
{NumpadRight} | → (tecla seta para a direita) no teclado numérico |
{NumpadHome} | Home no teclado numérico |
{NumpadEnd} | End no teclado numérico |
{NumpadPgUp} | PgUp no teclado numérico |
{NumpadPgDn} | PgDn no teclado numérico |
{Browser_Back} | Aciona o botão “Voltar” para uso nos navegadores |
{Browser_Forward} | Aciona o botão “Avançar” para uso nos navegadores |
{Browser_Refresh} | Aciona o botão “Atualizar” para uso nos navegadores |
{Browser_Stop} | Aciona o botão “Parar” para uso nos navegadores |
{Browser_Search} | Aciona o botão “Pesquisar” para uso nos navegadores |
{Browser_Favorites} | Aciona o botão “Favoritos” para uso nos navegadores |
{Browser_Home} | Abre o navegador e vai para a página inicial |
{Volume_Mute} | Muta/desmuta o volume principal. Geralmente equivalente a SoundSet, +1, , mute . |
{Volume_Down} | Diminui o volume principal. Geralmente equivalente a SoundSet -5 . |
{Volume_Up} | Aumenta o volume principal. Geralmente equivalente a SoundSet +5 . |
{Media_Next} | Seleciona a próxima faixa no player de mídia |
{Media_Prev} | Seleciona a faixa anterior no player de mídia |
{Media_Stop} | Dá Stop no player de mídia |
{Media_Play_Pause} | Pausa ou dá Play no player de mídia |
{Launch_Mail} | Abre o aplicativo padrão de e-mail |
{Launch_Media} | Abre o player de mídia |
{Launch_App1} | Abre o “aplicativo 1” configurado pelo usuário |
{Launch_App2} | Abre o “aplicativo 2” configurado pelo usuário |
{PrintScreen} | PrtSc |
{CtrlBreak} | Ctrl+Pause |
{Pause} | Pause |
{Click [Opções]} [v1.0.43+] |
Envia um clique do mouse usando as mesmas opções disponíveis no comando Click. Por exemplo, Send {Click} clicaria uma vez com botão esquerdo do mouse nas coordenadas atuais do cursor do mouse, e Send {Click 100 200} clicaria nas coordenadas 100, 200 (baseadas no modo configurado com CoordMode). Para mover o mouse sem clicar, especifique 0 depois das coordenadas; por exemplo: Send {Click 100 200 0} . O atraso entre os cliques do mouse é determinado pela instrução SetMouseDelay (não SetKeyDelay). |
{WheelDown}, {WheelUp}, {WheelLeft}, {WheelRight}, {LButton}, {RButton}, {MButton}, {XButton1}, {XButton2} |
Envia um evento de botão do mouse à posição atual do cursor (para ter controle sobre a posição e outras opções, use {Click} como visto acima). O atraso entre cliques do mouse é determinado por SetMouseDelay. WheelLeft/Right requerem [v1.0.48+], mas não têm efeito em sistemas operacionais anteriores ao Windows Vista. LButton e RButton correspondem aos botões esquerdo e direito “físicos” quando usados com Send, mas os botões esquerdo e direito “lógicos” são usados com hotkeys. Dito de outro modo, se o usuário permutou os botões pelas configurações do sistema, |
{Blind} | Ativa o modo blind, o qual dá ao script mais controle ao desabilitar várias coisas que são normalmente feitas de modo automático para fazer com que elas, em geral, funcionem como esperado. A string {Blind} deve ocorrer no início da string. |
{Raw} [v1.0.43+] |
Habilita o modo bruto, o qual faz com que os caracteres a seguir sejam interpretados literalmente: ^+!#{} . Apesar de a string {Raw} não precisar ocorrer no início da string, uma vez especificada, ela permanece em vigor até o final da string. |
{Text} [v1.1.27+] |
Habilita o modo text, o qual envia um fluxo de caracteres em vez de pressionamentos de teclas. Como no modo bruto, o modo text faz com que os caracteres a seguir sejam interpretados literalmente: ^+!#{} . Embora a string {Text} não precise ocorrer no início da strng, uma vez especificadas, ela permanece em vigor até o final da string. |
Para repetir um pressionamento de tecla: envolva o nome da tecla em chaves seguido do número de vezes a repetir. Por exemplo:
Send {DEL 4} ; Pressiona a tecla Delete 4 vezes. Send {S 30} ; Envia 30 caracteres S (maiúsculos). Send +{TAB 4} ; Pressiona Shift-Tab 4 vezes.
Para manter pressionada ou soltar uma tecla: envolva o nome da tecla em chaves seguido da palavra down ou up. Por exemplo:
Send {b down}{b up} Send {TAB down}{TAB up} Send {Up down} ; Pressiona e segura a tecla SETA PARA CIMA. Sleep 1000 ; Segura a tecla por um segundo (1000 milissegundos). Send {Up up} ; Solta a tecla SETA PARA CIMA.
Quando uma tecla é mantida pressionada pelo método acima, ela não começa a repetir automaticamente como ela faria se fosse mantida pressionada (isso é porque a repetição automática é uma característica do driver/hardware). Entretanto, um Loop pode ser usado para simular a repetição automática. O exemplo a seguir envia 20 pressionamentos da tecla Tab:
Loop 20 { Send {Tab down} ; Repetir automaticamente consiste em vários eventos “down” consecutivos (sem os eventos “up” correspondentes). Sleep 30 ; O número de milissegundos entre os pressionamentos (ou use SetKeyDelay). } Send {Tab up} ; Solta a tecla.
Por padrão, o comando Send não irá automaticamente soltar uma tecla modificadora (Control, Shift, Alt e Win) se essa tecla tiver sido “pressionada” ao ser enviada com o Send. Por exemplo, Send a
pode se comportar de maneira similar a Send {Blind}{Ctrl up}a{Ctrl down}
se o usuário estiver fisicamente mantendo pressionada Ctrl, mas Send {Ctrl Down}
seguida de Send a
produzirá Ctrl+A. DownTemp e DownR podem ser usadas para ignorar esse comportamento. DownTemp e DownR têm o mesmo efeito de Down exceto para as teclas modificadoras (Control, Shift, Alt, e Win).
DownTemp sinaliza às ocorrências subsequentes do comando Send que a tecla não está permanentemente pressionada, e pode ser solta toda vez que um pressionamento de tecla o requer. Por exemplo, Send {Control DownTemp}
seguida posteriormente por Send a
produziria A, não Ctrl+A. Qualquer uso do comando Send pode potencialmente soltar a tecla modificadora permanentemente, então DownTemp não é ideal para remapear teclas modificadoras.
[v1.1.27+]: DownR (em que "R" significa remapear, que é seu uso principal) sinaliza às ocorrências subsequentes do comando Send que, se a tecla é automaticamente solta, ela deve ser pressionada novamente quando o Send termina. Por exemplo, Send {Control DownR}
seguido posteriormente por Send a
produziria A, não Ctrl+A, mas deixará Ctrl no estado pressionado para ser usada com teclas de atalho. Em outras palavras, DownR tem um efeito similar a pressionar fisicamente a tecla.
Se um caractere não corresponde à tecla virtual no layout atual do teclado, ele não poderá ser “pressionado” ou “solto”. Por exemplo, Send {µ up}
não tem efeito na maioria dos layouts, e Send {µ down}
é equivalente a Send µ
.
Caracteres x teclas: Por padrão, caracteres são enviados ao se traduzi-los primeiro para pressionamentos de teclas. Se essa tradução não for possível (isto é, se o layout atual do teclado não contém uma tecla ou combinação de teclas que produzem o caractere), o caractere é enviado por meio de um dos métodos alternativos abaixo:
Observação: caracteres enviados por quaisquer dos métodos acima normalmente não ativarão teclas de atalho ou hotkeys.
[v1.1.27+]: para caracteres no intervalo a-z ou A-Z (letras ASCII puras), cada caractere que não existir no layout atual do teclado pode ser enviado ou como um caractere ou como o código de tecla virtual (vk41-vk5A):
Send {Raw}Atenciosamente
envia o texto conforme esperado, embora pressionar R (vk52) produza um outro caractere (como K no layout russo). {Raw}
pode ser omitido neste caso, a não ser que uma tecla modificadora tenha sido posta em efeito por um Send anterior.^c
e {Ctrl down}c{Ctrl up}
ativam a tecla de atalho padrão Ctrl+C e {c}
é equivalente a {vk43}
.Se a letra existe no layout atual, ela será sempre enviada na forma do código da tecla que o layout associar àquela letra (a não ser que o modo text seja usado, caso em que o caractere é enviado por outros meios). Em outras palavras, a seção acima só é relevante para layouts que não se baseiam no latino, como o russo.
Estado das teclas modificadoras: Quando o comando Send é exigido para alterar o estado das teclas modificadoras Win ou Alt (como se o usuário estivesse mantido uma dessas teclas pressionadas), o programa poderá injetar pressionamentos de teclas adicionais (Ctrl por padrão) para impedir que o Menu Iniciar do Windows seja aberto. Para detalhes, vide #MenuMaskKey.
BlockInput comparado a SendInput/SendPlay: Apesar de o comando BlockInput poder ser usado para impedir que teclas fisicamente pressionadas pelo usuário atrapalhem o fluxo dos pressionamentos simulados, costuma ser melhor usar SendInput ou SendPlay de forma que os pressionamentos e cliques do mouse fiquem ininterruptíveis. Isso é porque, ao contrário do que ocorre com o BlockInput, o SendInput/Play não descarta o que o usuário digita durante o envio (durante a execução do comando Send); em vez disso, as teclas pressionadas nesse momento são memorizadas e enviadas logo depois.
Quando enviar um grande número de pressionamentos, uma continuação de seção pode ser usada para melhorara legibilidade e manutenibilidade.
Tendo em vista que o sistema operacional não permite a simulação da combinação Ctrl+Alt+Del, fazer algo como Send ^!{Delete}
não terá efeito algum.
Send poderá não ter nenhum efeito no Windows Vista ou posterior se a janela ativa está rodando com privilégios administrativos e o script não. Isso é por conta do mecanismo de segurança chamado Isolamento de Privilégios da Interface do Usuário.
SendInput é geralmente o método preferido para enviar pressionamentos de teclas e cliques do mouse por causa de sua velocidade e confiabilidade superiores. Na maioria das condições, SendInput é quase instantâneo, mesmo quando enviando longas strings. Como o SendInput é tão rápido, também é mais confiável porque há menor oportunidade de alguma outra janela abrir na frente e interceptar os pressionamentos de teclas. A confiabilidade é ainda maior devido ao fato de que qualquer coisa que o usuário digite durante um SendInput é adiado até que este finalize.
Ao contrário de outros modos de envio, o sistema operacional limita o SendInput a aproximadamente 5000 caracteres (o que pode variar dependendo da versão do sistema e das configurações de desempenho). Caracteres e eventos além desse limite não são enviados.
Observação: SendInput ignora SetKeyDelay porque o sistema operacional não suporta um delay (adiamento) nesse modo. Todavia, quando o SendInput reverte-se para SendEvent nas condições descritas abaixo, ele usa SetKeyDelay -1, 0
(a não ser que o KeyDelay do SendEvent seja -1,-1
, caso em que -1,-1
será usado. Quando o SendInput reverte-se para SendPlay, ele usa o KeyDelay do SendPlay.
Quando SendInput envia cliques do mouse através de meios como {Click} e CoordMode Mouse, Relative
está em vigor (que é a opção padrão), todo clique será relativo à janela que estava ativa no início do Send. Consequentemente, se o SendInput intencionalmente ativar outra janela (como por meio do Alt-Tab), as coordenadas de cliques subsequentes dentro do mesmo comando serão erradas porque elas continuarão a ser relativas à janela anterior e não à nova.
Aviso: SendPlay pode não ter nenhum efeito se o UAC estiver ligado; mesmo que o script esteja sendo executado como administrador. Para mais informações, veja o FAQ.
A maior vantagem do SendPlay é sua capacidade de “tocar” pressionamentos de teclas e cliques do mouse em uma maior variedade de games do que os outros modos. Por exemplo, um jogo em particular pode aceitar hotstrings somente quando a opção SendPlay estiver sendo usada.
Dos três modos do comando Send, SendPlay é o menos comum porque ele não simula pressionamentos de teclas e cliques do mouse em si. Em vez disso, ele cria uma série de eventos (mensagens) que fluem diretamente para a janela ativa (similar a ControlSend, mas em um nível mais baixo). Consequentemente, SendPlay não desencadeia hotkeys ou hotstrings.
Da mesma forma que com o SendInput, os pressionamentos de teclas do SendPlay não sofrem “intercalação” com as teclas pressionadas pelo usuário. Assim, se o usuário por acaso digitar algo durante um SendPlay, esses pressionamentos serão adiados até o fim da execução do comando.
Apesar de SendPlay ser consideravelmente mais lento que SendInput, é geralmente mais rápido que o modo SendEvent tradicional (mesmo quando o KeyDelay é -1.)
Ambas as teclas Win (LWin e RWin) são automaticamente bloqueadas durante um SendPlay se o gancho de teclado estiver instalado. Isso impede a aparição do Menu Iniciar se o usuário pressionar Win acidentalmente durante o envio. Em contraste, teclas que não sejam LWin e RWin não precisam ser bloqueadas porque o sistema operacional automaticamente adia-as até depois do SendPlay (via buffering).
SendPlay não usa as configurações padrão do SetKeyDelay e SetMouseDelay. Em vez disso, ele por padrão não tem delay algum, o que pode ser mudado conforme visto nos exemplos que seguem:
SetKeyDelay, 0, 10, Play ; Note que tanto 0 e -1 são a mesma coisa no modo SendPlay. SetMouseDelay, 10, Play
SendPlay é incapaz de ligar ou desligar CapsLock, NumLock, ou ScrollLock. De maneira similar, ele também é incapaz de mudar o estado de uma tecla como visto pelo comando GetKeyState a não ser que os pressionamentos de teclas sejam enviados a uma das janelas do próprio script. Mesmo assim, quaisquer modificações às teclas modificadoras da esquerda ou direita (ex: RControl) podem ser detectadas somente por meio das suas correspondentes neutras (ex: Control). Além disso, SendPlay tem outras limitações descritas na página do SendMode.
Ao contrário de SendInpute SendEvent, o usuário pode interromper um SendPlay pressionando Ctrl+Alt+Del ou Ctrl+Esc. Quando isso acontece, as teclas remanescentes não pressionadas não são enviadas mas o script continua executando como se o SendPlay tivesse sido completado normalmente.
Apesar de o SendPlay poder enviar eventos com LWin e RWin, essas teclas são enviadas diretamente para a janela ativa em vez de realizar suas ações nativas do sistema operacional. Para contornar isso, use SendEvent. Por exemplo, SendEvent #r
exibiria o menu Executar do Menu Iniciar.
SendMode, SetKeyDelay, SetStoreCapsLockMode, Sequências de escape (ex. `%), ControlSend, BlockInput, Hotstrings, WinActivate
Pula para o final da linha no texto atual e daí envia quatro pressionamentos de Shift+Seta para a esquerda.
Send {End}+{Left 4}
Envia uma longa série de caracteres brutos pelo método mais rápido.
SendInput {Raw}Uma longa sequência de caracteres brutos enviada pelo método mais rápido.