Befehl reagiert zu langsam

07/21/2010 21:51 PenGuin :O#16
Quote:
Originally Posted by MrSm!th View Post
Streng genommen kannst du auch mit Autoit injecten, aber die Dll müsstest du in einer anderen Sprache machen.
Und nein, gerade mit .NET geht das nicht, du kannst keine.NET Dlls in normale Prozesse injecten!

Und nein, C++ ist eine reine native Sprache, kein .NET ;)
Ich weiß, dass man mit AutoIt injecten kann, es ging ja nur um die .dll ERstellung:

Code:
Func InjectDLL($hWnd,$DllPath)
	If IsHWnd($hWnd) = 0 Then
		SetError(-1)
		Return False
	ElseIf StringLen($DllPath)<= 4 OR Stringright($DllPath, 4) <> ".dll" Then
		SetError(-2)
		Return False
	EndIf
	Local $PID,$PHandle,$PLibRemote,$ModHandle,$LoadLibRarya,$HthRead
	Local $Kernel32 = DllOpen("kernel32.dll")
	If $Kernel32 = -1 Then
		Exit
	EndIf
	$PID = DLLCall("user32.dll","int","GetWindowThreadProcessId","hwnd",$hWnd,"int*",0)
	If IsArray($PID) Then
		$PID=$PID[2]
	Else
		SetError(-3)
		Return False
	EndIf
	$PHandle = DLLCall($Kernel32,"int","OpenProcess","int",2035711,"int",0,"int",$PID)
	If IsArray($PHandle) And $PHandle[0] > 0 Then
		$PHandle = $PHandle[0]
	ELSE
		SetError(-4)
		Return False
	EndIf
	$PLibRemote = DLLCall($Kernel32,"int","VirtualAllocEx","int",$PHandle,"short",0,"int",4096,"int",4096,"int",4)
	If IsArray($PLibRemote) Then
		If $PLibRemote[0] > 0 Then
			$PLibRemote = $PLibRemote[0]
		Else
			SetError(-5)
			Return False
		EndIf
	Else
		SetError(-6)
		Return False
	EndIf
	For $i = 0 To StringLen($DllPath)
		$Ret = DLLCall("kernel32.dll","int","WriteProcessMemory","int",$PHandle,"int",$PLibRemote+$i,"int*",Asc(StringMid($DllPath,$i+1,1)),"int",1,"int",0)
			If IsArray($Ret) Then
				If $Ret[0] = 0 Then
					SetError(-7)
					Return False
				EndIf
			Else
				SetError(-8)
				Return False
			EndIf
	Next
	$ModHandle = DLLCall($Kernel32,"long","GetModuleHandle","str","kernel32.dll")
	If IsArray($ModHandle) Then
		If $ModHandle[0] > 0 Then
			$ModHandle = $ModHandle[0]
		Else
			SetError(-9)
			Return False
		EndIf
	Else
		SetError(-10)
		Return False
	EndIf
	$LoadLibRarya = DLLCall($Kernel32,"long","GetProcAddress","long",$ModHandle,"str","LoadLibraryA")
	If IsArray($LoadLibRarya) Then
		If $LoadLibRarya[0] > 0 Then
			$LoadLibRarya = $LoadLibRarya[0]
		Else
			SetError(-11)
			Return False
		EndIf
	Else
		SetError(-12)
		Return False
	EndIf
	$HthRead = DLLCall($Kernel32,"int","CreateRemoteThread","int",$PHandle,"int",0,"int",0,"long",$LoadLibRarya,"long",$PLibRemote,"int",0,"int",0)
		If IsArray($HthRead) Then
			If $HthRead[0] > 0 Then
				$HthRead = $HthRead[0]
			Else
				SetError(-13)
				Return
			EndIf
		Else
			SetError(-14)
			Return False
		EndIf
	DLLCall($Kernel32,"int","VirtualFreeEx","int",$PHandle,"int",$PLibRemote,"int",4096,"int",32768)
	DLLCall($Kernel32,"int","CloseHandle","int",$HthRead)
	DLLCall($Kernel32,"int","CloseHandle","int",$PHandle)
	DllClose($Kernel32)
	Return True
EndFunc
07/22/2010 07:22 Algaten™#17
Also kann man nun aus nem autoit sricpt ne dll machen?

wenn ja antwort posten

bei nein thread closen
07/23/2010 11:13 PenGuin :O#18
Kann man nicht.
07/23/2010 17:47 Σternαl.#19
Warum nicht?
Vom Compiler wird der AutoIt Source doch eh in ASM übersetzt.
07/23/2010 19:22 PenGuin :O#20
Was hat .dll mit ASM zutun?
Es geht einfach nicht aus einem AutoIt Source eine .dll zu machen.
07/23/2010 19:42 Σternαl.#21
Achsoo, ich dachte es ging darum, dass es nicht klappen würde, AutoIt Code zu injezieren.
Ich frag mal Alastor, wie er das hingekrigt hat, mit AutoIt ne .dll zu machen.
07/23/2010 20:03 Fuyo#22
Würde mich freuen, wenn du dann dein Wissen über die dll mit autoit mit uns teilen würdest ;)
07/23/2010 23:01 PenGuin :O#23
Es geht einfach nicht o_O
Punkt aus Ende, es geht nicht, was ist daran so schwer zu verstehen?
07/24/2010 11:21 Algaten™#24
Quote:
Originally Posted by pinguin94 View Post
Es geht einfach nicht o_O
Punkt aus Ende, es geht nicht, was ist daran so schwer zu verstehen?
Alles^^
Ok dann gehts nicht!
07/24/2010 18:07 Renozerus#25
Quote:
Originally Posted by algaten View Post
OK heir einen teil des codes wiederholt sich eigentlich immer
taste muss gedrückt sein da der bot laufen soll
Code:
Func start ()
While 1

MouseClick ("left", 650, 383)
sleep (700)
MouseClick ("left", 650, 427)
sleep (500)
MouseClick ("left", 452, 87)
sleep (20000)
Send ("{ENTER}")
Send ("4") 
Mousemove (452, 87)
Sleep (3000)

[COLOR="DarkGreen"]send("{s down}")[/COLOR]
[COLOR="Blue"]send ("{e down}")[/COLOR]
sleep (2000)
send("{s up}")
send ("{e up}")
sleep (1000)
Send ("4")
MouseClick ("left", 1000, 453)
sleep (1000)
mousemove (10, 300)
Send ("4")
MouseClick ("left", 10, 666)
Sleep (10000)

send("{s down}")
send ("{e down}")
sleep (2000)
send("{s up}")
send ("{e up}")
sleep (1000)
Send ("4")
Das Problem liegt eindeutig darin wenn Du sdown und edown zur selben Zeit ausführen willst nimmt der PC nur eine Taste an.
mach einen Selbstversuch im Word....
halte s gedrückt lasse nicht los und drücke zusätzlich noch e
Du wirst sehen das er dann nur noch e sendet.

Müssen denn die beiden Tasten gleichzeitig 2 Sekunden gedrückt werden?
07/26/2010 21:17 Algaten™#26
Quote:
Originally Posted by Renozerus View Post
Das Problem liegt eindeutig darin wenn Du sdown und edown zur selben Zeit ausführen willst nimmt der PC nur eine Taste an.
mach einen Selbstversuch im Word....
halte s gedrückt lasse nicht los und drücke zusätzlich noch e
Du wirst sehen das er dann nur noch e sendet.

Müssen denn die beiden Tasten gleichzeitig 2 Sekunden gedrückt werden?
Ja müssen sie :D
Geht nun aber irgendwie kp warum:confused: