Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Button suchen & Wert verändern


  • Please log in to reply
12 replies to this topic
ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013

Hey,

da ich in anderen Foren keine passenden Antworten bekam, dachte ich mir, dass ich mich mal an euch wende. Ich habe 2 Problem (brauche Hilfe):

 

1.

 

Hey,
ich suche eine Möglichkeit einen Button anzuklicken. Dazu müssten im Titel genannte Möglichkeiten funktionieren. Kann mir jemand erklären, wie man einen Text sucht und diesen dann anklickt, oder das mit PixelSaerch?
Habs schon versucht, aber hat immer woanders hin geklickt. Zu dem Text weiß ich die Funktion leider nicht.
MfG

2.

 

Hey,

ich kenne mich recht gut mit Cheat Engine aus. Nun möchte ich einen Trainer mit AHK für ein offline Spiel basteln.

Im Beispiel soll der Wert des Geldes geändert werden. Ich habe am Anfang 1000. Dann bekomme ich den einzigen richtigen Wert mit Cheat Engine raus und verändere ihn auf 100.000. Schön und gut, aber kann mir jemand sagen, wie ich das in AHK einbauen kann? Also z.B. F2 = Wert auf 100.000 setzen.

 

Freue mich auf eure Antworten :) MfG



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Du bist zwar in der Falschen Rubrik aber was solls.

 

@ Frage 2

Die passende Lib findest du hier


Visit the new forum ahkscript.org.

http://ahkscript.org


ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013

Verstehe ich nicht. Kann mir viellecith jemand einen Codeschnipsel geben und mir sagen, wie ich die ID (für AHK benötigt) aus Cheat Engine herausbekomme?



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

In Cheat engine selber steht die Tahl dort schon z.B. AFE04D01 dies ist der Wert den du für AHK brauchst.

nun musst du in AHK ein 0x vorsetzten damit es erkannt wird.

z.B.

ReadMemory(MADDRESS,PROGRAM)
{
winget, pid, PID, %PROGRAM%

VarSetCapacity(MVALUE,4,0)
ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", pid, "UInt")
DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str",MVALUE,"UInt",4,"UInt *",0)

Loop 4
result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)

return, result  
}

WriteMemory(WVALUE,MADDRESS,PROGRAM)
{
winget, pid, PID, %PROGRAM%

ProcessHandle := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", PID, "UInt")
DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Uint*", WVALUE, "Uint", 4, "Uint *", 0)

DllCall("CloseHandle", "int", ProcessHandle)
return
}

Run calc.exe
winwait, Calc
StartTime := A_TickCount

loop 1000
value:=ReadMemory(0x41000C,"Calc")  ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!!

ElapsedTime := A_TickCount - StartTime
msgbox, Memory address 0x41000C = %value%`nTake %ElapsedTime% ms to loop 1000 times

Als Programmnamen überibst du den Fensternamen des Programms.

Visit the new forum ahkscript.org.

http://ahkscript.org


ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013
    ReadMemory(MADDRESS,PROGRAM)
    {
    winget, pid, PID, %PROGRAM%
     
    VarSetCapacity(MVALUE,4,0)
    ProcessHandle := DllCall("OpenProcess", "Int", 24, "Char", 0, "UInt", pid, "UInt")
    DllCall("ReadProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str",MVALUE,"UInt",4,"UInt *",0)
     
    Loop 4
    result += *(&MVALUE + A_Index-1) << 8*(A_Index-1)
     
    return, result
    }
     
    WriteMemory(WVALUE,MADDRESS,PROGRAM)
    {
    winget, pid, PID, %PROGRAM%
     
    ProcessHandle := DllCall("OpenProcess", "int", 0EC9BF64, "char", 0, "UInt", PID, "UInt")
    DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Uint*", WVALUE, "Uint", 4, "Uint *", 0)
     
    DllCall("CloseHandle", "int", ProcessHandle)
    return
    }
     
    Run calc.exe
    winwait, Calc
    StartTime := A_TickCount
     
    loop 1000
    value:=ReadMemory(0x0EC9BF64,"Calc") ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!!
     
    ElapsedTime := A_TickCount - StartTime
    msgbox, Memory address 0x0EC9BF64 = %value%`nTake %ElapsedTime% ms to loop 1000 times

 

Habe das jetzt so.

Wie kann ich jetzt den Wert verändern? Sorry habe bisher nur einfache Keybinder mit abläufen etc gemacht.



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
    WriteMemory(WVALUE,MADDRESS,PROGRAM)   ;das ganze hier in Klammern bleibt gleich
    {
    winget, pid, PID, %PROGRAM%
    ProcessHandle := DllCall("OpenProcess", "int", 24, "char", 0, "UInt", PID, "UInt") ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!! 24 statt veränderter Wert
    if Wvalue is Integer
    DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Uint*", WVALUE, "Uint", 4, "Uint *", 0)
    Else
DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str*",WVALUE,"Uint",strlen(WVAlue),"Uint *",0)
    DllCall("CloseHandle", "int", ProcessHandle)
    return
    }

loop 1000
    WriteMemory("Hello World!",0x0EC9BF64,"Bitte durch Fenstertitel ersetzten!");<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!!

Visit the new forum ahkscript.org.

http://ahkscript.org


ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013
    WriteMemory(WVALUE,MADDRESS,PROGRAM) ;das ganze hier in Klammern bleibt gleich
    {
        winget, pid, PID, %PROGRAM%
        ProcessHandle := DllCall("OpenProcess", "int", 999, "char", 0, "UInt", PID, "UInt") ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!! 24 statt veränderter Wert
        if Wvalue is Integer
        DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Uint*", WVALUE, "Uint", 4, "Uint *", 0)
        Else
        StringPut(WVALUE,WSTRING),DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str",WVALUE,"Uint",4,"Uint *",0)
        DllCall("CloseHandle", "int", ProcessHandle)
        return
    }
    
    
    Stringput(STR,ByRef Var2)
    {
        VarSetCapacity(Var2,Strlen(STR))
        Loop ,Parse, STR
        NumPut(Asc(A_LoopField),var2,A_Index-1,"UChar")
    }
    loop 1000
    WriteMemory("Test",0x0EC9BF64,"XXXX") ;<<<<<<< XXX hab ich durch den Namen ersetzt

 

So geht das immer noch nicht. Was mache ich falsch?

bzw. Wenn man jetzt vor das hier alles ein F1:: setzt, kann es doch damit gestartet werden, oder?



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Sorry habs schon verändert.

BTW:

999 ist bei Coputern keine besondere Zahl da sie anders rechnen.

 

  1. WriteMemory(WVALUE,MADDRESS,PROGRAM) ;das ganze hier in Klammern bleibt gleich
  2. {
  3. winget, pid, PID, %PROGRAM%
  4. ProcessHandle := DllCall("OpenProcess", "int", 24, "char", 0, "UInt", PID, "UInt") ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!! 24 statt veränderter Wert
  5. if Wvalue is Integer
  6. DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Uint*", WVALUE, "Uint", 4, "Uint *", 0)
  7. Else
  8. DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str*",WVALUE,"Uint",strlen(WVAlue),"Uint *",0)
  9. DllCall("CloseHandle", "int", ProcessHandle)
  10. return
  11. }
  12.  
  13.  
  14. F1::WriteMemory("Hello World!",0x0EC9BF64,"Bitte durch Fenstertitel ersetzten!")

Visit the new forum ahkscript.org.

http://ahkscript.org


ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013
WriteMemory(WVALUE,MADDRESS,PROGRAM) ;das ganze hier in Klammern bleibt gleich
{
    winget, pid, PID, %PROGRAM%
    ProcessHandle := DllCall("OpenProcess", "int", 24, "char", 0, "UInt", PID, "UInt") ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!! 24 statt veränderter Wert
    if Wvalue is Integer
    DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS, "Uint*", WVALUE, "Uint", 4, "Uint *", 0)
    Else
    DllCall("WriteProcessMemory","UInt",ProcessHandle,"UInt",MADDRESS,"Str*",WVALUE,"Uint",strlen(WVAlue),"Uint *",0)
    DllCall("CloseHandle", "int", ProcessHandle)
    return
}
     
     
F3::
WriteMemory("999",0x0EC9BF64,"Programm")
return

 

So habe ich das nun. "999" ist doch der Wert, den man verändern will, oder?

Geht aber nicht...



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

das es in "" steht bedeutet das es Text ist und keine Zahl.

du musst die "" entfernen


Visit the new forum ahkscript.org.

http://ahkscript.org


ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013

geht auch ohne nicht....



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Ich würd dir ja gerne die Lib schicken die Ich benutze aber die liegt auf AHK.net (Von hacker zerstört) und der Link dazu aucj noch im Dt. Forum (ohne anmeldung kein Zugriff)

Da ich meine Lib auch schon gelösch hab kann ich sie dir auch nicht mehr hochladen.

Probiers nochmal so:

WriteMemory(WVALUE,MADDRESS,PROGRAM) ;das ganze hier in Klammern bleibt gleich
{
    winget, pid, PID, %PROGRAM%
    ProcessHandle := DllCall("OpenProcess", "int", 2035711, "char", 0, "UInt", PID, "UInt") ;<<<<<<< Important!!!!!!!!!!!!!!!!!!!!!!!! 2035711 statt veränderter Wert
    DllCall("WriteProcessMemory", "UInt", ProcessHandle, "UInt", MADDRESS,"Uint*", WVALUE, "Uint", 4, "Uint *", 0)
    DllCall("CloseHandle", "int", ProcessHandle)
    return
}
......Hier den unteren Teil anfügen.

Visit the new forum ahkscript.org.

http://ahkscript.org


ElDiabolo
  • Members
  • 7 posts
  • Last active: Feb 15 2013 01:08 PM
  • Joined: 23 Jan 2013

Geht leider ebenfalls nicht -.-

 

Hast du vielleicht Skype? Wenn ja schick mir mal bitte deinen Namen per PN.