kein Problem
Schau am besten immer auf pInvoke.net nach, dort findest du so ziemlich alle API's mit den verschiedenen enums usw., meistens sind auch noch die verschiedenen Überladungen der Funktion dabei.
AutoIT in VB.NET übersetzen
-
- [Sonstige]
- Fisticuff
-
-
-
Ich bin's nochmal.
Also, Silkroad starten usw. klappt nun, aber wie kann ich nun prüfen, ob man eingeloggt ist? Falls ein Code benötigt wird, hier der AutoIT-Code:
Also da ist ja eine Do Until-Schleife, die jede Sekunde Enter drückt und das so lange, bis $logged = 1. Hab natürlich schon vor dem Posten selber probiert, das ist dabei rausgekommen, klappt aber natürlich nicht -.-:Code -
Also den VB Code versteh ich mal gar nicht ?!
Du verwendest ReadProcessMemory an der falschen Stelle.
Warum liest du jeweils 24 bytes aus? ein Int32 besteht aus 4 bytes...
Du musst in Der Do... Until Schleife natürlich immer wieder logged aktualisieren.
In dem AutoIt Code werden nur die Addressen miteinander subtrahiert, nicht das was an der Stelle im Speicher steht.[cs]
uint base = 0xAA0E44;
uint name = 0xA9FB98;
uint logged = name - 0x2D14;uint result = 0;
while (result == 0)
{
int bytesRead = 0;
byte[] buffer = new byte[4];
ReadProcessMemory(myProcess, logged, buffer, 4 out bytesRead);
result = BitConverter.ToUInt32(buffer, 0);
}
[/cs]
so könnte das in etwa aussehen in c# (also der Auto-IT Code übersetzt. -
-
OK, hab mal deinen Code übersetzt:
Code- Dim SRO_Processes As Process() = Process.GetProcessesByName("sro_client")
- Dim Silkroad_Online As Process = SRO_Processes(0)
- Dim readHandle As IntPtr = OpenProcess(&H10, False, CUInt(Silkroad_Online.Id))
- Dim base As UInteger = &HAA0E44
- Dim name As UInteger = &HA9FB98
- Dim logged As UInteger = name - &H2D14
- Dim result as UInteger = 0
- While result = 0
- Dim bytesRead As Integer = 0
- Dim buffer As Byte() = New Byte(4) {}
- ReadProcessMemory(readHandle, logged, buffer, 4, bytesRead)
- result = BitConverter.ToUInt32(buffer, 0)
- End While
Mal schauen ob es klappt...dauert ewig bis man eingeloggt ist -.-
Hab es noch so gemacht, dass logged und result in einem Label angezeigt werden, bei logged ist schon eine hohe Zahl, result ist jedoch 0. Wenn ich eingeloggt bin und der Code stimmt, darf da keine 0 stehen oder? -
Ja muss dann normalerweiße ne 1 sein.
Ich würde OpenProcess allerdings immer mit PROCESS_ALL_ACCESS aufrufen. Sonst willst du nachher was reinschreiben und übersiehst dass du keine Rechte hast und dann geht die Errorsuche nochmal los -
So, endlich eingeloggt und: logged = 1
Klappt perfekt, muss mich also nochmal bei dir bedanken
Vielen Dank!^^Ich würde OpenProcess allerdings immer mit PROCESS_ALL_ACCESS aufrufen. Sonst willst du nachher was reinschreiben und übersiehst dass du keine Rechte hast und dann geht die Errorsuche nochmal los
Ja, das mache ich dann, das mit &H10 war nur ein kleines Testprojekt um Login zu prüfen. -