Befehl zum öffnen eines anderen Programms



  • Nein kein Buch sondern Lehrer...:D
    Und ich mache die Ausbildung jetzt seit 2 Monaten.
    Ich denke das der Lehrer uns nur zeigt was alles geht
    deshalb die globalen Variablen.

    Was meinste denn damit?

    Oh, hdda klingt dann doch ein wenig unwindowsig.

    und bei dem Befehl system sagt er mir das der nicht deklariert ist...



  • Als Fachinformatiker solltest Du Dir aber ganz schnell die richtigen Begrifflichkeiten aneignen. Ein Programm öffnet man nicht, sondern man führt es aus. Und was meinst Du mit "Festplatte A: öffnen"?

    Überhaupt werden Festplatten nur unter Windows mit Buchstaben bezeichnet. Aber ich fürchte, dass ein Fachinformatiker eher ein Spezialist für ein Betriebssystem eines einzelnen Herstellerst ist. So ist die Welt halt.



  • Hi

    Als Fachinformatiker solltest Du Dir aber ganz ....

    Fachinformatiker???
    Ich bin seit 2 Monaten in der Ausbildung zu einem Informatiker.
    Meinste ich bin mit einem Buch zum beispuiel IT-Systeme zur Welt gekommen?
    Ganz sicher nicht und du auch nicht also erzähl mir bitte kein Qutsch.
    Auf meine Fragen hast du auch nicht geantwortet daher war dein Kommentar völlig fehl am Platz
    Danke für nichts tntnet....



  • tntnet schrieb:

    Als Fachinformatiker solltest Du Dir aber ganz schnell die richtigen Begrifflichkeiten aneignen. Ein Programm öffnet man nicht, sondern man führt es aus.

    Ach, manchmal öffne ich sie auch.

    tntnet schrieb:

    Und was meinst Du mit "Festplatte A: öffnen"?

    Ist im Kontext auch völlig klar.
    Ah, im Code steht, daß er Windows benutzt.

    tntnet schrieb:

    Überhaupt werden Festplatten nur unter Windows mit Buchstaben bezeichnet.

    Komisch. Ist /dev/hda sehr unbuchstabig? Im Code das hdda sah fast so aus.

    Ich schiebs mal nach WinApi, damit ihm jemand ShellExecute vorschlagen kann. Damit kriegt man auch prima Festplatten auf.



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • chewee schrieb:

    Hi

    Als Fachinformatiker solltest Du Dir aber ganz ....

    Fachinformatiker???
    Ich bin seit 2 Monaten in der Ausbildung zu einem Informatiker.
    Meinste ich bin mit einem Buch zum beispuiel IT-Systeme zur Welt gekommen?
    Ganz sicher nicht und du auch nicht also erzähl mir bitte kein Qutsch.
    Auf meine Fragen hast du auch nicht geantwortet daher war dein Kommentar völlig fehl am Platz
    Danke für nichts tntnet....

    Ach bitte schön. Gern geschehen. Und Danke für Deine "freundliche" Antwort.

    Was ich mit meinem Kommentar erreichen wollte, war eigentlich eine Anregung, mal darüber nachzudenken. Ich bin selbst Linux-Anwender und finde es einfach schade, dass sich solche Windows-Denkweisen eingebürgert haben. Noch immer habe ich die Hoffnung nicht aufgegeben, dass wenigstens ein Informatiker mal lernt, dass es neben Windows noch was anderes gibt. Es war einfach ein Tipp, aber wenn Du das als "nichts" ansiehst und beleidigt bist, wenn ich auf Deine Frage nicht antworte, dann tut mir das leid.



  • Mir ist durchaus bewusst das es noch andere Betriebssysteme gibt.
    Aber ich habe diese anwendung ja für mich geschrieben
    und ich benutze hier zuhause nun mal windows
    da bringt es mir nichts das ich weiß wie die festplatte bei linux heißt.

    So zurück zum Thema:

    Ich habe es jetzt hinbekommen
    allerdings nur dur neuinstallation von firefox
    der installatinspfad darf keine leerzeichen enthalten.
    Hat jemand ne Ahnung wie ich dem Kompiler klar machen kann das nach dem Leerzeichen bei C:\Program (x86)\.... noch nicht zu ende ist?



  • Den Aufruf in Hochkommata einfassen.



  • Den Aufruf in Hochkommata einfassen.

    Wie meinst du das?
    Ich habe es einmal so probiert:

    system("start 'C:/Program/Mozilla/firefox.exe'");
    

    so:

    system'("start C:/Program/Mozilla/firefox.exe")';
    

    und so:

    'system("start C:/Program/Mozilla/firefox.exe'")';
    

    funktioniert alles nicht



  • 1. Verwende SHellExecute
    2. Pfad-Trenner ist \
    2. Bist Du sicher, dass es den Pfad gibt?



  • Achso so \ und nich so / is klar:D
    nur falsch abgetippt...
    Ja den Pfad gibt es auf jeden fall.
    Hmm Shellexecutor klingt nach was neues (für mich)
    deswegen lass ich das erstmal.
    Wird in der Ausbildung sicherlich noch ran kommen.
    Wär nett wenn "DocShoe" nochmal weiter auf sein kommentar eingehen würde.



  • Ein Backslash \ in einem C Source Code (z.b. in Strings) wird für gewöhnlich als "\" verwendet.
    Also so:

    "C:\\Program\\Mozilla\\firefox.exe"
    

    HTH,
    Martin

    Übrigens, wie hast Du es geprüft, ob der Pfad tatsächlich da ist?
    Weil der Pfad "C:\Program\..." gibt es genau so nämlich nicht (jedenfalls nicht bei default Windows Installationen) 🕶



  • Mmacher schrieb:

    Übrigens, wie hast Du es geprüft, ob der Pfad tatsächlich da ist?
    Weil der Pfad "C:\Program\..." gibt es genau so nämlich nicht (jedenfalls nicht bei default Windows Installationen)

    Ne den Ordner hab ich extra angelegt.

    system("start A:\bla bla\LuH.exe");
    

    so sieht jetzt der Versuch aus, leider vergebens.

    Und das ist die Fehlermeldung:

    "A:◘la" konnte nicht gefunden werden.Stellen Sie sicher.....



  • Hallo chewee,

    so hat es keinen Sinn.
    Wir wissen nicht, wie Deine Pfade aussehen. Also die genaue Bezeichnung des angelegten Pfads. Und die genaue Bezeichnung des Strings in Deinem Source-Code.

    Am besten, poste nochmal Deinen Code (letzter Stand) hierher. Dann sehen wir wie Du versuchst auf den Pfad zuzugreifen.
    Übrigens: Bitte kopiere den Pfad rein, nicht abtippen! Wir sind schon so oft auf solche banalen Anfängerfehler reingefallen.

    chewee schrieb:

    "A:◘la" konnte nicht gefunden werden.Stellen Sie sicher.....

    Das ist für mich ein klarer Hinweis darauf, daß Du meinen Text vorhin nicht richtig gelesen hast!
    Nochmal die Preisfrage: Wie gebe ich als C-Programmierer den Backslash in den String ein? 😡

    Martin



  • So...

    #include<iostream>
    #include <stdlib.h>
    using namespace std;
    char w;
    void openfirefox()
    {
        [b]system("start A:\bla bla\LuH.exe");[/b]
    }
    
    void openhddA()
    {
        system("start A:");
    }
    
    void openhddG()
    {
        system("start G:");
    }
    
    int main()
    {
        while(w!='4')
        {
            cout << "\n\tHallo Nico\n";
            cout << "Was moechtest du tun? \n";
            cout << "(1) Firefox oeffnen...\n";
            cout << "(2) Festplatte A: oeffnen...\n";
            cout << "(3) Externe Festplatte oeffnen...\n";
            cout << "(4) Beenden!\n\t";
            cin  >> w;
            switch(w)
            {
                case '1':
                    openfirefox();
                    break;
                case '2':
                    openhddA();
                    break;
                case '3':
                    openhddG();
                    break;
                case '4':
                    cout <<"\n\tAuf Wiedersehen!\n";
                    break;
            }
        }
    
    }
    

    und das was Fett gedruckt ist da steht

    system("start A:\bla bla\LuH.exe");
    

    und bei "bla bla" ist ein Leerzeichen.
    Und wenn ich das Prog ausführen will und ich die nummer 1 eintippe
    kommt ein fenster mit der Fehlermeldung:

    "A:◘la" konnte nicht gefunden werden.Stellen Sie sicher.....

    Nun leider lassen sich manche Pfade nicht mehr ändern ohne Neuinstallation.
    Also wie sage ich dem Kompiler das bei dem Leerzeichen nicht schluss ist sondern erst wenn die Zeile zuende ist oder so?



  • chewee schrieb:

    system("start A:\bla bla\LuH.exe");
    

    system("start \"A:\*bla bla\*LuH.exe\"**");

    Escape-Sequenz



  • system("start \"A:\*bla bla\*LuH.exe\"**");



  • basics schrieb:

    chewee schrieb:

    system("start A:\bla bla\LuH.exe");
    

    system("start \"A:\*bla bla\*LuH.exe\"**");

    Escape-Sequenz

    Das klappt nicht



  • chewee schrieb:

    Das klappt nicht

    du Ärmster!



  • Nun, Leerzeichen in einem Pfad ist eine zusätzliche Fehlerquelle.

    Also, am besten ist es, Du legst Dir einen Pfad OHNE Leerzeichen an.
    Und berichte hier ob es erfolgreich war.
    (ich habe schon gelesen, daß Du keine Pfade ändern kannst, aber um Deine Fehlerquellen einzugrenzen, lege bitte zum Testen einen Pfad ohne Leerzeichen an, z.B. "C:\Testpfad\").

    So, und in Deinem Code lese ich:

    system("start A:\bla bla\LuH.exe");
    

    Das ist falsch, wieso hast Du meinen Hinweis mit dem Backslash nicht ernstgenommen?
    Weißt Du überhaupt was ein Backslash ist?
    Ich wiederhole nochmal (und zwar zum letzten Mal!): Ein Backslash mußt Du unbedingt als Escape-Sequenz \\ in einem C-String eingeben, also doppelt!
    Nun zurück zu meinem oben vorgeschlagenen Testpfad, so muß es aussehen:

    system("start A:\\Testpfad\\LuH.exe");
    

    Ich selbst werde das nicht prüfen, weil ich die Funktion system() noch nie benutzt habe und wohl auch nie benutzen werde (dafür gibt es bessere Funktionen in Win-API, aber das ist eine andere Geschichte)

    So, nun zum Knackpunkt "Pfad mit Leerzeichen":
    In vielen Situationen müssen Pfade und/oder Dateinamen, die ein Leerzeichen enthalten, explizit in doppelten Anführungszeichen gesetzt werden.
    Da sonst nicht eindeutig klar ist ob das Leerzeichen noch zum Datei-/Pfadnamen gehört oder ob es der Beginn eines neuen Arguments an der Kommandozeile einleitet.

    Hinweis: Doppelte Anführungszeichen " innerhalb des C-Strings müssen auch als Esqape-Sequenz eingegeben werden wie beim Backslash!

    HTH,
    Martin


Anmelden zum Antworten