puxar o valor da variavel; Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

theon
Posts: 124
Joined: 23 Jun 2019, 15:39

puxar o valor da variavel;

Post by theon » 23 Jan 2022, 15:18

Ola a todos, Estou tentando puxar um valor de uma variável para dentro de outra e nao estou conseguindo.
segue o codigo


Code: Select all

chatid := "" ; replace XXXXXXX with your chat_id
text := "O valor na variavel chamada Var %life% "

param := "chat_id=" chatid "&text=" text


str =https://api.telegram.org/bot/sendmessage? ; replace XXXXXXX with your API token

;msgbox, % url_tovar(str, param) ; this is useful if you need to return data




#include <classMemory>
#SingleInstance,Force
#NoEnv

if (_ClassMemory.__Class != "_ClassMemory")
{
    msgbox class memory not correctly installed. 
    ExitApp
}



mem := new _ClassMemory("ahk_exe ldvboxheadless.exe", "", hProcessCopy)

if !IsObject(mem)
{
    if (hProcess = "")
        msgbox OpenProcess failed. If the target process has admin rights, then the script also needs to be ran as admin. Consult A_LastError for more information.
    else msgbox The program isn't running (not found) or you passed an incorrect program identifier parameter.
    ExitApp
}
SetFormat, float, 0.0 

addressmana:= 0x664F7CD8

settimer, menu, on
menu:
SetFormat, float, 0.0
life:= mem.read(addressmana - 0x18,"Int" )
url_tovar(str, param)
return


url_tovar(URL, param) { 
    WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    WebRequest.Open("POST", URL)
	WebRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    WebRequest.Send(param)
    res := WebRequest.ResponseText
    return res
}
return
ja tentei assim mais nao vai.

Code: Select all

text := "O valor na variavel chamada Var life" . life
quando eu bot pra o bot print da life ele nao da. :facepalm:

garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: puxar o valor da variavel;

Post by garry » 24 Jan 2022, 02:36

msgbox for test ( ? )

Code: Select all

life   := "Life_789"
chatid := "123456"
text   := "O valor na variavel chamada Var " .  life
param  := "chat_id=" . chatid . "&text=" . text
msgbox, 262208,TEST,"%param%"                           ;- for test

User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: puxar o valor da variavel;  Topic is solved

Post by Gio » 24 Jan 2022, 08:08

Bom dia Theon.

A variável life aparenta estar sendo usada no seu código ANTES de ser populada. Perceba que a linha que insere valor nesta variável é a linha 42, porém você está querendo dereferenciar ela (usar o valor) já na linha 2.

Fiquei com a impressão de que você simplesmente escreveu o código que queria executar acima de um outro script, porém não percebeu que o código escrito precisa que o código abaixo processe primeiro. O correto seria escrever o código observando a ordem de execução do script.

Os scripts seguem uma ordem de execução na qual a primeira linha do script será sempre a primeira linha a ser executada. Depois, se esta não contiver um "pulo" para algum outro lugar e nem for uma linha de parada, o script passará a executar a segunda linha. Logo, ao tentar popular a variável text na segunda linha do script, nada do que estiver abaixo dela terá executado ainda.

Vejo que a linha 42 (onde a variável life recebe seu valor) se encontra dentro da label menu, que por sua vez está condicionada a um SetTimer na linha 39. Quando se condiciona uma label a um SetTimer, ela para de executar conforme as linhas e passa a executar conforme um temporizador. OCORRE que esse condicionamento não será feito até que a linha 39 seja executada (pois é ela quem cria o temporizador da label menu).

:arrow: Minha sugestão é que você tente recortar todo o código anterior à linhha #include <classMemory> (linhas 1 a 9) e cole ele entre as linhas 43 e 44 (ou seja, após a linha url_tovar(str, param) e antes da linha return. Depois disso teste o script e veja se funcionou. Também é preciso fazer uma ressalva: o código executa um temporizador em loop, ou seja, pode estar funcionando como uma espécie de "espera" de outro programa. Se for este o caso, você deve condicionar seu código à variável ter de fato recebido dados. Isso pode ser feito com um [url=https://www.autohotkey.com/docs/commands/IfExpression.htm]If[/if] dentro da label menu. Também vale a pena verificar se o código escrito deve de fato executar toda vez que a label menu execute. Se não for este o caso, você deve criar o gatilho que faça com que o código execute APÓS a label menu ter feito seu trabalho (um exemplo seria condicionar uma chamada a uma segunda label que terá o código, e a condição será conforme você deseja que o código rode [por exemplo, uma vez apenas ou etc]).

