Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 05:25

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Tratsch rund um Autoit / Autoit Talk | kleinere Fragen

Discussion on Tratsch rund um Autoit / Autoit Talk | kleinere Fragen within the AutoIt forum part of the Coders Den category.

Reply
 
Old 12/06/2013, 23:20   #1771
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by alpines View Post
Geschwindigkeitsunterschied wolltest du doch heute posten.
wenn du von geschwindigkeitsunterschieden nach codelänge sprichst, kann jeder das selbst für sich testen...

bsp:
Code:
$t = TimerInit()
For $i=1 To 1000000
	a()
Next
ConsoleWrite(TimerDiff($t)&@CRLF)
$t=TimerInit()
For $i=1 To 1000000
	aaaaaaaaaaaaaaaaaaaa()
Next
ConsoleWrite(TimerDiff($t)&@CRLF)

Func a()
	Return 0
EndFunc
Func aaaaaaaaaaaaaaaaaaaa()
	Return 0
EndFunc
autoit basiert auf einem einfachen runtime interpreter, welcher zur laufzeit jeden einzelnen befehl einliest und ausführt... daraus folgt, das jedes unnötige zeichen in variablen oder funktionen das script verlangsamt...

daraus folgt im übrigen auch, das es absoluter nonsense ist, code durch einen obfuscator sinnlos aufzublähen.

wer vernünftige, effiziente programme schreibt (was in der autoit sektion leider schon selten ist), sollte sich auch damit abfinden, das andere nachvollziehen können was das programm macht.

wer mit der programmierung versucht geld zu verdienen, nutzt keine scriptsprachen (zumindest nicht ausschließlich).
lolkop is offline  
Old 12/06/2013, 23:32   #1772
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Du verstehst es nicht, ich wollte sehen ob der Obfuscator von FlutterShy den Code stark verlangsamt oder nicht. Was bringt einem gutes Obfuscating wenn das Script danach einfach zu langsam ist?
alpines is offline  
Old 12/07/2013, 10:42   #1773
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by alpines View Post
Du verstehst es nicht, ich wollte sehen ob der Obfuscator von FlutterShy den Code stark verlangsamt oder nicht. Was bringt einem gutes Obfuscating wenn das Script danach einfach zu langsam ist?
und du verstehst nicht, das jeder obfuscator das script verlangsamt, wie ich gerade versucht habe zu erklären...

das ist der einzige sinn von obfuscators. der code soll durch sinnlose aktionen den leser verwirren und macht dadurch am ende das script langsamer...

viel interessannter wäre mal ein optimierer, welcher sinnlosen code erkennt und durch sinnvollen ersetzt. hierbei ist wie gesagt insbesondere die länge des codes zu beachten...

so sollten sinnlose zeilen wie
Code:
$x = $x+$y
oder
$x = $y+$x
immer ersetzt werden durch
Code:
$x+=$y
genau wie alle variablen und funktionsnamen möglichst von der länge her minimiert werden sollten...

auch sollten sinnlose funktionen wie AutoItSetOption, welche im inneren nur auf andere funktionen (hier zb Opt), automatisch auf die entsprechende innere funktion abgewandelt werden...

schwer wird es erst sobald "richtig dummer code" ins spiel kommt...
bsp:
Code:
$y=$x+$z
$y+=1
sollte ja zb eigentlich immer durch $y=$x+$z+1 ersetzt werden. mit derartigen problemen können aber selbst die besten code optimierer von herstellern wie microsoft etc mehr schlecht als recht umgehen...

