AutoIT in VB.NET übersetzen

  • 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.

  • 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:

    Code
    1. $base = 0xAA0E44
    2. $name = 0xA9FB98
    3. $logged = $name-0x2D14
    4. Do
    5. enter($hwnd)
    6. Sleep(1000)
    7. Until memread($mid, $logged) = 1


    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 -.-:

  • 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:


    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 :D
    Klappt perfekt, muss mich also nochmal bei dir bedanken :thumbsup:
    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.