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.
Anwendung im Hintergrund starten und erkennen wann sie bereit ist
-
- [ gelöst ]
-
TimBlo -
7. Juli 2010 um 13:20 -
Geschlossen -
Erledigt
-
-
[autoit]
WinMenuSelectItem
[/autoit] -
Geil 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
-
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 istWenn jemand ne lösung hat, dann bitte melden.
Ich bin auf Google am suchen -
1) Bei Run/ShellExecute den show_flag auf @SW_HIDE setzen (Ein kleiner Blick in die Hilfe genügt)
[autoit]
2)WinExists
[/autoit] -
Dass ich auf eins nich selber gekommen bin, is jetz n bissel peinlich...
Die autoit hilfe is also nützlicher als Google - KrassAber 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 -
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("...")
[/autoit]
Do
Sleep(100)
Until _GUICtrlMenu_GetMenu($hWnd) ; Warten, bis das Menü existiert -
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 GuiSetStatedeine 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 -
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)
[/autoit]
WinWait($sTitle, $sText, $iTimeout)
If Not WinActive($sTitle, $sText) Then WinActivate($sTitle, $sText)
EndFunc -
Geil
Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen, Testen :D:D:D:D:Dbringt mir nun nich wirklich was, wenns doch hidden sein soll
-
Ups, da hab ich nur das Zitat von ProgAndy gelesen, sorry.
-
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 -
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 rumprobierenaber danke für den Tipp, der hat das problem ja schon verkleinert
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