Register for your free account! | Forgot your password?

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

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

Advertisement



Brauch Hilfe

Discussion on Brauch Hilfe within the AutoIt forum part of the Coders Den category.

Reply
 
Old 08/23/2010, 15:48   #16
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
du darfst kein sleep verwenden, da wärend dem sleep das ganze script blockiert wird.
lolkop is offline  
Old 08/23/2010, 15:49   #17
 
elite*gold: 0
Join Date: Nov 2008
Posts: 66
Received Thanks: 4
wie soln das sonst funzen ???
weißerwolf is offline  
Old 08/23/2010, 15:59   #18
 
elite*gold: 0
Join Date: Nov 2008
Posts: 66
Received Thanks: 4
und wie mache ich das ganze release also das es nur für das eine fenster fuzt und auch weiter amcht wenn das fenster minimiert ist ?
weißerwolf is offline  
Old 08/23/2010, 16:05   #19
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
nja musst halt über timer das ganze lösen.
ausserdem würde ich immer noch eine abfragen einbauen ob du gerade im gui bist. denn du willst sicher nicht das dein gui mit den keys bespammt wird.

auch die if abfragen fürs gui sind extrem ineffizient.
hier mal an deinem beispielgui wie man es richtig machen würde:

Code:
Global $on=0, $on_t1, $on_t2, $on_t3

$gui = GuiCreate("BoT",268,487,411,130)
$button1=GuiCtrlCreateButton("Start",37,26,27,11)
$button4=GuiCtrlCreateButton("StopAlles",36,392,93 ,68)
$button5=GuiCtrlCreateButton("Exit",144,393,101,68 )
$button2=GuiCtrlCreateButton("Start2",36,113,70,25 )
$button3=GuiCtrlCreateButton("Start3",36,192,74,25 )
$input1=GuiCtrlCreateInput("50",35,66,70,20)
$input2=GuiCtrlCreateInput("50",34,151,74,20)
$input3=GuiCtrlCreateInput("50",33,230,77,20)
$label1=GuiCtrlCreateLabel("Pick Up",172,29,10,15)
$label2=GuiCtrlCreateLabel("Zeit in ms (1000ms = 1sek )",118,67,145,15)
$label3=GuiCtrlCreateLabel("PottRot",155,118,64,15)
$label4=GuiCtrlCreateLabel("Zeit in ms",146,154,7,15)
$label5=GuiCtrlCreateLabel("PottBlau",150,199,7,15 )
$label6=GuiCtrlCreateLabel("zeit in ms",147,232,62,15)
GuiSetState()

While 1
	Switch GuiGetMsg()
		Case -3
			Exit
		Case $button1
			$on = 1
		Case $button2
			$on = 2
		Case $button3
			$on = 3
		Case $button4
			$on = 0
		Case $button5
			Exit
		Case Else
			Switch $on
				Case 1
					on1()
				Case 2
					on2()
				Case 3
					on3()
			EndSwitch
	EndSwitch
WEnd

Func on1()
	If TimerDiff($on_t1) > GUICtrlRead($input1) And Not WinActive($gui) Then
		Send("y")
		$on_t1 = TimerInit()
	EndIf
EndFunc

Func on2()
	If TimerDiff($on_t2) > GUICtrlRead($input2) And Not WinActive($gui) Then
		Send("{F1}")
		$on_t2 = TimerInit()
	EndIf
EndFunc

Func on3()
	If TimerDiff($on_t3) > GUICtrlRead($input3) And Not WinActive($gui) Then
		Send("{F2}")
		$on_t3 = TimerInit()
	EndIf
EndFunc
wenn du dich fragst warum if abfragen ineffizient sind, denk mal drüber nach was passiert wenn die if abfrage erfüllt wurde. in deinem code würden trotzdem noch alle anderen möglichkeiten durchlaufen werden.

man könnte es auch über elseif lösen, dann würde auch beim ersten treffer die abfrage abgebrochen werden. jedoch wird das ganze dann schnell unübersichtlich und switch ist deshalb immer zu bevorzugen.

Edit:
wenn du das ganze auf ein fenster beschränken willst, kannst du mit controlsend arbeiten, oder auf die postmessage funktion aus dem winapis zurückgreifen, wenn dir controlsend zu primitiv ist =)
lolkop is offline  
Thanks
1 User
Old 08/23/2010, 16:18   #20
 
elite*gold: 0
Join Date: Nov 2008
Posts: 66
Received Thanks: 4
oO ich bin doch auch nur ein anfänger

naja ich versuchs mal durchzusteigen
kriegst auf jeden fall thx

funzen denn die ganzen input fenster ?
weißerwolf is offline  
Old 08/23/2010, 16:44   #21
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by weißerwolf View Post
oO ich bin doch auch nur ein anfänger

naja ich versuchs mal durchzusteigen
kriegst auf jeden fall thx

funzen denn die ganzen input fenster ?
er nimmt doch für den timercheck den inhalt der input fenster.
warum sollte das ganze da nicht funktionieren? =)