leider hilft am ende nichts, wenn der ersteller des codes sich unnötig dumm anstellt...
lolkop is offline  
Old 12/07/2013, 13:05   #1774
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Natürlih hab ich das verstanden, ich wollte nur sehen wie stark der Code verlangsamt wir durch FlutterShys Obfuscator.
alpines is offline  
Old 12/11/2013, 17:55   #1775
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
moin,
hatte vorhin bei meinem bot, bei dem 2 pc's über tcp kommunizieren das problem, dass irgendwann nichts mehr übertragen wurde.
zur sicherheit ein signal die ganze zeit senden (auf das der client auch antwortet) und sobald nichts mehr kommt, eine neue verbindung beim server anfragen?
butter123 is offline  
Old 12/11/2013, 18:15   #1776
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by butter123 View Post
moin,
hatte vorhin bei meinem bot, bei dem 2 pc's über tcp kommunizieren das problem, dass irgendwann nichts mehr übertragen wurde.
zur sicherheit ein signal die ganze zeit senden (auf das der client auch antwortet) und sobald nichts mehr kommt, eine neue verbindung beim server anfragen?
am besten du überwachst ständig wsa fehler bei deiner übertragung (@error wird von tcprecv automatisch auf den aktuellen fehlerwert gesetzt)... abgesehen davon ist ein ping natürlich ebenfalls möglich (wenn auch deutlich ungenauer)

Edit:
musteraufbau für server:
Code:
; build an array to save potential clients
Global $clientArray[1]=[0]

;start tcp services and open a listening socket
TCPStartup()
$listenSocket = TCPListen(@IPAddress1, 1337)

;try to keep the main loop as simple as possible
While 1
	; Check for connecting Clients
	AddClient(TCPAccept($listenSocket))
	; receive incoming messages from connected clients
	For $i=1 To $clientArray[0]
		$rcv = TCPRecv($clientArray[$i], 1024)
		If WSAErrorHandling($i) Then ExitLoop ; if any error occured, reset the loop for security reasons
		MessageHandling($i, $rcv)
	Next
WEnd

Func MessageHandling($socketID, $message)
	If $message='' Then Return 0 ; in case of no message directly return 0
	; do whatever you want with your messages right here:
	ConsoleWrite($clientArray[$socketID]&': '&$rcv&@CRLF)
	Return 1
EndFunc

Func WSAErrorHandling($socketID, $error=@error)
	Switch $error
		Case 0 ; no error
		Case 10038 ; invalid socket
			ConsoleWrite($clientArray[$socketID]&' is an invalid socket!'&@CRLF)
			RemoveClient($socketID)
		Case 10054 ; connection reset by peer
			ConsoleWrite($clientArray[$socketID]&' resetted the connection!'&@CRLF)
			RemoveClient($socketID)
		Case Else ; unhandled error
			ConsoleWrite('unhandled error occured: '&$error&@CRLF)
	EndSwitch
	Return $error
EndFunc

Func AddClient($socket)
	; if there's a new client, add it to the end of the array
	If $socket>0 Then
		$clientArray[0]+=1
		ReDim $clientArray[$clientArray[0]+1]
		$clientArray[$clientArray[0]]=$socket
		ConsoleWrite('new connection @ socket: '&$socket&@CRLF)
	EndIf
EndFunc

Func RemoveClient($socketID)
	; remove the current id and decrement all other ids
	$clientArray[0]-=1
	For $i=$socketID To $clientArray[0]
		$clientArray[$i]=$clientArray[$i+1]
	Next
	ReDim $clientArray[$clientArray[0]+1]
EndFunc
lolkop is offline  
Thanks
1 User
Old 12/11/2013, 19:05   #1777
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Man sollte es sich abgewöhnen innerhalb von Funktionen auf andere Variablen (außerhalb) den Funktionen zuzugreifen, sowas macht man höchstens in UDFs.
Stattdessen würde ich einfach das Array übergeben + ID oder einfach nur den Socket statt den Array-Index.
Und um einen Array-Index zu löschen würde ich lieber die _ArrayDelete Funktion nutzen.
alpines is offline  
Old 12/11/2013, 19:22   #1778
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by alpines View Post
Man sollte es sich abgewöhnen innerhalb von Funktionen auf andere Variablen (außerhalb) den Funktionen zuzugreifen, sowas macht man höchstens in UDFs.
Stattdessen würde ich einfach das Array übergeben + ID oder einfach nur den Socket statt den Array-Index.
Und um einen Array-Index zu löschen würde ich lieber die _ArrayDelete Funktion nutzen.
ich bin kein freund der array udf funktionen...
mit arrays geht man am effizientesten um, wenn der index 0 die anzahl der elemente des arrays enthält. das sorgt dafür, das man keinerlei aussenstehende funktionen benötigt, um beispielsweise elemente zu entfernen oder hinzuzufügen...
schaut man sich die funktion der array.au3 udf an, sieht man wie extrem unperformant das ganze gehalten ist.

