Send, SendRaw, SendInput, SendPlay, SendEvent

Envia pressionamentos de teclas e cliques do mouse simulados para a janela ativa.

Send Teclas
SendRaw Teclas
SendInput Teclas
SendPlay Teclas
SendEvent Teclas

Parâmetros

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.

Variantes do comando Send

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.

Modos especiais

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}.

Modo bruto (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 (`,).

Modo texto [v1.1.27+]

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}.

Modo Blind

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:

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).

Nomes das Teclas

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}
{scYYY}
{vkXXscYYY}

Envia um pressionamento de tecla que contém a tecla virtual XX e código de leitura YYY. Por exemplo: Send {vkFFsc159}. Se a porção sc ou vk é omitida, o valor mais apropriado é enviado em seu lugar.

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, {LButton} executa um clique lógico do botão direito, mas um clique físico no botão esquerdo ativa a hotkey RButton::. Da mesma forma funcionam {RButton} e LButton::. Caso você queira sempre executar um clique lógico, use {Click} em vez de {L/RButton}.

{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.

Repetindo Pressionamentos ou Mantendo uma Tecla Pressionada

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 µ.

Observações Gerais

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):

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 [v1.0.43+]

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.

Se um script que não seja o que está executando um SendInput tenha um gancho de teclado de baixo nível instalado, o SendInput automaticamente reverter-se-á para SendEvent (ou SendPlay se Sendmode InputThenPlay estiver em vigor). Isso é feito porque a presença de um gancho externo anula todas as vantagens do SendInput, tornando-o inferior tanto ao SendPlay quanto ao SendEvent. Porém, já que o SendInput é incapaz de detectar um gancho de baixo nível em programas que não sejam [AutoHotkey v1.0.43+], ele não será revertido nestes casos, tornando-o menos confiável que SendPlay/Event.

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.

SendPlay [v1.0.43+]

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

Exemplos

Digita uma assinatura de duas linhas.

Send Cordialmente,{enter}Leo Carmo

Seleciona o menu Arquivo → Salvar (Alt+A seguido de S no Windows em português).

Send !as

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.