solange du bei autoit eigenen funktionen bleibst (Send, ControlSend, etc) würd ich dir aber noch empfehlen die von haus aus eingebauten sleep zeiten zu entfernen. (kannst ja die nomrlane optinen durch Opt bearbeiten) also zb so:
Code:
Opt("SendKeyDelay", 0)
Opt("SendKeyDownDelay", 0)
das ganze einfach ganz oben ins script packen. wenn du das nicht tust kommt das normale delay noch zusätzlich zu deinem eingestellten und du hast nicht die reelle wartezeit die du gern hättest.
lolkop is offline  
Old 08/23/2010, 19:04   #22
 
| Moep |'s Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
Opt("SendKeyDownDelay", 0) würde ja bedeutend dass er den key 0 ms drückt... Macht also wenig Sinn.
| Moep | is offline  
Old 08/23/2010, 19:53   #23
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
nein das bedeutet nur das er keine pause vor dem keyup event macht.

quasi keydown -> keyup fertig und nicht wie voreingestellt keydown -> pause -> keyup

die pause wurde vom autoit team eingefügt um das ganze menschlicher wirken zu lassen. ein normaler mensch drückt die taste auch mindestens 10ms... für 95% aller spiele ist das allerdings eher wenig interessant wie lange du ne taste drückst. von daher macht es schon sinn alle möglichen pausen aus dem script zu entfernen um so für maximale stabilität zu sorgen
lolkop is offline  
Old 08/23/2010, 19:58   #24
 
| Moep |'s Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
Quote:
SendKeyDownDelay

Bestimmt die Zeitdauer, die eine Taste gedrückt sein muss, bis ein Tastaturanschlag registriert wird. Für Anwendungen die einige Zeit benötigen bis Tastaturanschläge erkannt werden (und viele Spiele) kann es notwendig sein den Standardwert zu erhöhen. Ein Wert von 0 entfernt die Verzögerung komplett.
Zeit in Millisekunden zur Pause (Standard=5).
Also ich hab die Erfahrung gemacht, dass ich bei vielen Spielen den delay auf ca 100ms stellen musst damit etwas an kam...
| Moep | is offline  
Old 08/23/2010, 20:06   #25
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
habe bisher noch nie ein spiel gesehn was eine pause benötigt... eine verzögerung von 100ms wäre bei mehrfacher anwendung auch schon genug um das ganze script instabil zu machen und würde sachen wie guis etc komplett unbrauchbar machen.

90% der etwas höherwertigen scripte nutzen sowieso postmessage oder sendmessage und keine der beiden funktion besitzt eine pause.

wie dem auch sei war nur ein tip von mir. man muss halt immer bedenken das jedes sleep das gesamte script blockiert. und wenn man tatsächlich mal eine anwendung finden sollte die auf dauer von tastendrücken achtet (was ich mal stark bezweifle), sollte man auch hier die delays von autoit auf 0 setzen und stattdessen wieder mit timern arbeiten.
lolkop is offline  
Old 08/23/2010, 20:46   #26
 
| Moep |'s Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
ok, also ich komm bei normalen drücken auf ne Zeit von ca 70-90 ms.

Code:
#include <Misc.au3>

$ts = false
$dll = DllOpen("user32.dll")

While 1
    Select
		case _IsPressed("20", $dll) And not $ts
			$t = TimerInit()
			$ts = true
		case Not _IsPressed("20", $dll) And  $ts
			MsgBox("","",TimerDiff($t))
			$ts = false
		EndSelect
WEnd
DllClose($dll)
Dass Menschliche auge kann 14-16 Bilder pro Sekunde sehen. Dass entspricht aller 60-70 ms ein Bild. D.h also ich kann bei einer odentlichen Script Struktur in dieser range ohne merkliche Defizite sleeps, keysends or what else, einbauen.

Code:
$t = TimerInit()
while 1
	Sleep(random(60,70))
	ToolTip(timerdiff($t),0,0)
WEnd
Code:
$t = TimerInit()
while 1
	Opt("SendKeyDownDelay", random(60,70))
	Send("a")
	ToolTip(timerdiff($t),0,0)
WEnd
| Moep | is offline  
Old 08/23/2010, 21:18   #27
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
sagen wir mal du hast eine main loop mit guigetmsg aufgebaut. guigetmsg bringt ein delay von etwa 10ms mit sich, um die cpu last zu verringern. soweit so gut.

wenn ein mensch einen button drückt tut er dies im normalfall etwa 100-300ms. da macht ja 10ms nicht viel aus. leider summiert sich in der dauerschleife vieles. sagen wir mal wir führen einmal send in der schleife aus mit 100ms delay. die andern funktionen sind ohne delay dh laufen in weniger als 1ms ab können also ignoriert werden. jetzt braucht unsere schleife etwa 110ms um einmal vollständig durchzulaufen. von diesen 110ms sind 100ms ein sleep. in dieser zeit wir also nichts getan. auchnicht gecheckt ob das gui genutzt wird.

