Global Variablen abfragen

  • Hallo,

    Ich habe folgendes Problem:

    1. Eine Hauptgui selektiert einen Ordner
    2. Diese Gui startet mit einem Button ein weiteres Script

    Wie kann ich in dem 2. Script abfragen, welcher Ordner in dem ersten Script gewählt wurde?

    Spoiler anzeigen
    [autoit]


    ;Gui 1 Wählt aus
    Global $ProjektFolder

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

    $ProjektFolder = FileSelectFolder("Ordner wählen",@ScriptDir)
    MsgBox(4096,"Dieser Ordner wurde gewählt",$ProjektFolder)

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

    ;Es wird eine weiteres Script gestartet. Fenster2.au3

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

    ;Wie kann ich in diesem 2. Script den $ProjektFolder abfragen?

    [/autoit]


    Liebe Grüße
    ;) Ilse

    3 Mal editiert, zuletzt von Ilse (17. März 2014 um 12:25)

  • Entweder per IPC oder alternativ (was wesentlich unkomplizierter wäre) einfach den Wert per Commandline an das 2. Skript übergeben.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Ja genau einfach den Pfad als Parameter in der Kommandozeile übergeben:

    [autoit]


    ;Bitte beachten: Die Pfade sind immer in Anführungszeichen (") eingeschlossen, um potentielle Fehler bei Pfaden mit Leerzeichen zu vermeiden.
    ShellExecute(@ScriptDir & "\script2.au3",'"' & $ProjektFolder & '"')
    ;ODER
    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptDir & '\script2.au3" "' & $ProjektFolder & '"') ;(diese Möglichkeit wurde nicht getestet)

    [/autoit]

    Die Frage ist allerdings warum du das nicht einfach in 1 Skript machst.

  • Hallo,

    merci für den Tipp!

    Kann man die Variablen nicht auch per Funktion & #Include
    einbinden?

    Ich erkläre das nochmal:

    Ein StartScript öffnet und schliesst div. weitere Scripts.
    Das Startscript wählt z.B. den 2014 Ordner und startet das Script Beispiele.
    Im Script Beispiel muß ich nun ein Label m. der Variablen d. ersten Scripts (2014 Ordner) versehen.

    Muß ich zusätzlich in den "geöffneten Scripts" etwas ändern?
    Wie spreche ich diese Variable im 2. Script an? (...hat bei mir irgendwie nicht geklappt.)

    Liebe Grüße
    Ilse ;)

    2 Mal editiert, zuletzt von Ilse (16. März 2014 um 19:00)

  • Es gibt schlichtweg keine Programm übergreifenden Variablen. Wenn du mit deinem Hauptprogramm ein anderes startest kennt diese Programm weder Funktionen noch Variablen des Hauptprogrammes. Das einzige was du tun kannst ist deinem zweiten Programm entweder beim Start alle benötigten Daten mitzugeben (z.B. per Parameter wie oben beschrieben oder per Konfigdatei) oder aber du sorgst dafür, dass dein Hauptprogramm auf irgendeine weise mit den anderen Programmen kommunizieren kann (Inter Prozess Kommunikation). Für Letzteres gibt es unzählige Möglichkeiten. Viele erfordern, dass die Teilprogramme deutlich erweitert werden (z.B. TCP Funktionalität), andere funktionieren passiv und erfordern keine Erweiterung der externen Programme. Dein Hauptprogramm könnte das Label des anderen Programmes z.B. einfach mit

    [autoit]

    controlsettext()

    [/autoit]

    verändern. Das Hauptprogramm muss dazu nur wissen wie das Fenster und das zu verändernde control des anderen Programmes anzusprechen sind.

  • Wie spreche ich diese Variable im 2. Script an? (...hat bei mir irgendwie nicht geklappt.)


    Du musst dir nur die Variablen $CmdLineRaw bzw. $CmdLine anschauen.
    Siehe hier.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski