Hallo Community,
wie man recht schnell erkennen wird, bin ich nicht nur hier im Forum neu. Vor etwa zwei Wochen habe ich begonnen mich mit AutoIT zu beschäftigen. Auch was alles andere in Richtung Programmierung angeht, bin ich sozusagen jungfreulich. Also bitte verzeiht mir auch offensichtliche Fehler.
Ich habe für ein Onlinegame in kleines Programm gebaut, welches mir bisher lediglich zwei Werte aus dem Speicher auslesen soll. Soweit funktioniert das auch, aber mit ein paar Punkten bin ich nicht ganz zufrieden. Nun aber erstmal den Code, das dürfte ggf. helfen.
[autoit]#include <GUIConstants.au3>
#include <MemoryMod.au3>
#include <String.au3>
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1)
Opt("GUIOnEventMode", 1)
GUICreate("Window", 200, 88)
$varName = IniRead("ZenyWatch.ini", "Address", "Name", "NotFound")
$varGeld = IniRead("ZenyWatch.ini", "Address", "Geld", "NotFound")
$pid = WinGetProcess("Ragnarok")
GUISetOnEvent($GUI_EVENT_CLOSE, "Close_Or_Quit_Clicked")
$quitButton = GUICtrlCreateButton ( "Cancel",148,60,50)
GUICtrlSetOnEvent($quitButton, "Close_Or_Quit_Clicked")
GUICtrlCreateLabel("Name: ", 5, 10)
GUICtrlCreateLabel("Zeny: ", 5, 30)
While 1
$info = _MemoryOpen($pid)
$varName_read = _MemoryRead($varName, $info)
$varGeld_read = _MemoryRead_dword($varGeld, $info)
$varGeld_format = _StringAddComma ($varGeld_read)
_MemoryClose($pid)
GUICtrlCreateLabel($varName_read, 45, 10)
GUICtrlCreateLabel($varGeld_format, 45, 30)
TraySetToolTip("Window")
GUISetState(@SW_SHOW)
Sleep(5000)
Wend
Func Close_Or_Quit_Clicked()
Exit
EndFunc
Diese MemoryMod.au3 basiert fast ausschliesslich auf dieser UDF. Ich habe nur eine weitere _MemoryRead Funktion hinzugefügt um 'dword' und 'char[]' zu unterscheiden.
Nun aber zu meinen zu lösenden Aufgaben, Probleme sagt man ja nicht weil das so negativ ist. Das erste was mir Kopfzerbrechen bereitet ist, das das Programm nach längerer Laufzeit zunehmend Prozessorlast verursacht. Vielleicht hat es auch etwas damit zu tun, wenn es minimiert ist bzw. im Hintergrund läuft. In diesem Zustand glaube ich auch, pausiert es, läuft es mir verminderter Leistung oder soetwas, aber das ist lediglich eine Vermutung. Weiter habe ich bisher keine Lösung finden können für die Tatsache, das bei jedem Durchlauf wenn die Werte neu geschrieben werden, die Anzeige flackert. Die _MemoryRead die den 'char[]' bearbeitet ist im Moment fest definiert auf 21, was natürlich nur bedingt sinnvoll ist. Ist der Wert länger wird er gekürzt und ich habe keine Idee wie ich das verbessern kann.
Nun ich denke das reicht für meinen ersten Beitrag hier im Forum und ich hoffe ihr könnt mir helfen. Wobei ihr das schon habt, ohne diese klasse Community wäre ich nie so weit gekommen. Natürlich sind auch Verbesserungsvorschläge darüber hinaus herzlich willkommen.
Danke und Mfg