Funktion ControlSend maximiert Fenster

  • 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

    Einmal editiert, zuletzt von loli89 (27. Dezember 2008 um 13:02)

  • 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]


    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 = $Start

    [/autoit] [autoit][/autoit] [autoit]

    readini()
    go()
    Case $nMsg = $Stop
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func leseEins()
    GUICtrlRead($InputZeile1)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func leseZwei()
    GUICtrlRead($InputZeile2)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func leseDrei()
    GUICtrlRead($InputZeile3)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func lesems()
    GUICtrlRead($set4)
    IniWrite(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func go()
    sendini()
    go()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    Exit 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func readini()
    $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))

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(4096, "Test", $vartest, 10)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func sendini()
    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)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    die 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

  • ich z.b. blick nicht ganz durch was du damit willst:

    [autoit]


    readini()
    go()
    Case $nMsg = $Stop
    Exit

    [/autoit]


    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 kann

    Padmak

  • 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 :D
    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
    ; Pausieren des Scripts möglich ("PAUSE")
    ; Direktes Schließen mittels ("ESC")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #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 ###

    [/autoit] [autoit][/autoit] [autoit]

    Global $Paused
    HotKeySet("{PAUSE}", "TogglePause")
    HotKeySet("{ESC}", "Terminate")

    [/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 = $Start

    readini()
    go()
    Case $nMsg = $Stop
    Exit

    [/autoit] [autoit][/autoit] [autoit]


    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func leseEins()
    GUICtrlRead($InputZeile1)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func leseZwei()
    GUICtrlRead($InputZeile2)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func leseDrei()
    GUICtrlRead($InputZeile3)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func lesems()
    GUICtrlRead($set4)
    IniWrite(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func go()
    sendini()
    go()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    Exit 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func readini()
    $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))

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(4096, "Test", $vartest, 10)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func sendini()
    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)
    EndFunc

    [/autoit]

    ist 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^^
    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 ich ;)

    [autoit]

    WinSetTitle("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 :D
    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 :P

  • 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?

  • 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
    ; 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")

    [/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 = $Start
    readini()
    go()
    Case $nMsg = $Stop
    AdlibDisable()
    Case $nMsg = $Exit
    Exit
    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func leseEins()
    GUICtrlRead($InputZeile1)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile1", GUICtrlRead($InputZeile1))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func leseZwei()
    GUICtrlRead($InputZeile2)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile2", GUICtrlRead($InputZeile2))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func leseDrei()
    GUICtrlRead($InputZeile3)
    IniWrite(@ScriptDir & "\test.ini", "test", "Zeile3", GUICtrlRead($InputZeile3))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func lesems()
    GUICtrlRead($set4)
    IniWrite(@ScriptDir & "\test.ini", "test", "Intervall", GUICtrlRead($Input4))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func go()
    AdlibEnable("sendini",$varMS)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    Exit 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func readini()
    $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))

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(4096, "Test", $vartest, 10)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func sendini()
    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

    [/autoit]


    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 :rofl: