autom. Refresh für 3rd Party Programm

  • Hi zusammen,


    ich bin noch totaler AutoIT Neuling, hab aber auch keine konkrete Hilfe für mein Problem finden können um das kmplt. selbstständig anzugehen. Ich hoffe hier auf eure Erfahrung und Unterstützung dabei :).


    Problemstellung:

    Ein 3rd Party Tool benötigt einen per Shortcut ausgelösten Refresh, sonst erfolgt eine autom. Abmeldung und das nervt. Das Script muss teilweise anpassungsfähig sein.


    - Die Idee ist, sich alle offenen Fenster auflisten zu lassen (durch häufiges patchen ändert sich der Fenstername regelmäßig), um dann das richtige manuell auszuwählen.

    - Als verstellbare Variablen möchte ich den Refresh Intervall in Sekunden, und den Shortcut zum refreshen selbst einstellen können.

    - Das Tool soll im gleichen Refresh Intervall auch eine kurze minimale Mausbewegung machen um einem Policy gesteuertem Standby entgegenzuwirken.

    - Anschliessend soll das Tool wieder auf das vorherige aktive Fenster focussieren.


    Wenn das man so einfach wäre.


    VG,

    Shortylaforge

    • Offizieller Beitrag

    Wo sind deine Scriptversuche?

    Das ist das Hilfe & Unterstützungsforum. Wenn du Hilfe brauchst, zeig mal was du schon selbst gemacht hast. ;)

  • Da ist noch nichts, außer wie erstell ich mir nen Button/Liste und son Zeuchs.

    Also reiner Tutorial Kram, den wollt ihr doch nicht wirklich sehen, oder doch? :) Na gut.. Aber weit bin ich halt nicht gekommen. Kriege grad mal die offenen Fenster in ner Liste angezeigt,

    und auch das hab ich mir zusammengeklaubt ohne wirklich zu verstehen was da passiert.

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    #Include <GuiListBox.au3>

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

    Dim $array1,$main1,$list1

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

    $windows = WinList()
    $main1 = GUICreate("Listfeld",400,400,200,200)
    $list1 = GUICtrlCreateList("",10,10,380,300)

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

    For $i = 1 To UBound ($windows) - 1
    If $windows[$i][0] <> "" AND IsVisible($windows[$i][1]) Then
    _GUICtrlListBox_AddString ($list1, $windows [$i][0])
    EndIf
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    ExitLoop
    EndSwitch
    WEnd

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

    Func IsVisible($handle)
    If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Shortylaforge (22. März 2014 um 18:06)

  • Zitat

    und auch das hab ich mir zusammengeklaubt ohne wirklich zu verstehen was da passiert.


    Das ist natürlich keine gute Voraussetzung um hier Hilfe zu bekommen. Denn ein wenig Wissen sollte man schon mitbringen. Dann erwartest du mehr oder weniger eine fertige Lösung und wärst damit im Unterforum Programmieranfragen besser aufgehoben. Das ist nicht böse gemeint.

    Interessant zu wissen wäre, inwieweit sich der Fenstertitel ändert. Bleibt immer ein Teil gleich? Denn dann liesse sich das Problem recht einfach lösen. Vielleicht gibst du uns mal ein paar Beispiele zum Fenstertitel und wir werfen dir dann Lösungswege und Codeschnipsel vor die Füsse :)

    Edit: Oder du liest mal mit dem AU3Info Tool aus SciTE den Klassennamen des Fensters aus.

  • Dann mal konkreter... Lern ich das halt Pfftt.. :)

    Case $Menu_Program_Choose funktioniert in diesem Fall wegen der For Schleife ja nur beim letzten gelisteten Eintrag. Wie muss ich das umbauen das alle Einträge im Case erfasst und ausgewertet werden?

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    #Include <GuiListBox.au3>

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

    Dim $array1,$main1,$list1

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

    $windows = WinList()
    $main1 = GUICreate("Auto Refresher",400,400,200,200)
    $Menu_Program = GUICtrlCreateMenu ("ChooseProgram")
    $Menu_Open = GUICtrlCreateMenu ("Open", $Menu_Program)

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

    For $i = 1 To UBound ($windows) - 1
    If $windows[$i][0] <> "" AND IsVisible($windows[$i][1]) Then
    $Menu_Program_Choose = GUICtrlCreateMenuItem ($windows [$i][0], $Menu_Open)
    EndIf
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    ExitLoop
    Case $Menu_Program_Choose
    MsgBox(0, "", "")
    EndSwitch
    WEnd

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

    Func IsVisible($handle)
    If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Shortylaforge (22. März 2014 um 18:04)

  • Wie bereits erwähnt wurde solltest du zunächst die Grundlagen beherrschen. Außerdem ist deine Beschreibung viel zu dürftig um dir ernsthaft helfen zu können.

    Prinzipiell wäre ersteinmal zu klären um welches "3rd Party Program" es überhaupt geht bzw. um welche zu Grunde liegende Technologie. Reden wir hier von einer Web Applikation oder von einer lokalen Desktop Applikation?

    Dann solltest du dir außerdem dringend die Frage stellen ob dein Arbeitgeber damit einverstanden ist, dass diese automatische Abmeldung der Anwendung und der automatische Standby des Systems von dir umgangen wird (da letzteres per Gruppenrichtlinien geregelt ist denke ich mal, dass eure IT sich da sehr wohl etwas dabei gedacht hat). Solltest du selbst Administrator sein und somit für diese Applikation verantwortlich sein würde ich eher die Einstellungen der Applikation prüfen und ggf. den Hersteller kontaktieren um zu prüfen ob diese Session Intervalle verlängert oder das Session Timeout ganz abgeschaltet werden kann. Dir sollte aber klar sein, dass es Sicherheitsgründe hat wenn eine Applikation bei Inaktivität einen erneuten Login verlangt. Das selbe gilt natürlich für die GPO welche für den Standby verantwortlich ist, auch hier ist normalerweise die IT Abteilung dein Ansprechpartner.

    Nun gehen wir mal davon aus es juckt niemanden was du mit deiner Workstation tust...

    Im Falle einer Desktop Applikation benötigst du das "Au3info Tool", welches du im Scite Editor findest. Um dir aktiv helfen zu können wäre das "summary log" von Au3Info für das entsprechende Fenster hilfreich. Wenn du Pech hast handelt es sich aber um ein Fenster, welches keine Windows Standardcontrols verwendet. In diesem Fall hilft dir Au3Info nur bedingt weiter und du benötigst letztlich etwas weniger zuverlässige Funktionen (optische Erkennung) zur Automatisierung.

    Handelt es sich um eine Web Applikation benötigst du passende Funktionssammlungen für deinen Browser. Im Standard Autoit Paket sind Funktionen für den Internet Explorer enthalten, hier im Forum findest du außerdem die ff.au3 für Firefox. Ebenfalls hilfreich sind gewisse Browser Addons wie z.B. Firebug um Details über die Elemente der Webseite zu ermittlen.

    Einmal editiert, zuletzt von misterspeed (22. März 2014 um 17:56)

  • Dann mal konkreter... Lern ich das halt Pfftt.. :)
    Case $Menu_Program_Choose funktioniert in diesem Fall wegen der For Schleife ja nur beim letzten gelisteten Eintrag. Wie muss ich das umbauen das alle Einträge im Case erfasst und ausgewertet werden?

    Nunja du musst die IDs der Menüeinträge eben in einem Array speichern. So kannst du dann in deiner GUI Schleife alle IDs des Arrays prüfen.

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    #Include <GuiListBox.au3>

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

    Dim $array1,$main1,$list1
    global $aMenu_Program_Choose[1][2] = [["ID","Titel des Fensters"]]

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

    $windows = WinList()
    $main1 = GUICreate("Auto Refresher",400,400,200,200)
    $Menu_Program = GUICtrlCreateMenu ("ChooseProgram")
    $Menu_Open = GUICtrlCreateMenu ("Open", $Menu_Program)

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

    $j = 0

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

    For $i = 1 To UBound ($windows) - 1
    If $windows[$i][0] <> "" AND IsVisible($windows[$i][1]) Then
    $j += 1
    redim $aMenu_Program_Choose[$j+1][2]
    $aMenu_Program_Choose[$j][0] = GUICtrlCreateMenuItem ($windows [$i][0], $Menu_Open)
    $aMenu_Program_Choose[$j][1] = $windows [$i][0]
    EndIf
    Next

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    ExitLoop
    ; Case $Menu_Program_Choose
    ; MsgBox(0, "", "")
    EndSwitch

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

    for $j = 1 to ubound($aMenu_Program_Choose)-1
    if $msg = $aMenu_Program_Choose[$j][0] then
    msgbox(0,"Debug",$aMenu_Program_Choose[$j][1] & " wurde ausgewählt!")
    exitloop
    endif
    next

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

    WEnd

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

    Func IsVisible($handle)
    If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]