Externe Datei Laden und Öffnen



  • Moin Leutz!

    Hab da mal ne Frage ... wie kann ich eine externe datei von einem unbestimmten laufwerk öffnen lassen z.b.
    ich habe ein programm (test.exe) auf cd gebrannt und nun will ich sie mit einem button klick aus meinem programm aufrufen. Da aber der laufwerksbuchstabe öfters tauscht darf keine zuweisung wie z.b. d:/ oder so verwendet werden. Wie kann ich das anstellen ?

    THX FOR HELP ! 😉



  • Wenn du nicht weisst, wo die zu öffnende Datei liegt dann bleibt dir nichts weiter übrig als entweder sämtliche in Frage kommenden Datenträger des Systems danach zu durchsuchen oder das den User per OpenDialog selbst erledigen zu lassen.

    Falls sich dein Frage nur darauf bezieht, dass sich sowohl dein Programm als auch die zu öffnende Datei auf der CD befinden: über TApplication::ExeName und die verschiedenen ExtractFile...-Funktionen kannst du die absoluten Pfade ermitteln.



  • Falls sich dein Frage nur darauf bezieht, dass sich sowohl dein Programm als auch die zu öffnende Datei auf der CD befinden: über TApplication::ExeName und die verschiedenen ExtractFile...-Funktionen kannst du die absoluten Pfade ermitteln.

    Ja so in der Art hatte ich das gemeint ... kannst du mir anhand eines bsp mal zeigen wie das ausehen könnte? Besitze den Borland Builder 1.0 und habe keine Vereinbarung namens TApplication oder änliches gefunden ...

    danke!



  • Jaja BCB1.0 odl-skool! Du bist mir sympatisch! 😃 Aber TApplication gibt's auch in 1.0! Guck mal in der Hilfe(F1) unter TApplication. Wenn die Datei im gleichen Ordner ist oder in einem seiner Unterordner könntest du GetCurrentDirectory benutzen.



  • hm,
    mal ne blöde Frage. Wie sieht der BCB1 eigentlcih aus ?

    Hat jemand ein Screenshot ?



  • Okay die hilfe habe ich durchforscht ... mhh da stand was von application run aber irgentwie will das nicht so richtig ... was mach ich falsch ?

    datei = "game.exe";
    
    GetCurrentDirectory;
    
    Application->Run = datei;
    

    er sagt: Member function must be called or its address taken.

    ich habe auch schon etwas rumprobiert aber nix hat geklappt 😞

    Danke für den Tipp mit "GetCurrentDirectory" 🙂 !!!

    Was du willst ein Bild vom Borland 1.0 ??? Bitte hier hast du eins. :p



  • Hi,
    erstmal lerne mit der Hilfe umzugehen!

    Was willst du mit der Zeile:
    GetCurrentDirectory;
    erreichen? Der Wert dieses Ausdrucks nimmt nach Ausführung den Wert des CurrentDirs an! Und jetzt? Merken tut sich der PC das nich von alleine!

    Und
    Application->Run = datei;
    solltest du vergessen! Schau mal in die FAQ! Da steht drin wie du Anwendungen startest!

    MfG

    Alexander Sulfrian

    PS: Funktionen die eine Parameter erwarten, werden trotzdem mit () aufgerufen! Also z.B: GetCurrentDirectory**()**;



  • AndreasW schrieb:

    hm,
    mal ne blöde Frage. Wie sieht der BCB1 eigentlcih aus ?

    Wie jeder andere BCB auch (o: Oder Delphi mmmh 2/3 (o:

    @TheGeek:
    Hier findest du Instruktionen wie mit der Hilfe umzugehen ist.

    -junix



  • @ TheGeek:

    hol dir mit Application->ExeName den Programmnamen (kpl mit LW und Pfad)

    Ersetzen mit dessen erstem Zeichen das erste Zeichen in dem Namen (kpl mit LW und Pfad) der zu oeffnenden Datei - voila!

    PS: das klapt bestens mit CDs, NICHT in Netzwerken !!!



  • Besten Dank für eure hilfe !!!

    Ich werde das erstmal alles ausprobieren ....

    🤡



  • Habe die zahlreichen Informationen durch gearbeitet ...

    So geht es 🙂 hatte den BCB 1.0 und dort kannte er die Befehle net ...

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString strTest = GetCurrentDir()+"\\game.exe"; // Verzeichnis Lesen + game.exe
    
    STARTUPINFO  StartupInfo;
        ZeroMemory( &StartupInfo, sizeof(STARTUPINFO));
        StartupInfo.cb = sizeof(STARTUPINFO);
    
        PROCESS_INFORMATION ProcessInfo;
    
        if(CreateProcess(strTest.c_str(), // CreateProcess einleiten
                         NULL,
                         NULL,
                         NULL,
                         TRUE,
                         NORMAL_PRIORITY_CLASS,
                         NULL,
                         NULL,
                         &StartupInfo,
                         &ProcessInfo))
        {
            CloseHandle(ProcessInfo.hProcess);
            CloseHandle(ProcessInfo.hThread);
        }
    }
    

Anmelden zum Antworten