É possível executar um script contido dentro de uma variável?
ex: Script = Msgbox Olá`nVar1 = 1`nMsgbox %Var1%
Executar um script que está dentro de uma var Topic is solved
Moderator: Gio
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Executar um script que está dentro de uma var Topic is solved
Bom dia Juanmuscaria.
Não é possível fazer isso diretamente, mas há várias maneiras de conseguir um resultado semelhante, com variados níveis de sucesso e trabalho. Você pode, por exemplo:
Se você observar o código, verá que o script acima cria um pipe nomeado com os comandos escritos e executa-o usando o executável do AutoHotkey. É uma estratégia interessante.
Outro ponto interessante: veja a sintaxe de expressão literal que utilizei para escrever as linhas na variável Var. Costumo usar essa sintaxe sempre que preciso escrever várias linhas literais, pois ela permite escrever com enter ao invés de `n (portanto, organiza melhor).
Não é possível fazer isso diretamente, mas há várias maneiras de conseguir um resultado semelhante, com variados níveis de sucesso e trabalho. Você pode, por exemplo:
- 1. Escrever um script secundário de AutoHotkey (usando FileAppend) com o código escrito na variável, e depois simplesmente executá-lo (Run).
- 2. Outra possibilidade é usar o AutoHotkey.dll (AutoHotkey_H). Assim, você faria um DllCall() de dentro do script e passaria o código a ser executado.
- 3. Uma terceira hipótese é criar um script interpretador, procurando os nomes dos comandos e executando os comandos relativos. Este último caso daria muito trabalho se você precisar que o script interno execute todo e qualquer comando possível, mas é relativamente simples de fazer se são poucos os comandos que devem ser repassados dessa forma.
- 4. Tem uma função antiga escrita pelo HotkeyIt chamado DynaRun(). Ao longo dos anos ela se tornou um comando da versão 2 do AutoHotkey_H, mas a função antiga ainda existe. Testei o código abaixo e tive resultados bons (o único efeito colateral foi a perda dos acentos). Executou quatro linhas de código e dois comandos diferentes escritos dentro da variável var:
Code: Select all
#Persistent
Var =
(
msgbox Essa mensagem será exibida dentro do msgbox
inputbox, var, escreva algo, escreva abaixo e será enviado à uma msgbox
msgbox `%var`%
msgbox fim do script
)
DynaRun(Var)
Return
DynaRun(TempScript, pipename="")
{
static _:="uint",@:="Ptr"
If pipename =
name := "AHK" A_TickCount
Else
name := pipename
__PIPE_GA_ := DllCall("CreateNamedPipe","str","\\.\pipe\" name,_,2,_,0,_,255,_,0,_,0,@,0,@,0)
__PIPE_ := DllCall("CreateNamedPipe","str","\\.\pipe\" name,_,2,_,0,_,255,_,0,_,0,@,0,@,0)
if (__PIPE_=-1 or __PIPE_GA_=-1)
Return 0
Run, %A_AhkPath% "\\.\pipe\%name%",,UseErrorLevel HIDE, PID
If ErrorLevel
MsgBox, 262144, ERROR,% "Could not open file:`n" __AHK_EXE_ """\\.\pipe\" name """"
DllCall("ConnectNamedPipe",@,__PIPE_GA_,@,0)
DllCall("CloseHandle",@,__PIPE_GA_)
DllCall("ConnectNamedPipe",@,__PIPE_,@,0)
script := (A_IsUnicode ? chr(0xfeff) : (chr(239) . chr(187) . chr(191))) TempScript
if !DllCall("WriteFile",@,__PIPE_,"str",script,_,(StrLen(script)+1)*(A_IsUnicode ? 2 : 1),_ "*",0,@,0)
Return A_LastError,DllCall("CloseHandle",@,__PIPE_)
DllCall("CloseHandle",@,__PIPE_)
Return PID
}
Outro ponto interessante: veja a sintaxe de expressão literal que utilizei para escrever as linhas na variável Var. Costumo usar essa sintaxe sempre que preciso escrever várias linhas literais, pois ela permite escrever com enter ao invés de `n (portanto, organiza melhor).
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 61 guests