theon
Posts: 124
Joined: 23 Jun 2019, 15:39

Re: puxar o valor da variavel;

Post by theon » 24 Jan 2022, 18:05

Gio wrote:
24 Jan 2022, 08:08
Bom dia Theon.

A variável life aparenta estar sendo usada no seu código ANTES de ser populada. Perceba que a linha que insere valor nesta variável é a linha 42, porém você está querendo dereferenciar ela (usar o valor) já na linha 2.

Fiquei com a impressão de que você simplesmente escreveu o código que queria executar acima de um outro script, porém não percebeu que o código escrito precisa que o código abaixo processe primeiro. O correto seria escrever o código observando a ordem de execução do script.

Os scripts seguem uma ordem de execução na qual a primeira linha do script será sempre a primeira linha a ser executada. Depois, se esta não contiver um "pulo" para algum outro lugar e nem for uma linha de parada, o script passará a executar a segunda linha. Logo, ao tentar popular a variável text na segunda linha do script, nada do que estiver abaixo dela terá executado ainda.

Vejo que a linha 42 (onde a variável life recebe seu valor) se encontra dentro da label menu, que por sua vez está condicionada a um SetTimer na linha 39. Quando se condiciona uma label a um SetTimer, ela para de executar conforme as linhas e passa a executar conforme um temporizador. OCORRE que esse condicionamento não será feito até que a linha 39 seja executada (pois é ela quem cria o temporizador da label menu).

:arrow: Minha sugestão é que você tente recortar todo o código anterior à linhha #include <classMemory> (linhas 1 a 9) e cole ele entre as linhas 43 e 44 (ou seja, após a linha url_tovar(str, param) e antes da linha return. Depois disso teste o script e veja se funcionou. Também é preciso fazer uma ressalva: o código executa um temporizador em loop, ou seja, pode estar funcionando como uma espécie de "espera" de outro programa. Se for este o caso, você deve condicionar seu código à variável ter de fato recebido dados. Isso pode ser feito com um [url=https://www.autohotkey.com/docs/commands/IfExpression.htm]If[/if] dentro da label menu. Também vale a pena verificar se o código escrito deve de fato executar toda vez que a label menu execute. Se não for este o caso, você deve criar o gatilho que faça com que o código execute APÓS a label menu ter feito seu trabalho (um exemplo seria condicionar uma chamada a uma segunda label que terá o código, e a condição será conforme você deseja que o código rode [por exemplo, uma vez apenas ou etc]).

Code: Select all




#include <classMemory>
#SingleInstance,Force
#NoEnv

if (_ClassMemory.__Class != "_ClassMemory")
{
    msgbox class memory not correctly installed. 
    ExitApp
}



mem := new _ClassMemory("ahk_exe ldvboxheadless.exe", "", hProcessCopy)

if !IsObject(mem)
{
    if (hProcess = "")
        msgbox OpenProcess failed. If the target process has admin rights, then the script also needs to be ran as admin. Consult A_LastError for more information.
    else msgbox The program isn't running (not found) or you passed an incorrect program identifier parameter.
    ExitApp
}
SetFormat, float, 0.0 

addressmana:= 0x5DE5F0D8

settimer, menu, on
menu:
chatid := "xxxxxxxxx" ; replace XXXXXXX with your chat_id
text := "O valor na variavel chamada Var " . life

param := "chat_id=" chatid "&text=" text

str =https://api.telegram.org/xxxxx:AAFC-xxxxxxxx/sendmessage? ; replace XXXXXXX with your API token

SetFormat, float, 0.0
life:= mem.read(addressmana - 0x18,"Int" )
url_tovar(str, param)
return


url_tovar(URL, param) { 
    WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    WebRequest.Open("POST", URL)
	WebRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    WebRequest.Send(param)
    res := WebRequest.ResponseText
    return res
}
return
Funcionou desculpa realmente devia ter seguido a logica.

Post Reply

Return to “Ajuda e Suporte Geral”