weniger funktionsaufrufe -> bessere performance
(spätestens ab mehrdimensionalen arrays, ist die udf ohnehin unbrauchbar)

abgesehen davon scheinst du nicht so ganz den sinn globaler variablen zu verstehen? ein array, welches defakto von wirklich jeder funktion benötigt wird, würdest du also wirklich jeder funktion übergeben und nach dem ablauf neu erstellen lassen um es als rückgabe zu nutzen?

ich bin immer offen für konstruktive kritik... derart unangemessene kommentare hingegen sind wenig hilfreich...
lolkop is offline  
Old 12/11/2013, 19:27   #1779
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Ich würde im Index 0 nicht die Anzahl der Arrayelemente einspeichern, sofern man andere Funktionen auf die Arrays anwenden möchte,
weil man dann immer + 1 rechnen muss und Funktionen (sicherlich nicht alle aber viele) nicht erkennen das im Index 0 die Anzahl enthalten ist.
Wenn man die Anzahl der Elemente haben will dann macht man das eigentlich mit
(für For-Schleifen zumindest) UBound() - 1

Und ja ich sehe das man -1 verwenden muss, aber trotzdem sollte man meiner Meinung nach zumindest UBound verwenden, sonst kann man die Funktion ja auch gleich weglassen und alle darauf programmieren im 1. Eintrag die Größe zu returnen.

Des Weiteren hast du kaum einen Performanceverlust, und wenn dann ist der so klein das er nicht entscheidend ist.
Statt AutoIt würde ich lieber C# verwenden da es performanter ist (wenn du es perfomant haben willst) und dort das Threading benutzen, was nebenbei noch Clienten akzeptieren lässt.
alpines is offline  
Old 12/11/2013, 19:43   #1780
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by alpines View Post
Und ja ich sehe das man -1 verwenden muss, aber trotzdem sollte man meiner Meinung nach zumindest UBound verwenden, sonst kann man die Funktion ja auch gleich weglassen und alle darauf programmieren im 1. Eintrag die Größe zu returnen.
genau darauf basiert mein script doch eben <.<

wichtig ist hier aber nicht der verzicht auf die dekrementieriung (hoffentlich nicht sogar subtraktion) sondern der verzicht auf die unnötige ubound funktion.

wie dem auch sei, jeder hat seinen programmier stil... ich bevorzuge es auf jede unnötige funktion zu verzichten (zu denen ubound zweifelsohne gehört) und versuche alle möglichen performance einbußen zu vermeiden.


das problem an den durch autoit von haus aus gestellten funktionen ist, das sie auf die breite masse der anwendungen ausgelegt ist. zudem sind die udfs meist von programmierern anderer sprachen verfasst. hierdurch gehen oftmals die eigentlichen vorteile von autoit verloren.

in typensicheren sprachen wie c#, java, c++, c, ... ist es selbstverständlich nicht möglich jedes array mit zugehöriger größe im ersten index zu speichern. es wäre jedoch schade diesen durch autoit gegebenen vorteil nicht zu nutzen.
lolkop is offline  
Old 12/11/2013, 21:51   #1781
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
danke schonmal,