sagen wir mal du drückst überdurchschnittlich lange den button... ca. 500ms (was wirklich lange ist) dann hast du allein durch diesen einen send befehl schon 1/5 der druckdauer erreicht.

sagen wir mal du lässt den send befehl noch in einer for-schleife von 1-10 durchlaufen.... for-schleifen selbst besitzen ebenfalls nochmal ein delay aba das vernachlässigen wir hier mal...
in der schleife wird jetzt also folgendes ausgeführt:
Code:
send(1)
send(2)
send(3)
send(4)
send(5)
send(6)
send(7)
send(8)
send(9)
send(10)
jeder befehl hat ein delay von 100ms was du ja durchaus für angemessen hälst....

jetzt läuft deine schleife aufeinmal mit einem 1010ms sleep... das ist das doppelte der überdurchschnittlich langen buttondrück dauer.... dh die chance das dein script jetzt überhaupt noch mitbekommt das du etwas im gui machen willst liegt nurnoch bei 50%...

allein 10 sends mit deinem vorgeschlagenem delay würden also ein gui schon praktisch unbrauchbar machen. und hierbei haben wir jetzt einmal von allen anderen funktionen, die ja auchnoch eine laufzeit haben in der das gui nicht gecheckt wird abgesehen.

je umfangreicher ein tool wird desto schwerer wird es wirklich das gui ansprechbar zu halten. und man sollte sich direkt am anfang angewöhnen auf jegliche arten von sleep oder delay zu verzichten...
eins ist fakt... es ist möglich komplett ohne diese funktionen zu arbeiten. guigetmsg sorgt für eine geringe cpu auslastung, ohne irgendwelche sleeps oder delays zu arbeiten. und wie ich auch schon am beispiel von seinem script gezeigt habe ist es auchnicht sonderlich schwer mit timern zu arbeiten.
lolkop is offline  
Old 08/23/2010, 21:41   #28
 
| Moep |'s Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
Ok, ich weiß was du meinst.
Aber deine Argumentation lass ich nur zur hälfte gelten. Wie schon gesagt, kannst du deinen Script Aufbau auch anders gestalten. Z.b. adlibregister benutzen um die gui zu refreshen. Oder du kompilierst dir ein script welches die sends übernimmt, dann ist es absolut Boogie wie lange die dauern...
| Moep | is offline  
Old 08/23/2010, 22:56   #29
 
bladerofdarknes's Avatar
 
elite*gold: 0
Join Date: Mar 2008
Posts: 1,524
Received Thanks: 285
Quote:
Dass Menschliche auge kann 14-16 Bilder pro Sekunde sehen


~25 bilder/fps (frames per second)
bladerofdarknes is offline  
Old 08/24/2010, 08:06   #30
 
| Moep |'s Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
Quelle?


Auzug Wikipedia:
Quote:
Das menschliche Gehirn nimmt ab etwa 14 bis 16 Bildern pro Sekunde (das ist individuell verschieden) aufeinanderfolgende Bilder als scheinbar bewegte Szene wahr, weswegen die Bildfrequenz bei Kinofilmen in der Stummfilmzeit, nach einer experimentellen Anfangsphase, auf 16 Bilder pro Sekunde festgelegt wurde. Viele späte Stummfilme wurden jedoch mit höheren Bildfrequenzen, wie z. B. 22fps, aufgenommen. Mit der Einführung des Tonfilms wurde die Bildfrequenz auf 24fps festgelegt, da die Tonqualität bei 16fps nicht ausreichte.
Deine ~25 bilder/fps sind also nur eingeführt wurden weil sich der ton bei 16fps kacke anhört, dass Auge juckt dass kein bisschen...
| Moep | is offline  
Reply

Tags
autoit3


Similar Threads Similar Threads
[HILFE]Mein freund brauch hilfe
01/31/2010 - Metin2 Private Server - 12 Replies
Wie immer brauch mein freund hilfe er hatte server heut schon on aber als er reboot gemacht hat und vpc starten u laden gemacht kommt bei ihm das erste mal conecton:conection refused das spammmt die ganze zeit danach kommt 20 mal connect:Network is unreachable also kann er nich verbnden was heißt das????
[HILFE]brauch ma hilfe beim rüssi modden
12/28/2009 - Metin2 Private Server - 5 Replies
Hey Com also ich such jemanden der mir beim modden helfen könnte ich habe soweit alles fertig nur mein problem ist wenn ich ins spiel gehe das die rüssi immer noch so ist wie sie war :confused: bei hilfe gibts natürlich THX ;)
HILFE BRAUCH HILFE Mt2 P-server machen!!
10/25/2009 - Metin2 Private Server - 0 Replies
Hallo erstmal, also ich weiß wie man einen P-server macht.Nun fehlt mir aber nur noch eins: DIE INSTAND SERVER FILES!!! Kann sie mir pls jemand hochladen ich komm auch dafür auf , oder kann mir jemand pls einen Link schicken Ich will keinen öffentlichen Server machen sondern nur für mich alleine!!! Also dann Noch Viel spaß MFG



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


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.