Zum Programmanfang zurückkehren...

  • Hallo Bugfix,

    ich stimme mit dir überein, dass das Callback-Konstrukt unglücklich gelöst zu sein scheint. Mit dem Konstrukt habe ich 2 Probleme:

    1. wie oben schon beschrieben bleiben die eingelesenen Werte i-wo im Speicher, denn wenn die Kallback() erneut aufgerufen wird, wird nicht eingelesen, sondern sofort eine
    Verarbeitung gestartet, d.h. es wird die bereits eingelesene Ausweisnummer geprüft und das Programm macht entsprechend weiter... ;(

    2. Wenn ich das Callback-Konstrukt nicht beende, würde es beim späteren Einscannen der Hardware-Parameter immer noch aktiv sein und den Ablauf kolossal stören.
    Daher hatte ich die Kallback() geschrieben in der Hoffnung ich könne das Einlesen bei Bedarf neu starten...

  • 2. Wenn ich das Callback-Konstrukt nicht beende, würde es beim späteren Einscannen der Hardware-Parameter immer noch aktiv sein und den Ablauf kolossal stören.
    Daher hatte ich die Kallback() geschrieben in der Hoffnung ich könne das Einlesen bei Bedarf neu starten...

    Dazu fügt man in die _KeyProc an erster Stelle eine Bedingungsabfrage ein, also Prüfen ob ein Zustand/Variablenwert/Fenster-aktiv existiert, der die Weiterverarbeitung erlaubt.

    If Not "BEDINGUNG" Then Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)

  • Hallo Bugfix,

    $g_hStub_KeyProc = 0 in der Funktion "EvaluateKey" hatte ich geschrieben im verzweifelten Versuch das Einlesen zu beenden,
    damit wie gesagt ich später die HW-Parameter scannen kann und ich auch die Ausweisnummer als ganzen String in der Variable $sAusweisnr drin habe.

    Ich würde gerne dein Angebot wahrnehmen und dir das gesamte Script per PN zur Verfügung stellen. Ich glaube langsam da sind so manche Böcke drin.... :Face:=O:/

  • Hallo Velted und MojoeB,

    ich bedanke mich bei euch für eure Ideen, befürchte aber ihr denkt viel zu kompliziert.

    Hallo hipfzwirgel,

    ich befürchte eher Du denkst zu kompliziert.

    Deine 'problematische' Kallback() Funktion startet doch nur den Hook und kehrt dann zurück. Der Rest der Verabeitung findet automatisch im Hintergrund statt. Der Hook kann bei Bedarf jederzeit mit _WinAPI_UnhookWindowsHookEx() deaktiviert werden. Er stört dann nicht mehr, bis etwas in der Art der Funktion Kallback() erneut aufgerufen wird.

    Eine 'doppelte Schleife' ist meiner Meinung nach auch nicht nötig. AutoIt hat ja die GUICtrlCreateDummy( ) Funktion. Damit kann man sich jederzeit eigene Nachrichten (z.B. über Zustandsänderungen) in die MessageLoop schicken. Wenn Du dann noch alle wichtigen Variablen global definierst und eine zentrale Init-Funktion erstellst, sollten sich die Abläufe (soweit ich sie kenne) einfach steuern lassen.

  • Dürfte doch vom Prinzip nur so sein:

    Zitat
    1. Schleife in der auf GUI Eingaben geprüft wird.
    2. Bei Eingabe über GUI start des 1. Funktionsaufrufs (dieser setzt als erste Tätigkeit die Default Werte für die Global Variablen, Global Const bleibt ja bestehen, Locale Variablen werden eh mit jedem Funktionsaufruf neu gesetzt je nach definition/initialisierung)
    3. Wenn dieser erfolgreich war am Ende in den ggf. 2. Funktionsaufruf (dies dann so immer weiter bis zum X-ten)
    4. Am Ende bzw. bei Fehler oder Abbruch: Ende der Verschachtelten Aufrufe und somit wieder zurück in der Schleife