Andere au3-Dateien dem Script hinzufügen

  • Hallo zusammen,

    ich nutzte gleich mal die Hilfe hier im Forum.

    Mein Problem:

    Wie bei den beiden Beispielen habe ich bisher die einzelnen Scripts hinzugefügt, dafür habe ich einen fixen Pfad angegeben. Es wäre allerdings besser, wenn das ein relativer Pfad sein könnte, so wie bei den ini-Dateien, doch das funktioniert nicht.

    (Aus dem Ordner 'Dart_App' wird das Spiel gestartet, das ist demnach @ScriptDir)

    1. Frage:

    Gibt es dafür eine Möglichkeit?

    C: #Include für au3-Dateien
    ; #include au3-Dateien
    #include <C:\Program Files\Eigene\Dart_App\Include\Avg.au3>
    #include <C:\Program Files\Eigene\Dart_App\Include\x01.au3>
    
    ; #include InI-Dateien
    Local Const $STATISTIKPFAD = @ScriptDir &"\ini\Statistik.ini"
    Local Const $INI_CRICKET_2 = @ScriptDir &"\ini\Cricket_2.ini"

    2. Frage:

    Ist 'Local Const' für Pfade geeignet, wenn sich auch andere au3-Dateien darauf beziehen?

  • Ad 1)

    Schau mal in der Hilfe nach (in SciTE den Cursor auf #include setzen und F1 drücken). Da agenau beschrieben, wie relative und absolute Pfade zu setzen sind bzw. wo AutoIt nach den Include-Files sucht.

    In SciTE kannst Du unter Tools > SciTE Config den Pfad für das Verzeichnis, wo Du Deine allgemeinen Includes ablegen willst, definieren.


    Ich habe für jedes Projekt einen eigenen Ordner. Darin befinden sich das Hauptskript sowie alle Includes, die nur von diesem Projekt verwendet werden.

    Allgemeine Includes lege ich in diesem "User Include Folder" ab.

    Ad 2)

    Du meinst die Ini-Dateien? Dann ja, solange sich die anderen Skripte im selben Verzeichnis befinden. Falls nein, musst Du absolute Pfade verwenden oder eine einheitliche Verzeichnisstruktur verwenden.

    Noch ein Tipp: Ich verwende für die Benamsung von Variablen immer die Ungarische Notation d.h. der erste Buchstabe gibt (meist) den Dateityp an z.B.

    Code
    $sStatistikPfad ; s für String, Groß- und Kleinschreibung für bessere Lesbarkeit

    Details findest Du im Wiki des engl. Forums

  • Ich habe für jedes Projekt einen eigenen Ordner. Darin befinden sich das Hauptskript sowie alle Includes, die nur von diesem Projekt verwendet werden.

    Wenn ich den vollen Pfad angebe funktioniert das Einbinden. Der include Ordner ist in dem Ordner von wo aus das Spiel gestartet wird.

    Wenn ich das Spiel z.B. an einen Kollegen weiter gebe passt der Pfad ja nicht mehr und nicht jeder hat AutoIt installiert hat.

    Die ini-Dateien binde ich halt mit @ScriptDir ein was auch funktioniert, jedoch nicht bei au3-Dateien.

    Ich suche einen Weg die auch einzubinden wenn die im Spiele Ordner liegen.

    Ich hab noch nicht bei der Hilfe nachgelesen, das werde ich aber gleich machen, danke für den Tip, k.a. warum ich da net schon nachgesehen habe. Ich schreibe hier wenn sich das damit lösen lässt.

    Du meinst die Ini-Dateien?

    Die habe ich als Beispiel angehängt wie ich gerne einbinden würde und die Frage zu denen bezog sich auf das deklarieren ob ggf. eine Globale Deklarierung besser wäre

  • Schau mal in der Hilfe nach (in SciTE den Cursor auf #include setzen und F1 drücken). Da agenau beschrieben, wie relative und absolute Pfade zu setzen sind bzw. wo AutoIt nach den Include-Files sucht.

    Ich habe das so verstanden:

    Code
    #include <"...\Include\Avg.au3">

    oder so:

    Code
    #include <"..."\Include\Avg.au3>

    Leider funktioniert das nicht, oder hab ich was falsch verstanden?

  • #include "...\Include\Avg.au3"

    Es ist wie verhext, sorry dafür, wenn das nicht geht muss ich halt den Pfad angeben, Zwar doof, aber was solls

  • Ich gehe davin aus, das dudas wie oben beschrieben die Strucktur C:\Program Files\Eigene\Dart_App\Include\Avg.au3 hast und deine main au3 im Dart_App Ordner liegt.

    Dann mache es bitte so:

    AutoIt
    #include "\Include\Avg.au3"
  • Ich gehe davin aus, das dudas wie oben beschrieben die Strucktur C:\Program Files\Eigene\Dart_App\Include\Avg.au3 hast und deine main au3 im Dart_App Ordner liegt.

    Richtig, dort in \Dart_App liegt die Startdatei bzw. auch die .exe

    #include "\Include\Avg.au3"

    Auch hierbei leider ein Error.

    Braucht man vielleicht eine #include von AutoIt, ich meine da gibt's zu allen möglichen Funktionen was zum einbinden.

    (wie z.B.: #include <AutoItConstants.au3>)

  • Ich glaube das ist etwa missverständlich geschrieben in der Hilfe.

    Die "..." sollen dort nicht wirklich eingetragen werden sondern sie stehen als Platzhalter für die Pfadangabe.


    Allerdings: So wie Moombas es im letzten Post geschrieben hat, sollte es funktionieren, wenn die Ordnerstruktur so ist wie beschrieben.
    Sprich:

    • Ordner Dart_App:
      • Hauptdatei: Main.au3
      • Ordner Include:
        • Datei Avg.au3

    Wenn dem so ist, dann lässt sich die Datei Avg.au3 innerhalb der Datei Main.au3 über verschiedenste Pfadangaben einbinden:

    AutoIt
    #include "Include\Avg.au3"
    #include "\Include\Avg.au3"
    #include ".\Include\Avg.au3"
    #include "..\Dart_App\Include\Avg.au3"
    #include "Include/Avg.au3"
    #include "/Include/Avg.au3"
    #include "./Include/Avg.au3"
    #include "../Dart_App/Include/Avg.au3"
    #include "./././../Dart_App/./././../Dart_App/./././../Dart_App/././././././Include/Avg.au3"


    Wie gesagt: All diese Varianten funktionieren nur, wenn die Ordnerstruktur tatsächlich wie oben beschrieben ist.
    Daran habe ich jedoch Zweifel, da dein letzter Versuch eigentlich hätte funktionieren müssen.

    Hinweis: Es würde auch ein Include in <> gehen anstatt in "". Das macht aber nicht viel Sinn, da man damit nur die Suchreihenfolge ändert. Bei <> sucht er erst im AutoIt integrierten Include-Ordner nach der Datei, dann optional in einem in der Registry eintragbaren zusätzlichen Pfad und als letztes im Skriptverzeichnis. Bei "" ist die Suchreihenfolge hingegen genau andersherum. Es bietet sich also an, <> zu verwenden, wenn man AutoIt-integrierte UDFs wie z.B. die Array.au3 einbinden will und "" zu verwenden, wenn man eigene Include-Dateien einbinden möchte.

    2 Mal editiert, zuletzt von AspirinJunkie (16. Mai 2023 um 06:36)

  • :party:Ich danke euch vielmals! <3<3<3


    Ich verstehe es zwar nicht so richtig warum nur einen Punkt, doch ich kann mir das für die Zukunft merken. Nice.

    So funktionierts:
    #include ".\Include\Avg.au3"

    Hier nochmal die Variante, welche ich bisher genutzt hatte:
    (in 'Dart_App' liegt die Hauptdatei und die DartAssi.exe)

    ; #include <C:\Program Files\Eigene\Dart_App\Include\Avg.au3>


    Also... Nochmals vielen Dank für eure Mühen!

  • Der Punkt ist allgemein eine relative Pfadangabe in Windows und nicht rein AutoIt-spezifisch.
    . bedeutet: das aktuelle Arbeitsverzeichnis.

    .. bedeutet: Eine Ordnerebene höher (kann mehrfach verwendet werden um noch weiter höher zu kommen).

    in deinem Beispiel bräuchtest du den Punkt also gar nicht sondern könntest einfach nur #include "Include\Avg.au3" schreiben.

  • . steht für das aktuelle Verzeichnis, während .. für die übergeordnete Verzeichnisebene steht.
    Das ist seit ewigen DOS-Zeiten so :)

    Pfadangaben werden z.B. hier beschrieben.

    Edit: Ich war zu langsam ;)

  • Pfadangaben werden z.B. hier beschrieben.

    Habe mir den Link, als Lesezeichen für die Zukunft, in meinen AutoIt-Hilfe Ordner abgelegt, Mercy!

    Der Punkt ist allgemein eine relative Pfadangabe in Windows und nicht rein AutoIt-spezifisch.
    . bedeutet: das aktuelle Arbeitsverzeichnis.

    .. bedeutet: Eine Ordnerebene höher (kann mehrfach verwendet werden um noch weiter höher zu kommen).

    Das hab ich für die Ewigkeit verinnerlicht und werde es nicht mehr vergessen, soviel kann ich garantieren :klatschen:  

    Ich kann mich nur wiederholen....

    ...Super nett von euch... <3

    ...und Danke für eure Mühen... <3

  • Gerne :)