Zugriff auf Fenster welches sich hinter TrayIcon versteckt

  • Hallo zusammen, ein ähnliches Topic gab es schonmal wurde aber nie gelöst.

    Ich möchte gerne ein Fenster Aktivieren welches sich hinter einem TrayIcon versteckt (WindowsUpdate Installer) Das Fenster lässt sich mit den WinActive, WinSetState nicht ansprechen. Auch direkte ControlCommands oder ControlCklicks lassen sich nicht dem Fenster zuordnen, da es anscheinend nicht existiert solange nicht auf das TrayIcon geklickt wird. Ein direkter ControlClick auf das Icon lässt sich nicht durchführen, da das Icon selbst keine eigene ID in einem fest definierten Fenster beinhaltet.

    Die Summary dazu sieht so aus (Also das was Window Info darstellt):

    Spoiler anzeigen

    >>>> Window <<<<
    Title:
    Class: Shell_TrayWnd
    Position: -2, 740
    Size: 1028, 30
    Style: 0x96840000
    ExStyle: 0x00000188
    Handle: 0x00090148

    >>>> Control <<<<
    Class: ToolbarWindow32
    Instance: 1
    ClassnameNN: ToolbarWindow321
    Name:
    Advanced (Class): [CLASS:ToolbarWindow32; INSTANCE:1]
    ID:
    Text: Infobereich
    Position: 870, 2
    Size: 108, 18
    ControlClick Coords: 75, 11
    Style: 0x56008B4D
    ExStyle: 0x00000080
    Handle: 0x000200A6

    >>>> Mouse <<<<
    Position: 947, 757
    Cursor ID: 0
    Color: 0xFF0000

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<
    1: 5 Vorhandener Profilspeicherplatz: 11919 KB
    2: 4 Lautstärke
    3: 3 Hardware sicher entfernen
    4: 2 Mouse Suite
    5: 1 Tivoli Management Framework Endpoint Statistics
    6: 0 Symantec Endpoint Protection

    >>>> Visible Text <<<<
    Start
    10:59
    Infobereich
    Ausgeführte Anwendungen
    Ausgeführte Anwendungen


    >>>> Hidden Text <<<<

    Mauskoordinate wäre zwar ne möglichkeit, aber würde ja voraussetzen das sich die Reihenfolge der TrayIcons nie verändern darf und die Bildschirmauflösung immer die gleich bleibt also nicht an verschiedenen Rechnern einsetzbar.

    Ich hab auch schon versucht das Fenster über den dazugehörigen Prozess (wuauclt.exe) und der pdi des Prozesses anzusprechen. Auch das geht nicht....ich würde gerne meinen Scripttext posten, aber da es keinen Ansatz für das Problem gibt hab ich auch nichts was ich schreiben kann.

  • Was steckt denn hinter der "wuapp.exe" das WindowsUpdate Selbst oder das Konfigfenster?
    Wenn ich wüsste welche Exe hinter dem Fenster für den Agent stünde könnte ich das so machen. Aber das Fenster existiert ja nur wenn auf das TryIcon geklickt wird.

    Egal das funktioniert auf alle fälle nicht, gibt ne lustige Fehlermeldnug das es nicht existiert.

    Ich würde es ja über Screensshots zeigen aber ich darf hier keien hochladen...ist über die Gruppenrechtlinien deaktiviert -.-

    Dieses Fenster möchte ich aufrufen:

    Spoiler anzeigen

    >>>> Window <<<<
    Title: Automatische Updates
    Class: #32770
    Position: 365, 306
    Size: 551, 383
    Style: 0x94C800CC
    ExStyle: 0x00010101
    Handle: 0x001603B6

    >>>> Control <<<<
    Class:
    Instance:
    ClassnameNN:
    Name:
    Advanced (Class):
    ID:
    Text:
    Position:
    Size:
    ControlClick Coords:
    Style:
    ExStyle:
    Handle:

    >>>> Mouse <<<<
    Position: 748, 321
    Cursor ID: 0
    Color: 0xAEAEAE

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<

    >>>> Visible Text <<<<
    Wie sollen Updates installiert werden?
    Installieren
    Abbrechen
    &Expressinstallation (empfohlen)
    &Benutzerdefinierte Installation (für fortgeschrittene Benutzer)
    Mit dieser Option können die auf den Computer anwendbaren Updates einfach installiert werden, sodass auf dem Computer die neueste Software installiert ist.
    Hinweis:
    Ein Update wurde ermittelt.
    Sie müssen ggf. den Computer neu starten, damit die Änderungen wirksam werden.


    >>>> Hidden Text <<<<
    Windows wurde für geplante Installationen konfiguriert, aber der Zeitpunkt der geplanten Installation wurde verfehlt.

    also den InstallAgent vom AutomatischenUpdate der als TryIcon produziert wird, wenn das AutomatischeWindowsUpdate deaktiviert ist. Leider kann ich dem System auch nicht sagen einfach alle Updates automatisch installieren.

  • Ja genau, ich benutze XP. Ich werds mal versuchen. Aber ich denke, das die Zugriffsrechte wieder total streiken werden....

  • Ah ok das ist die Exe die zur Webmanager führt. Ne, das ganze muss als lokaler Admin ohne Internetrechte durchgeführt werden. Außerdem würde der Download soweiso nicht funktionieren über den Browser.
    Fragt mich bitte auch nicht wie der dann trotzdem die Updates runterläd und installiert. Gehe davon aus das der Agent so umgestrickt wurde das er auf den Server geht und von dort die Sachen runterläd. Kann ich aber auch nicht durchblicken da das von einer Externen Firma geregelt wird -.-
    Es geht zur Installation nur der weg über den Agent hintern TrayIcon.

    Das macht die ganze Sache so kompliziert X( - ein echt vermurkstes System. :cursing:

    Wenns nach mir ginge würd ich auch nicht Scripten sondern Imagen aber das darf man ja auch nicht O.o --> schon klar wechsel den Betrieb XD

  • Alter Pilg3r!

    Ich bin ein wenig verwirrt . Du willst ein Fenster öffnen, dass sich nur öffnen lässt, wenn man auf das entsprechende Tray-Icon klickt; dann klick doch drauf, oder musst Du es zwingend per Script öffnen?
    Einmal willst Du an das Fenster "Class: Shell_TrayWnd" (bezieht sich auf wuauclt.exe??), dann wieder an "Title: Automatische Updates / Class: #32770" (unbekannte EXE, solange man nicht auf Tray-Icon klickt???).
    Dann sagst Du noch, Du würdest gerne Scriptcode beifügen, hättest aber keinen erstellt. Anderserseits hast Du Dinge wie WinActive, WinSetState, ControlCommand ausprobiert. Was genau hast Du denn probiert? Das wäre ja schon mal ein Anfang. Bitte entwirre meinen Geist.

    Augrund Deiner Beschreibung hätte ich folgendes versucht:

    [autoit]

    WinSetState("[CLASS:Shell_TrayWnd]", "", @SW_SHOW)
    WinSetOnTop("[CLASS:Shell_TrayWnd]", "", 1)

    [/autoit]

    oder mit Hilfe der Funktion so etwas:

    Spoiler anzeigen
    [autoit]

    $wua = _ProcessGetWindows("wuauclt.exe", 1, 1)
    MsgBox(0, "Windows Titel:", $wua[0][0])
    WinSetState($wua[0][0], "", @SW_SHOW)
    WinSetOnTop($wua[0][0], "", 1)

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

    Func _ProcessGetWindows($vProcess, $iFilterEmptyTitle = 0, $iWindowState = 0)
    Local $avWinlist = WinList(), $iCount = 0, $avWindows
    Dim $avWindows[1][2]
    $iPid = ProcessExists($vProcess)

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

    If $iPid = 0 Then Return SetError(1, 0, 0)

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

    For $i = 1 To UBound($avWinlist) - 1
    $sTitle = $avWinlist[$i][0]
    $hWnd = $avWinlist[$i][1]
    $iProcessId = WinGetProcess($hWnd)

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

    If $sTitle = '' And $iFilterEmptyTitle Then ContinueLoop
    If $iWindowState And Not BitAND(WinGetState($hWnd, ''), $iWindowState) Then ContinueLoop

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

    If $iProcessId = $iPid Then
    If $iCount = UBound($avWindows) Then
    ReDim $avWindows[$iCount + 2][2]
    EndIf
    $avWindows[$iCount][0] = $sTitle
    $avWindows[$iCount][1] = $hWnd
    $iCount += 1
    EndIf
    Next

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

    If $iCount = 0 Then
    Return SetError(2, 0, 0)
    EndIf

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

    ReDim $avWindows[$iCount][2]
    Return $avWindows
    EndFunc ;==>_ProcessGetWindows

    [/autoit]

    Gruß
    Moctezuma III.

  • @ Moctezuma III. :

    Ok, also beide WindowInfos beziehen sich auf verschieden Fenster. Die erste WindowInfo gehört zu der Leiste der TrayIcons und die zweite WindowInfo gehört zu dem Fenster welches sich hinter dem TrayIcon befindet.

    Das hab ich mit meinem 2Tage Wissen versucht.

    Spoiler anzeigen
    [autoit]

    WinSetState("Automatische Updates","",@SW_ENABLE)
    WinSetState("Automatische Updates","",@SW_SHOW)
    WinSetState("[CLASS:#32770]","",@SW_ENABLE)
    WinSetState("[CLASS:#32770]","",@SW_SHOW)
    WinSetOnTop("Automatische Updates","",1)
    ShellExecute("wuauclt.exe")

    [/autoit]


    @ Greenhorn:

    Super, das ist doch das was in die richtige Richtung geht - und wenn ich mir das anschaue hätte ich das noch lange nicht entwickelt ?(
    Ich bekomme es auch hin, dass auf dem Script basierend, das eigene AutoIt-Script Icon angesprochen oder auch der Grafikmanager sich öffnet. Aber der WindowsUpdateAgent reagiert garnicht. Aber gut ich werde mal die nächsten paar Tage meine Zeit in AutoIt investieren und schauen ob ich die Scripte in ihren Einzelheiten verstehe :thumbup: Danach schau ich weiter. Damit hab ich ja nun endlich ne basis auf der ich lernen und verstehen kann. Sollte es nicht klappen werd ich michnochmal melden

    Danke an alle für die Infos

    Einmal editiert, zuletzt von D3r_Pilg3r (23. August 2010 um 09:10)