Anwendung im Hintergrund starten und erkennen wann sie bereit ist

  • Ich hab gerade ein kleines Automations-Tool geschireben, und habe nun erkannt dass fast alles in einem nicht sichtbaren fenster (Status HIDE) gemacht werden kann.
    Ich habe jedoch nicht herausgefunden wie man die Fenstermenüs bedienen kann.
    Bitte um Rat.

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

    2 Mal editiert, zuletzt von TimBlo (7. Juli 2010 um 17:06)

  • Geil :D wusste garnet dass es das gibt ^^
    habs jetz mit ControlSend gemacht, meld mich evtl. wieder...

    Aber vielen dank für die schnelle, kurze und gute antwort :D

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

    2 Mal editiert, zuletzt von TimBlo (7. Juli 2010 um 13:45)

  • Ich weiß nicht, ob die Funktion inzwischen wieder funktioniert, aber Mitte 2009 tat sie oft nicht das, was sie sollte.
    Daher hatte ich die Funktion neu erstellt, die Prameter sollten in etwa gleich sein: _WinMenuSelectItem
    Die Menuitems können in 3 Formaten angegeben werden:
    Index (als Zahl)
    ID als String: "ID#12"
    Text als String: "Titel des Items"

  • Meld mich wieder...

    Jetzt, wos möglich ist, gehts darum das ganze im hintergrund zu machen
    1) Anwendung starten ohne dass dessen fenster erscheinen
    2) erkennen wann das fenster reaktionsbereit ist

    Wenn jemand ne lösung hat, dann bitte melden.
    Ich bin auf Google am suchen ;)

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

  • 1) Bei Run/ShellExecute den show_flag auf @SW_HIDE setzen (Ein kleiner Blick in die Hilfe genügt)
    2)

    [autoit]

    WinExists

    [/autoit]
  • Dass ich auf eins nich selber gekommen bin, is jetz n bissel peinlich...
    Die autoit hilfe is also nützlicher als Google - Krass :D

    Aber Teil 2 funktioniert nicht sachgerecht...
    Der code beginnt zu früh mit controlSend, im fenster erscheint irgendwas...
    die methode mit den sleeps gefällt mir nicht, is einfach unpassend ^^
    Also, das fenster soll nicht nur existieren, sondern wirklich bereit sein, was auszuführen
    Edit: selbst das mitm Menu funktioniert nach WinWait nicht

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

  • Gibt es eventuell einen Text, der erst erscheint, wenn das Fenster fertig ist? Dann könnte WinGetText helfen. Ansonsten ist das nur sehr schwer feststellbar, selbst wenn das Fenster sichtbar wäre.

    Oder du kannst so etwas versuchen:

    [autoit]

    $hWnd = WinGetHandle("...")
    Do
    Sleep(100)
    Until _GUICtrlMenu_GetMenu($hWnd) ; Warten, bis das Menü existiert

    [/autoit]
  • Das Programm ist ja sehr schnell geladen, es ist kaum feststellbar, ob das mitm Text funktionieren würde.
    beim sichtbaren hab ich es ja mit WinWaitActive gemacht, da gehts.
    Es is ja dasselbe wie bei AutoIt.
    Das Gui Existiert schon bei GuiCreate
    aber erscheinen tut es erst bei GuiSetState

    deine methode mitm menu is noch interessant...
    ich denke ich sollte mit dem AutoIt Info Tool die letzt Control-Instanz herausfinden und versuchen dessen handle zu bekommen.
    dabei kann ich mir die UDF ersparen... wenn's dann doch nicht geht, mach ichs halt mit UDF.. ich meld mich wieder

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

  • mit WinWaitActive gemacht, da gehts.


    Das funktioniert meistens. Es kann jedoch auch zufällig in genau diesem Moment ein anderes Fenster aktiviert werden, z.B. eine Virenmeldung, sodass das Skript nichts bemerkt. Erst wenn dann das Fenster wieder angeklickt wird, macht das Skript weiter.


  • Das funktioniert meistens. Es kann jedoch auch zufällig in genau diesem Moment ein anderes Fenster aktiviert werden, z.B. eine Virenmeldung, sodass das Skript nichts bemerkt. Erst wenn dann das Fenster wieder angeklickt wird, macht das Skript weiter.

    Deswegen machen die meisten es so:

    [autoit]

    Func _WinWaitActive($sTitle, $sText, $iTimeout)
    WinWait($sTitle, $sText, $iTimeout)
    If Not WinActive($sTitle, $sText) Then WinActivate($sTitle, $sText)
    EndFunc

    [/autoit]
  • Geil :)
    Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen :D:D:D:D:D

    bringt mir nun nich wirklich was, wenns doch hidden sein soll :D

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

  • Ich habs geschafft das zeugs im inaktiven modus zu bringen..
    leider werden nun im falschen fenster menus aktiviert
    kann mir evtl. jemand mit _GuiCtrlMenu helfen?, ich weiss net wie ich da n menuitem auswähl ^^
    Edit: Die methode aus der ersten antwort tut nix

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

  • Edit: Die methode aus der ersten antwort tut nix


    Und was ist mit Post #4 (also meinem?)

    Ich weiß nicht, ob die Funktion inzwischen wieder funktioniert, aber Mitte 2009 tat sie oft nicht das, was sie sollte.
    Daher hatte ich die Funktion neu erstellt, die Prameter sollten in etwa gleich sein: _WinMenuSelectItem
    Die Menuitems können in 3 Formaten angegeben werden:
    Index (als Zahl)
    ID als String: "ID#12"
    Text als String: "Titel des Items"

  • Beim ersten GUI tut sies,
    das zweite brauchts net
    das dritte hat n kompliziertes Menu, da ging bisher noch nix...
    bin am rumprobieren

    aber danke für den Tipp, der hat das problem ja schon verkleinert :D
    EDIT: Ich geb mich zufireden mit dem was ich hab...
    Das zweite GUI hat zuviel wischiwaschi xD
    während das tool die aufgaben den Programmen verteilt, erscheinen nur etwa 2 oder 3 fenster keine halbe sekunde lange..
    der lange teil is eher das erste fenster ^^

    VIELEN DANK AN
    progandy
    BurakSZ

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

    Einmal editiert, zuletzt von TimBlo (7. Juli 2010 um 17:05)