Minimieren eines Fensters nicht möglich

  • Hallo

    ich habe ein Skript geschrieben welches einen Wert aus Access kopiert, ein anderes Programm öffnet (bzw. wenn es schon geöffnet ist, dieses verwendet) und den Wert dann dort einfügt bzw. die Nummer sucht.

    Jetzt habe ich das Problem, dass wenn das Programm schon offen ist (wenn es neu gestartet werden muss funktioniert es) sich nachher nicht mehr minimieren lässt. Also das Symbol oben rechts funktioniert einfach nicht mehr, es muss vorher extra in der Taskleiste ausgewählt werden und dann lässt es sich wieder minimieren. Hat jemand eine Idee was hier falsch sein kann.

    Es muss irgendwas mit dem Programm zu tun haben, ich habe es Testweise mit dem Windows Editor auch probiert, da funktioniert es.

  • Ohne Deinen Source gesehen zu haben... ist Dein Fenster (das Du schließen willst) auch aktiv? Also zuerst Fenster aktivieren, dann schließen. Du brauchst eine kontrolierte Fensterumgebung. Sofern der Fenstername immer unterschiedlich ist- eine kontolierte Umgebung schaffen. Verknüpfung zum Programm mit festgelegtem Fensternamen. Oder Programm immer erst schließen (mit autoit) und dann kontrolliert neu starten...

    usw.

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Hallo Peter,

    ja - aktiv ist es, ich Aktiviere ja auch das Programm mit $dom = WinActivate("[CLASS:TfrmMain; REGEXPTITLE:(?i)(.*domizil.*)]") und kann es auch problemlos mit WinSetState($dom, "", @SW_SHOW) in den Vordergrund bringen. Über den Code funktioniert minimieren auch problemlos, aber wenn der User das Symbol drückt tut sich einfach nichts mehr.

    Schließen und neu öffnen ist leider keine Option, da das Programm (Domizil) leider sehr lange braucht zum starten

  • Jetzt habe ich das Problem, dass wenn das Programm schon offen ist (wenn es neu gestartet werden muss funktioniert es) sich nachher nicht mehr minimieren lässt.

    Könnte daran liegen, weil bei Run kein show_flag mit angegeben wurde... denn @SW_HIDE ist Default.

    RUN("\\srvwsgdz01\DomizilPlus\bin\DomizilNetzwerkStarter.exe -PROFIL:DomizilPlus -MANDANT:WSG")

    Ändere das mal so:

    RUN("\\srvwsgdz01\DomizilPlus\bin\DomizilNetzwerkStarter.exe -PROFIL:DomizilPlus -MANDANT:WSG", "", @SW_SHOW)

  • Hallo Schadi,

    vielleicht liegt es an WinActivate

    Probiere es doch einmal so:

    Wenn das auch nicht helfen sollte, dann vielleicht ein WinSetState ($dom, "", @SW_ENABLE) am Ende der Funktion Domizil.

    Beste Grüße

    Greenhorn


  • Wenn das auch nicht helfen sollte, dann vielleicht ein WinSetState ($dom, "", @SW_ENABLE) am Ende der Funktion Domizil.

    Am Ende der Funktion ist es zu spät... das muss vor...

    ControlFocus($dom, "", "[CLASS:TnetEdit]")

    ...und @SW_ENABLE macht nur Sinn, wenn zuvor @SW_DISABLE gesetzt wurde, was aber vermutlich nicht der Fall ist. Das lässt sich aber leicht mit WinGetState prüfen.

    Schadi : Anstatt Send solltest du - wann immer möglich - besser ControlSend bzw. ControlSetText verwenden, dann brauchst du auch keinen Fokus setzen.

    Sowas macht man besser so:

    AutoIt
    _Send("{DOWN}", 5, 100)
    _Send("{UP}", 1, 100)
    _Send("{Enter}", 2, 200)
    
    Func _Send($sText, $iRepetitions = 1, $iPause = 0)
        For $i = 1 To $iRepetitions Step 1
            Send($sText) ; besser ControlSend (Keys) bzw. ControlSetText (Text) verwenden
            If $iPause Then Sleep($iPause)
        Next
    EndFunc