AutoIT in VB.NET übersetzen

01/16/2011 19:55 Kraizy​#1
Hi,
ich hab hier noch den Loader von lolkop (wurde in AutoIT geschrieben) für private Silkroad Server und ich wollte den mal in VB.NET nachbauen, jedoch komme ich an einer Stelle nicht weiter:
Code:
If memread($mid, 0x633D00, 'byte[2]') = '0x7547' Then
     'irgendwas machen, z.B. eine MsgBox anzeigen
EndIf

'Hier noch die memread Funktion:
Func memread($mid, $adress, $type = 'dword')
	Local $struct = DllStructCreate($type)
	DllCall($kernel32, 'int', 'ReadProcessMemory', 'int', $mid, 'int', $adress, 'ptr', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', '')
	Return DllStructGetData($struct, 1)
EndFunc   ;==>memread
Wenn ich nun Silkroad über das Tool starte, dann wird sofort die MsgBox angezeigt (und auch "Please execute Silkroad.exe", weil ich die MsgBox durch was anderes ersetzt habe (memwrite), aber das ist gerade egal).
Nun habe ich es mal versucht in VB.NET nachzumachen, jedoch klappt das nicht, mein Code zurzeit:
Code:
Dim meinProzess As Process() = Process.GetProcessesByName("sro_client")
Dim Silkroad_Online As Process = meinProzess(0)
Dim mid As IntPtr = OpenProcess(&H10, False, CUInt(Silkroad_Online.Id))
Dim bytes As Byte() = New Byte(2) {}

If ReadProcessMemory(mid, &H633D00, bytes, 2, 0) = &H7547 Then
     'hier nun z.B. die MsgBox anzeigen
End If
Wenn ich es nun ausführe passiert nichts, keine MsgBox, aber auch keine Fehlermeldung..
Vielleicht kann mir ja jemand helfen, der sich mit beiden Sprachen auskennt...
01/17/2011 13:53 Endecs#2
Wieso
"= &H7547" &H steht für 0x und du readest einen Wert nicht einen Offset
2. Kannst du ein "else" reinschreiben.
Also

If ReadProcessMemory(mid, &H633D00, bytes, 2, 0) = 7547 Then
msgbox("1")
else
msgbox("2")
End If

msgbox("2") kommt dann wenn es nicht 7547 ist
01/18/2011 10:21 Kraizy​#3
Wenn "&H" für "0x" steht, dann ist doch "= &H7547" richtig, weil im AutoIT-Code wird ja auch "0x7547" und nicht "7547" benutzt...und das Else brauch ich nicht, weil er die MsgBox zu 100% anzeigen muss, so wie im AutoIT-Code..wenn er das Else ausführt, dann hab ich was falsch gemacht...
Ich bin mir halt nicht sicher ob ich die Parameter beim ReadProcessMemory richtig übergeben habe, deswegen wird die MsgBox ja auch nicht angezeigt.