würde es beim clienten reichen, tcprecv auf fehler zu überprüfen? oder gibt es auch fehler, bei den tcprecv nicht anschlägt, aber trotzdem keine daten mehr empfangen werden?
der server ist bei mir nicht so das problem, ich muss eher dem clienten sagen: oh es gab einen fehler, verbinde dich neu!
da der server nur eine verbingung haben soll, könnte ich dann einfach die alte überschreiben, falls eine neue angefragt wird.
butter123 is offline  
Old 12/12/2013, 17:42   #1782
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by butter123 View Post
danke schonmal,

würde es beim clienten reichen, tcprecv auf fehler zu überprüfen? oder gibt es auch fehler, bei den tcprecv nicht anschlägt, aber trotzdem keine daten mehr empfangen werden?
der server ist bei mir nicht so das problem, ich muss eher dem clienten sagen: oh es gab einen fehler, verbinde dich neu!
da der server nur eine verbingung haben soll, könnte ich dann einfach die alte überschreiben, falls eine neue angefragt wird.
spätestens beim tcpsend auf einer abgebrochenen verbindung wirst du einen wsa-fehler bekommen.
lolkop is offline  
Thanks
1 User
Old 12/14/2013, 13:00   #1783
 
elite*gold: 0
Join Date: Jan 2008
Posts: 456
Received Thanks: 97
heyho, hoffe mir kann hier jemand helfen das Scipt zu vervollständigen?
so läuft er, erkennt farbe und rennt hin, es müsste aber noch etwas dazu..

-nachdem er den linksklick gemacht hat soll er 5 sec warten
-sobald er die Pixelfarbe 0xFDC13A gesehen hat soll er die 1 drücken.
-danach 8 sec warten
-nochmal die 1 drücken
-danach warten bis er 0xFCD063 wieder erkennt und von vorne anfang.


While 1

$Farbe = PixelSearch(0,0,@DesktopWidth,@DesktopHeight,0xFCF FEB) ;0xFCD063

If IsArray($Farbe) Then
MouseClick("left",$Farbe[0],$Farbe[1],1,1)

Sleep(250)

ExitLoop
EndIf

WEnd


un bitte noch n hotkey zum beenden setzten wenn das nicht soviel arbeit macht
GMT_Andy is offline  
Old 12/14/2013, 13:18   #1784
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
5 Sekunden warten
Code:
Sleep(5000) ;5 * 1000ms
Taste 1 senden
Code:
Send(1)
oder mit
Code:
ControlSend() ;Parameter nicht vergessen!
Das wirst du doch sicherlich alleine schaffen.
Hotkey
Code:
HotKeySet("{F1}", "StopBot")

Func StopBot()
	Exit
EndFunc
alpines is offline  
Thanks
1 User
Old 12/14/2013, 13:36   #1785
 
elite*gold: 0
Join Date: Jan 2008
Posts: 456
Received Thanks: 97
Quote:
Originally Posted by alpines View Post
5 Sekunden warten
Code:
Sleep(5000) ;5 * 1000ms
Taste 1 senden
Code:
Send(1)
oder mit
Code:
ControlSend() ;Parameter nicht vergessen!
Das wirst du doch sicherlich alleine schaffen.
Hotkey
Code:
HotKeySet("{F1}", "StopBot")

Func StopBot()
	Exit
EndFunc
ok danke dir
un wie schreibe ich das, wenn der bot warten soll bis er eine farbe erkannt hat un dann erst die 1 drückt?
GMT_Andy is offline  
Reply


Similar Threads Similar Threads
[Sammelthread]Fragen zu Autoit wie man Hacks herstellt(Autoit) + Antworten
11/16/2011 - Metin2 - 0 Replies
Hallo Liebe Community, Ich habe diesen Thread aufgemacht weil manche leute mit Autoit nicht mehr weiterkommen wie man Hack herstellt ,ich habe mit schon ein Multihack mit Autoit herstellt das war einfach .Da viele User nicht weiterkommen werden habe ich mich entschieden ein Thread aufzumachen mit Fragen und ich den dann Antworten kann und helfen kann! ------------------------------------------------- --------------------------- Mein Multihack:...



All times are GMT +1. The time now is 05:26.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.