Announcement

Collapse
No announcement yet.

Problem mit Shellexecute

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Also mittlerweile bin ich sehr viel weiter gekommen. Ich hab durch GetModuleFileNameA den Pfad ermittelt, dann hab ich aus den \, zwei \\ gemacht, damit der Pfad auf korrekt ist und das ganze in eine Variable namens pfad gesteckt.

    Wenn ich jetzt aber die Variable mit dem korrekten Pfad z.B. c:\\projekt\\test.pdf in die ShellExecute einbinde geht es nicht.

    Code:
    ShellExecute( NULL, _T("open"), (pfad), NULL, NULL, SW_SHOWNORMAL);
    In mehreren Foren hab ich glaub gelesen, dass man da c_str() einbauen soll, aber das geht ja nur in C++ und ich programmiere in C.

    Kann mir da noch jemand weiterhelfen?

    Comment


    • #17
      Originally posted by Merc View Post
      ,,,Ich hab durch GetModuleFileNameA den Pfad ermittelt, dann hab ich aus den \, zwei \\ gemacht, damit der Pfad auf korrekt ist
      Damit hast du es unbrauchbar gemacht. Wenn GetModuleFileNameA ein \ liefert ( und dass tut sie) dann must dass so lassen.


      und das ganze in eine Variable namens pfad gesteckt.
      Und was ist der Typ diese Variabele?

      Code:
      ShellExecute( NULL, _T("open"), (pfad), NULL, NULL, SW_SHOWNORMAL);
      Dass ist fremd: dus hast doch vorher gesagt: "ShellExecute( NULL, _T("open"), _T("c:\\test.pdf"), NULL, NULL, SW_SHOWNORMAL);", also weshalb jetzt eine _T weggelassen?


      In mehreren Foren hab ich glaub gelesen, dass man da c_str() einbauen soll, aber das geht ja nur in C++ und ich programmiere in C.
      Dass scheint mir Unsinn,

      Kann mir da noch jemand weiterhelfen?
      Wir versuchen es. Dein Problem ist bekant und einfach loesbar.

      Aber welhalb post du hier nicht deine volstaendige code. Mit das herumreden kommt du jetzt nicht weiter. Lass exact sehen was du probierst hast bitte,

      Comment


      • #18
        Schlaft ihr nie?
        Christian

        Comment


        • #19
          Erst wenn das Programm fertig ist


          Kurze Erklärung zum Programm:
          GetModuleFileNameA ermittelt den Pfad des Programmes inkl. der Projekt.exe, welche das Programm startet.
          Mein Programm ermittelt also den Pfad und ändert am Ende dann Projekt.exe in Hilfe.pdf um.
          Außerdem ermittle ich alle \ in meinem Pfad und ersetze sie durch 2 \\, da in C ja die Pfade immer mit 2 \\ angegeben werden müssen.


          Code:
          char path[MAX_PATH];
          char gesamtpfad[600];
          char hilfe[] = {"hilfe.pdf"};
          int i=0, j=0;
          
          
          GetModuleFileNameA(NULL, path, MAX_PATH); 
          memset(gesamtpfad,'\0',600);
          
          
          while (path[j] != '\0')
          {
          
          		// Projekt.exe nicht in den neuen Pfad aufnehmen
          		if ((path[j]=='P')&&(path[j+1]=='r')&&(path[j+2]=='o')&&(path[j+3]=='j')&&(path[j+4]=='e')&&
          			(path[j+5]=='k')&&(path[j+6]=='t')&&(path[j+7]=='.')&&
          			(path[j+8]=='e')&&(path[j+9]=='x')&&(path[j+10]=='e'))
          		{
          			j = j+11;
          		}
          
          		gesamtpfad[i]=path[j];
          		i++;
          	
          		// Doppelter Backslash hinzufügen
          		// 0x5C = ASCII für Backslash
          		if (path[j] == (0x5C))
          		{
          			gesamtpfad[i] = (0x5C);
          			i++;
          		}
          	j++;
          }
          
          // Hilfe.pdf zum Pfad hinzufügen
          strcat(gesamtpfad, hilfe);
          
          
          // Aufruf des PDF
          ShellExecute( NULL, _T("open"),  gesamtpfad,  NULL, NULL, SW_SHOWNORMAL);

          Wie gesagt, der ShellExecute Aufruf funktioniert nicht.

          Comment


          • #20
            Sorry, aber was ist das??

            Wenn du schon nicht die Möglichkeiten des C++Builders nutzt, dann schau dir wenigstens die Stringfunktionen der Standard C Lib an

            http://www2.hs-fulda.de/~klingebiel/c-stdlib/string.htm

            Des Weiteren ist

            Wie gesagt, der ShellExecute Aufruf funktioniert nicht.
            kein Fehler.

            Frage den Rückgabewert ab!!
            Christian

            Comment


            • #21
              Der Rückgabewert von ShellExecute ist:
              2 Die Datei wurde nicht gefunden.

              Comment


              • #22
                Dann wirst du wohl den Dateinamen falsch zusammengebaut haben. Was steht den in gesamtpfad drin? Was gibt der Debugger an der Stelle aus?
                Christian

                Comment


                • #23
                  0x0018f838 "c:\\Users\\xxx\\Desktop\\Projektv2\\Debug\\Help.p df"


                  Und wenn ich die if-Funktion weglasse:
                  0x0018f838 "c:\Users\xxx\Desktop\Projektv2\Debug\Help.pdf "

                  Comment


                  • #24
                    Und, im ersten Fall ist ein Leerzeichen bei p df und ein paar \ zuviel

                    Und liegt da die Datei?
                    Christian

                    Comment


                    • #25
                      Errorcode 2 = Das System kann die Datei nicht finden. Der Pfad scheint zu stimmen.
                      Christian

                      Comment


                      • #26
                        Nene zitiere mal mein Beitrag. Das pd f sieht nur so aus. Das Forum hier stellt das irgendwie falsch dar, aber es ist kein Leerzeichen ^^

                        c:\\Projektv2\\Debug\\Hilfe.pdf"
                        c:\Projektv2\Debug\Hilfe.pdf"


                        Die beiden Varianten hab ich. Ich hab keine Ahnung wieso das Forum hier das pdf nicht richtig darstellt, aber da ist wirklich kein Leerzeichen


                        Wenn ich c:\Projektv2\Debug\Hilfe.pdf in den WindowsExplorer kopiere wird das PDF auch direkt geöffnet. Nur mein Programm tut das nicht.



                        PS: Hab den Pfad in c:\Projektv2\Debug\Hilfe.pdf geändert. Tut zwar immernoch nicht, aber einfacherer Pfad.
                        Zuletzt editiert von Merc; 28.11.2009, 12:38.

                        Comment


                        • #27
                          Originally posted by Merc View Post
                          Mein Programm ermittelt also den Pfad und ändert am Ende dann Projekt.exe in Hilfe.pdf um.
                          Prima.

                          Außerdem ermittle ich alle \ in meinem Pfad und ersetze sie durch 2 \\, da in C ja die Pfade immer mit 2 \\ angegeben werden müssen.
                          Ich habe dich schon gesagt dass dies Unsinn is. Du verwechselst sourcecode und runtime data.

                          Wenn du in deine sourcecode ein pfad eingeben willst und das pfad enthaelt backslashes dann must dus jeder backslasch verdopplen.

                          char filename[] = "C:\\Mydir\\test.pdf";

                          Weil \ das escapezeichen is musst du dass tun. Der compiler macht dan von \\ eine \ so dass in der executable datei nur immer eine \ steht.

                          GetModuleFileNameA() liefert immer eine \ weil immers der \ das scheidungszeigen von Ordners is.



                          Code:
                          char path[MAX_PATH];
                          char gesamtpfad[600];
                          600? dafuer gibt es eben MAX_PATH

                          Code:
                          char hilfe[] = {"hilfe.pdf"};
                          char hilfe[] = "hilfe.pdf";




                          Code:
                          // Aufruf des PDF
                          ShellExecute( NULL, _T("open"),  gesamtpfad,  NULL, NULL, SW_SHOWNORMAL);

                          Wie gesagt, der ShellExecute Aufruf funktioniert nicht.
                          Vergesst du nicht eine _T() ?

                          ShellExecute( NULL, _T("open"), _T(gesamtpfad), NULL, NULL, SW_SHOWNORMAL);


                          Uebrigens bist du jetzt schon zu lang mit dieses problem beshaeftigt denke ich.

                          Die einfache weg ist:
                          AnsiString FileName = ExtractFilePath(ParamStr(0)) + "hilfe.pdf";

                          Damit ist der filename fertig.

                          Nun must du sie an ShellExecute uebergeben. Aber anscheinend benutzt du eine moderne c++builder
                          wobei die strings jezt unicodestrings sind. Es kann sein dass _T() dabei hilft. Ich kann dich dabei nicht helfen weil ich diese neue version nicht besitze.
                          Zuletzt editiert von Hans G; 28.11.2009, 14:59.

                          Comment


                          • #28
                            Originally posted by Christian Marquardt View Post
                            Errorcode 2 = Das System kann die Datei nicht finden. Der Pfad scheint zu stimmen.

                            ???? Dann stimmt das Pfad eben NICHT!

                            Erklaere bitte.

                            Comment


                            • #29
                              Was sollte ich daran erklären?

                              errorcode =2 Datei nicht zu finden
                              errorcode =3 Pfad nicht zu finden
                              Christian

                              Comment


                              • #30
                                Originally posted by Christian Marquardt View Post
                                Was sollte ich daran erklären?

                                errorcode =2 Datei nicht zu finden
                                errorcode =3 Pfad nicht zu finden
                                Wie es moeglich ist dass ein pfad stimmt und der datein wirklich am ende des pfad liegt und trotzdem nicht gefunden wird.

                                Comment

                                Working...
                                X