hey, da bin ich wieder mit meinen kleinen problemchen
hab n bisl mit controlsend gearbeitet und soweit funktioniert auch alles.
eig kann man ja somit auh texte an minimierte fenster senden, nur bei mir holt er das betreffende fenster immer in den vordergrund,
obwohl ich das Fenster minimiert habe.
Gibt es dazu n befehl der das ganze verhindert?
Mfg Loli
Funktion ControlSend maximiert Fenster
-
- [ gelöst ]
-
loli89 -
26. Dezember 2008 um 20:11 -
Geschlossen -
Erledigt
-
-
Der Befehl ControlSend holt dein Fenster nicht in den Vordergrund.
Hilfreich wäre es, wenn Du dein Skript posten würdest, evtl. kann man da irgendwas entdecken. -
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
While 1
$nMsg = GUIGetMsg()
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
Case $nMsg = $set1
leseEins()
Case $nMsg = $set2
leseZwei()
Case $nMsg = $set3
leseDrei()
Case $nMsg = $set4
lesems()
Case $nMsg = $Startreadini()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
go()
Case $nMsg = $Stop
ExitEndSelect
[/autoit] [autoit][/autoit] [autoit]
WEndFunc leseEins()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile1)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
EndFuncFunc leseZwei()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile2)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
EndFuncFunc leseDrei()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile3)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3))
EndFuncFunc lesems()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($set4)
IniWrite(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
EndFuncFunc go()
[/autoit] [autoit][/autoit] [autoit]
sendini()
go()
EndFuncFunc TogglePause()
[/autoit] [autoit][/autoit] [autoit]
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFuncFunc Terminate()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Exit 0
EndFuncFunc readini()
[/autoit] [autoit][/autoit] [autoit]
$varMS = IniRead(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
$varZeile1 = IniRead(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
$varZeile2 = IniRead(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
$varZeile3 = IniRead(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3));MsgBox(4096, "Test", $vartest, 10)
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc sendini()
[/autoit] [autoit][/autoit] [autoit][/autoit]
Sleep($varMS)
ControlSend("Test", "", "Edit1", $varZeile1)
ControlSend("Test", "", "Edit1", "{Enter}")
Sleep($varMS)
ControlSend("Test", "", "Edit1", $varZeile2)
ControlSend("Test", "", "Edit1", "{Enter}")
Sleep($varMS)
ControlSend("Test", "", "Edit1", $varZeile3)
ControlSend("Test", "", "Edit1", "{Enter}")
sendini()
;MsgBox(4096, "Test", $varMS & $varZeile1 & $varZeile2 & $varZeile3, 10)
EndFuncdie gui hab ich weggelassen, sind nur 3 eingabefelder und paar buttons. das fenster benenne ich mit einem externen script um.und minimieren mach ich aus testgründen selber da ich mit dem befehl zum minimieren das entsprechende fester nicht minimiert bekomme sonder ca 10mal verkleinert dargestellt bekomme.
hoffe ihr findet den fehler;)
mfg loli -
- Offizieller Beitrag
Welchen Sinn hat diese Rekursion?
[autoit]Func go()
[/autoit]
sendini()
go()
EndFunc
So wie ich das sehe, löst du damit eine 100%-ige CPU-Last aus und schreibst pausenlos in die INI. Zumal du in der Func sendini wiederum eine Rekursion hast. -
ich z.b. blick nicht ganz durch was du damit willst:
[autoit]
[/autoit]
readini()
go()
Case $nMsg = $Stop
Exit
am besten postest du mal deine gui
und das einzige was dein script im mom sicher macht ist wie BugFix gesagt hat eine 100%ige cpu auslastung
damit wirst du nicht froh^^ich persönlich finde dein script sehr kompliziert zu lesen
poste mal das GESAMTE script (mit gui) dann schau ich mal ob man das ganze auch einfacher machen kannPadmak
-
Das Skript mag kompliziert und für die CPU schrecklich sein, aber ich erkenne absolut nichts, was zum Maximieren eines Fensters führt.
Allerhöchstens, wenn die CPU mit dem Interpretieren nicht mehr nachkommt und was total schief läuft. Aber das kann ich mir eher nicht vorstellen.@TS: Du sagtest, Du würdest die GUI mit einem anderen Skript umbennen? Bitte auch das posten, vlt. hattest Du dort ja auch so viel "Fantasie".
-
Zitat
Das Skript mag kompliziert und für die CPU schrecklich sei
aber hallo ein 2 ghz computer (ich liebe euch :D) schaut dich bei sowas nur an und haut dann ab
aber ich bin auch dafür dass er mal das gesamte script postet
und auch das andere
dann kann man ihm vllt helfen^^Padmak
-
Spoiler anzeigen
[autoit];Versionsinfo: IniRead/IniWrite implementiert
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; Pausieren des Scripts möglich ("PAUSE")
; Direktes Schließen mittels ("ESC")#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
;#include <Send0.05.au3>
Local $varMS ,$varZeile1 ,$varZeile2 , $varZeile3
#Region ### START Koda GUI section ### Form=c:\users\chris\documents\form1.kxf
$Form1_1 = GUICreate("LeseSchreibe", 633, 454, 193, 115)
$Start = GUICtrlCreateButton("Start", 128, 408, 65, 25, 0)
$Stop = GUICtrlCreateButton("Stop", 208, 408, 65, 25, 0)
$InputZeile1 = GUICtrlCreateInput("", 128, 192, 313, 21)
$InputZeile2 = GUICtrlCreateInput("", 128, 256, 313, 21)
$InputZeile3 = GUICtrlCreateInput("", 128, 320, 313, 21)
$set1 = GUICtrlCreateButton("Set", 464, 192, 43, 25, 0)
$set2 = GUICtrlCreateButton("Set", 464, 256, 43, 25, 0)
$set3 = GUICtrlCreateButton("Set", 464, 320, 43, 25, 0)
$set4 = GUICtrlCreateButton("Set", 464, 368, 43, 25, 0)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Textzeile1 = GUICtrlCreateLabel("Textzeile 1", 128, 168, 55, 17)
$Textzeile2 = GUICtrlCreateLabel("Textzeile 2", 128, 232, 55, 17)
$Textzeile3 = GUICtrlCreateLabel("Textzeile 3", 128, 296, 55, 17)
$Input4 = GUICtrlCreateInput("", 368, 368, 49, 21)
$Ms = GUICtrlCreateLabel("ms", 424, 368, 17, 17)
$L_Intervall = GUICtrlCreateLabel("Intervall", 312, 368, 41, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###Global $Paused
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
Case $nMsg = $set1
leseEins()
Case $nMsg = $set2
leseZwei()
Case $nMsg = $set3
leseDrei()
Case $nMsg = $set4
lesems()
Case $nMsg = $Start
readini()
go()
Case $nMsg = $Stop
Exit
[/autoit] [autoit][/autoit] [autoit]
EndSelect
WEndFunc leseEins()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile1)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
EndFuncFunc leseZwei()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile2)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
EndFuncFunc leseDrei()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile3)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3))
EndFuncFunc lesems()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($set4)
IniWrite(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
EndFuncFunc go()
[/autoit] [autoit][/autoit] [autoit]
sendini()
go()
EndFuncFunc TogglePause()
[/autoit] [autoit][/autoit] [autoit]
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFuncFunc Terminate()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Exit 0
EndFuncFunc readini()
[/autoit] [autoit][/autoit] [autoit]
$varMS = IniRead (@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
$varZeile1 = IniRead (@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
$varZeile2 = IniRead (@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
$varZeile3 = IniRead (@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3));MsgBox(4096, "Test", $vartest, 10)
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc sendini()
[/autoit]
Sleep($varMS)
ControlSend("Test", "", "Edit1", $varZeile1)
ControlSend("Test", "", "Edit1", "{Enter}")
Sleep($varMS)
ControlSend("Test", "", "Edit1", $varZeile2)
ControlSend("Test", "", "Edit1", "{Enter}")
Sleep($varMS)
ControlSend("Test", "", "Edit1", $varZeile3)
ControlSend("Test", "", "Edit1", "{Enter}")
sendini()
;MsgBox(4096, "Test", $varMS & $varZeile1 & $varZeile2 & $varZeile3, 10)
EndFuncist eig n total simples programm, bin grad dabei mir alles son bisl selber beizubringen. das programm liest eig nur die eingaben und gibt sie nach x ms wieder. da ich letztens in der schule rekursion behandelt habe, dacht ich mir ich bau es mal ein. funktioniert ja auch, aber wie ihr auf die 100% cpu auslastung kommt weiß ich nicht^^
[autoit]
Und ja das script ist schlecht ich weiß, aber bin noch in den anfängen der programmierung und die feinheiten lerne ich wohl nebenbei iwann hoffe ichWinSetTitle("Unbenannt - Editor", "", "Test")
[/autoit]
damit benenn ich das fenster um. aber iwie springt es bei mir in den vordergrund. -
Zitat
"If multiple windows match the criteria the title of most recently active window is changed."
Kann es damit zusammenhängen? Hast Du mehrer Fenster, die es WinSetTitle treffen könnte? Vlt. wird es ja dadurhc gleich maximiert?
Wäre mir zwar neu, aber AutoIt macht bei mir grad auch was es will. -
nein ich starte den editor, dann das rename-script(ja es ist wirklich nur diese eine zeile ) und dann miniere ich das fenster. dann starte ich mein eigentliches script nur dass er dann in den vordergrund springt.
edit: hm grade eben hats geklappt. keine ahnung warum, aber es ging
also scheint mein programm dann doch zu funktionieren. vllt hing es mit irgendwelchen programme die offen waren zusammen. ich werde es weiter testen, setze den threat aber dann mal als gelöst, nochmal danke für die bemühungen ...
aber für ne idee wie man die cpu last runterbekommt bin ich immer zu haben -
Keine Endlosschleifen, oder wenn Du die unbeindgt brauchst, dann mach kleine Sleep()-Funktionen rein.
Ein ppar 100ms sollten reichen. -
- Offizieller Beitrag
da ich letztens in der schule rekursion behandelt habe, dacht ich mir ich bau es mal ein. funktioniert ja auch, aber wie ihr auf die 100% cpu auslastung kommt weiß ich nicht^^
Nichts gegen Rekursion, aber sie muß auch beendet werden. Ich sehe hier keinen Endpunkt, daher gehe ich davon aus dass die Funktion totläuft und da die Anzahl der möglichen Rekursionen nicht unendlich ist, ist irgendwann dein Speicher vollgemüllt und die CPU-Last geht auf 100.
Hier mal dein Programmablauf vom ersten geposteten Skript für die entsprechende Stelle als PseudoCode:Code... wenn Msg=$Start dann Aufruf readini() Aufruf go() Aufruf sendini() mehrere CtrlSend erneuter Aufruf sendini() ==> gefangen in endlosem sendini() erneuter Aufruf go() ==> gar nicht mehr möglich wegen sendini() würde rekursiver Aufruf erfolgreich, würde wieder sendini() gestartet
Erinnert mich an: Und täglich grüßt das Murmeltier - oder liege ich falsch mit meiner Synthese?
-
- Offizieller Beitrag
BugFix hat recht. Die Funktion sendini() ist eine "Todesschleife". Laut Hilfe:
"MAXCALLRECURSE = 5100"
D.h. nach 5100 rekursiven Funktionsaufrufen ist's vorbei mit Deinem Script.
Warum nur missbraucht ihr Funktionsaufrufe immer als GOTO-Ersatz?
Es gibt doch genügend Schleifenbefehle... -
ja genau oscar und du hast mir gezeigt wie man sie hernimmt
da wären: ExitLoop, ContinueLoop usw.
und eine frage:
warum nennst du das fenster um?
lass es doch einfach^^
wenn du es umbenennst musst du den titel vorher auch wissen also ist es eigentlich komplett sinnlos^^Padmak
-
- Offizieller Beitrag
So würde ich das machen , da wird auch die Gui nach aufruf von Sendini() richtig abgefragt.
Spoiler anzeigen
[autoit];Versionsinfo: IniRead/IniWrite implementiert
[/autoit] [autoit][/autoit] [autoit]
; Pausieren des Scripts möglich ("PAUSE")
; Direktes Schließen mittels ("ESC")
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
;#include <Send0.05.au3>
Global $varMS ,$varZeile1 ,$varZeile2 , $varZeile3,$test = 3
#Region ### START Koda GUI section ### Form=c:\users\chris\documents\form1.kxf
$Form1_1 = GUICreate("LeseSchreibe", 633, 454, 193, 115)
$Start = GUICtrlCreateButton("Start", 128, 408, 65, 25, 0)
$Stop = GUICtrlCreateButton("Stop", 208, 408, 65, 25, 0)
$Exit = GUICtrlCreateButton("Exit", 288, 408, 65, 25, 0)
$InputZeile1 = GUICtrlCreateInput("", 128, 192, 313, 21)
$InputZeile2 = GUICtrlCreateInput("", 128, 256, 313, 21)
$InputZeile3 = GUICtrlCreateInput("", 128, 320, 313, 21)
$set1 = GUICtrlCreateButton("Set", 464, 192, 43, 25, 0)
$set2 = GUICtrlCreateButton("Set", 464, 256, 43, 25, 0)
$set3 = GUICtrlCreateButton("Set", 464, 320, 43, 25, 0)
$set4 = GUICtrlCreateButton("Set", 464, 368, 43, 25, 0)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Textzeile1 = GUICtrlCreateLabel("Textzeile 1", 128, 168, 55, 17)
$Textzeile2 = GUICtrlCreateLabel("Textzeile 2", 128, 232, 55, 17)
$Textzeile3 = GUICtrlCreateLabel("Textzeile 3", 128, 296, 55, 17)
$Input4 = GUICtrlCreateInput("", 368, 368, 49, 21)
$Ms = GUICtrlCreateLabel("ms", 424, 368, 17, 17)
$L_Intervall = GUICtrlCreateLabel("Intervall", 312, 368, 41, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
Case $nMsg = $set1
leseEins()
Case $nMsg = $set2
leseZwei()
Case $nMsg = $set3
leseDrei()
Case $nMsg = $set4
lesems()
Case $nMsg = $Start
readini()
go()
Case $nMsg = $Stop
AdlibDisable()
Case $nMsg = $Exit
Exit
EndSelect
WEndFunc leseEins()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile1)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
EndFuncFunc leseZwei()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile2)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
EndFuncFunc leseDrei()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($InputZeile3)
IniWrite(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3))
EndFuncFunc lesems()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlRead($set4)
IniWrite(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
EndFuncFunc go()
[/autoit] [autoit][/autoit] [autoit]
AdlibEnable("sendini",$varMS)
EndFuncFunc TogglePause()
[/autoit] [autoit][/autoit] [autoit]
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFuncFunc Terminate()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Exit 0
EndFuncFunc readini()
[/autoit] [autoit][/autoit] [autoit]
$varMS = IniRead (@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
$varZeile1 = IniRead (@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
$varZeile2 = IniRead (@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
$varZeile3 = IniRead (@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3));MsgBox(4096, "Test", $vartest, 10)
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc sendini()
[/autoit]
If $test = 1 then
ControlSend("Test", "", "Edit1", $varZeile1)
ControlSend("Test", "", "Edit1", "{Enter}")
$test = $test +1
Elseif $test = 2 then
ControlSend("Test", "", "Edit1", $varZeile2)
ControlSend("Test", "", "Edit1", "{Enter}")
$test = $test +1
else
ControlSend("Test", "", "Edit1", $varZeile3)
ControlSend("Test", "", "Edit1", "{Enter}")
$test = 1
endif
endfunc
wenn man Sendini mit ner Schleife macht , dann wird die While1 Wend Schleife nicht mehr abgefragt weil man ja in der Sendini Schleife festhängt. -
ah super
nun funktioniert mein "stop"button auch. vielen dank dafür! auch großes dankeschön an alle übrigen die versucht haben mein problem zu lösen.
es wird zu 100%nicht mein letztes problem sein , versprech ich euch -
jupp loli so warn ich die leute auch immer vor