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.