Pfad eines geöffneten Projects auslesen

  • Nein - die Eintragungen in die "default.conf" werden erst beim Beenden von Code-Blocks geschrieben.
    Dies dient dazu das die Informationen beim nächsten Programmstart wieder zur Verfügung stehen.
    Zwischendurch wird da nichts geschrieben um unnötige Festplattenzugriffe zu vermeiden.

    gibt es keinen @???? Befehl, der den Pfad eines im Fokus stehenden Fensters lesen kann?


    Bin nicht sicher was du damit meinst.
    Ein Fenster hat keinen Pfad.
    Ein Fenster wird von einem Programm erstellt - das Programm hat einen Pfad (in deinem Fall der Pfad zu der codeblocks.exe).
    Manchmal kann man z.B. aber von Fenstertiteln oder Control-Texten Informationen bekommen aber Code::Blocks scheint mit WxWidgets programmiert worden zu sein, so dass man mit den normalen AutoIt-Funktionen da eher nicht herankommt.

  • Es gibt noch eine andere Möglichkeit, aber da hab ich bisher so wenig informationen gefunden, wie genau das funktioniert. Code::Block ist wie ich finde nicht so gut dokumentiert.

    Mit dem Code::Blocks kann man auch Parameter übergeben,
    [Blockierte Grafik: http://s3.directupload.net/images/100908/nlhhqufg.jpg]

    Hier kann man scheinbar den Pfad direkt mitteilen ${Project_Dir}, also genau das was ich möchte, hab auch schon ein bischen von der $CmdLine Funktion in AutoIt gelesen, aber ich hab leider keine Ahnung, wie ich die Parameter an meine .exe übergeben kann.
    (in c++ wüsste ichs ;( )

    EDIT:
    Ich habe versucht den Projectpfad mit diesen Makros oben eine textdatei (z.B. Pfad.nfo) in einen bekannten Pfad zu schreiben und diesen dann mit AutoIt auszulesen, ich konnt aber keine Datei erstellen oder verändern???

    Einmal editiert, zuletzt von Michael_Scott (8. September 2010 um 15:10)

  • Das ist auch ein Ansatz.
    Das würde bedeuten man würde bei Code::Blocks ein Programm registrieren (Dein Skript) und diesem dann den aktuellen Pfad oder sonstige Informationen übergeben.
    Heißt dann allerdings auch es muss explizit vom Nutzer aus Code::Blocks heraus aufgerufen werden.

    Die übergebenen Kommandozeilenparameter an ein AutoIt-Skript wertet man ganz einfach entweder mit $CMDLine[..] aus (ist ein Array bei welchem die Parameter getrennt durch Leerzeichen eingetragen werden) oder mit $CmdLineRaw welches ein String darstellt mit allen übergebenen Parametern.
    All das steht nochmal ausführlich in der Hilfe zu AutoIt: >>Klickmich<<

    Willst du also das ganze testen dann kompiliere z.B. folgendes Skript zu einer exe:

    [autoit]

    MsgBox(0,"Erhaltene Parameter", $CmdLineRaw)

    [/autoit]


    Trage es dann, wie du beschrieben hast, in Code::Blocks ein und trage dort ebenfalls die gewünschten Makros bei den Parametern ein.

    Edit: Zu deinem Edit ( ;) :(
    Du kannst damit keine Textdateien erstellen - du kannst nur andere Programme aufrufen.

  • OK,
    also meine .exe wird nur von Code::Blocks aus ausgeführt, der Pfad der .exe steht in Executable:

    Um den Pfad zu erhalten müsst ich doch nur schreiben unter Parameters: ${PROJECT_DIR}

    Nur weiß ich immer noch nicht wie ich diesen Parameter beim Ausführen der .exe wieder auffangen kann.

    Bei C++ kann ich die Parameter in der int main(.........) gleich wieder benutzen, kann ich mir das mit AutoIt auch so vorstellen? Kann die Func _Main() nichts aufnehmen?

    Werd die Hilfe auch nochmal durchlesen, muss jetzt nur weg.

    Danke euch

  • Nur weiß ich immer noch nicht wie ich diesen Parameter beim Ausführen der .exe wieder auffangen kann.
    Bei C++ kann ich die Parameter in der int main(.........) gleich wieder benutzen, kann ich mir das mit AutoIt auch so vorstellen? Kann die Func _Main() nichts aufnehmen?


    Bei C++ werden die Parameter in das String-Array argv[] (meistens so bezeichnet) geschrieben.
    Exakt dem entspricht $CmdLine[].
    Zusätzlich hast du aber noch mit $CmdLineRaw die Möglichkeit den gesamten Parameterstring zu verwenden.
    Je nach dem was sich da anbietet.
    Die Verwendung ist nicht schwer und mit meinem Minimalbeispiel eigentlich (denke ich zumindestens) ausreichend beschrieben.
    Ansonsten steht es wie gesagt ausführlich in der Hilfe.

  • AspirinJunkie
    vielen Dank, ich hätt nie gedacht, dass das so einfach geht. Dein minimalbeispiel funktioniert als test.exe einwandfrei, genau das hab ich gesucht. Halben Tag leider am falschen Ansatz rumprobiert.


    Wieder einmal wurden hier alle meine Fragen beantwortet, deshalb wird dieses Thema abgeschlossen.
    Danke @all