Gui show bei WinActiv und Gui hide bei WinClose

  • Hallo zusammen,

    ich möchte zu dem Programm "Lexware Faktura+Auftrag" im Bereich Kundenverwaltung zu jedem Kunden ein spezielles Bild anzeigen lassen.

    Gedacht habe ich mir das so:

    1. Autoit Programm läuft im Hintergrund und wartet bis das Fenster der Kundenverwaltung von Lexware geöffnet wird (WinActive oder WinWaitActive ?)

    2. dann liest Autoit mit (ControlGetText) die KundenNummer (eindeutige Nr.) ein und zeigt in einem GUI das Bild welches mit dem Dateinamen der Kundennummer (z.B. 10134.jpg) gespeichert wurde.

    3. wird das Fenster der Kundenverwaltung geschlossen, soll das GUI mit dem Bild auch geschlossen werden und wartet wieder bis das Fenster z.B. mit einem anderen Kunden geöffnet wird und zeigt dann dessen Bild.

    ich hoffe ich habe das einigermassen verständlich beschrieben.

    versucht habe ich bis jetzt felgendes: (aber das mit der WHILE schleife funktioniert nicht richtig....


    Ich würde mich freuen wenn mir da jemand auf die Sprünge helfen kann..

    Besten Dank

  • Naja erstmal brauchst du eindeutige Identifikationsmerkmale des Fensters. Davon seh ich in deinem Script bisher nichts. Stattdessen seh ich da nur einen Syntaxfeher.

    Schau dir das Tool "Au3Info" in Scite an. Damit ermittelst du erstmal die notwendigen Informationen des Fensters. Wenn du Pech hast verwendet Lexware aber keine Standard Fensterklassen von Windows, dann wirds etwas schwieriger die gewünschten Informationen (Kundennummer) zu ermitteln.

    Grundsätzlich ist deine Vorgehensweise aber richtig.

    1. Warten bis das Lexware Unterfenster sichtbar/aktiv wird

    2. Kundennummer auslesen

    3. Eigene GUI aktualisieren und anzeigen

    Hier mal eine abgewandelte Version deines Scripts. Sobald ein neues Notepad Fenster sichtbar ist kopiert das Testscript den Inhalt des Notepad Eingabefeldes und gibt das Ganze in der Scite Konsole aus.

    Dein Script funktioniert prinzipiell also. Es fehlen lediglich Detailangaben zum Fenster und Control.

  • Hallo, vielen Dank für Deine Antwort

    das mit den eindeutige Identifikationsmerkmale des Fensters war mir schon klar, hatte es in meinem Beispiel nicht extra erwähnt da hier nicht das Problem liegt.

    Das Problem liegt in der While Schleife, das GUI mit dem Bild öffnet und schließt sich im Sekundentakt.

    Verwende bitte mal folgendes Script, starte Notepad und gehe im Notepad unter Bearbeiten auf Ersetzen.

    Sobald das Fenster mit dem Ersetzen-Dialog geöffnet ist, öffnet sich mein GUI und schließt sich im Sekundentakt.

    • Offizieller Beitrag

    Sobald das Fenster mit dem Ersetzen-Dialog geöffnet ist, öffnet sich mein GUI und schließt sich im Sekundentakt.

    Du fragst ja auch ab, ob das Fenster aktiv ist!

    Wenn Deine GUI aufgeht, ist diese aber das aktive Fenster.

    Statt WinActive benutze lieber WinExists.

    Edit: Falls das Fenster immer existiert (nur nicht sichtbar ist), dann musst Du den Status des Fensters mit WinGetState ermitteln.

  • Jupp dein Script sollte natürlich sicherstellen, dass nicht permanent zwischen den Stati hin und hergewechselt wird. Desweiteren sollte dein Script nur dann die Bild GUI aktualisieren, wenn sich etwas an der Kundennummer geändert hat (ansonsten könntest du ein Flackern des Bildes wahrnehmen). Ich würd außerdem nicht permanent neue Bildcontrols in der GUI erstellen, sondern den Inhalt des Controls ändern. Andernfalls hast du nach einiger Zeit hunderte oder tausende controls die übereinander liegen. Soweit ich weiß gibt es außerdem ein maximales Limit an controls, was dann zum Scriptabsturz oder eben zu keinen neuen controls mehr führt.

    EDIT: Es schadet im Übrigen auch nicht vorher zu prüfen ob für die Kundennummer überhaupt ein Bild exisitert. Falls nicht kannst du ja z.B. ein Standardbild einblenden.

    Einmal editiert, zuletzt von misterspeed (3. Dezember 2017 um 12:40)

  • Jupp dein Script sollte natürlich sicherstellen, dass nicht permanent zwischen den Stati hin und hergewechselt wird. Desweiteren sollte dein Script nur dann die Bild GUI aktualisieren, wenn sich etwas an der Kundennummer geändert hat (ansonsten könntest du ein Flackern des Bildes wahrnehmen). Ich würd außerdem nicht permanent neue Bildcontrols in der GUI erstellen, sondern den Inhalt des Controls ändern. Andernfalls hast du nach einiger Zeit hunderte oder tausende controls die übereinander liegen. Soweit ich weiß gibt es außerdem ein maximales Limit an controls, was dann zum Scriptabsturz oder eben zu keinen neuen controls mehr führt.

    EDIT: Es schadet im Übrigen auch nicht vorher zu prüfen ob für die Kundennummer überhaupt ein Bild exisitert. Falls nicht kannst du ja z.B. ein Standardbild einblenden.

    wie meinst Du das in meinem Fall, den Inhalt des Controls ändern ?? meinst Du "GUICtrlCreatePic" einmal erstellen und darin dann das Bild ändern ??

    Oh da hab ich im moment keinen Plan wie ich das machen soll....

    Könntest Du mir bitte dazu ein Beispiel nennen


    Besten Dank