Announcement

Collapse
No announcement yet.

Problem mit Shellexecute

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

  • Problem mit Shellexecute

    Hallo,

    ich suche seit 2 Tagen um eine Lösung und zwar hab ich folgende Befehlszeile in meinem C-Projekt stehen:

    Code:
    ShellExecute(hwnd, "open", "C:\\test.pdf", NULL, NULL, SW_SHOWNORMAL);
    Wenn ich also einen Button klick, soll dieser oben genannte Zeile ausführen und ein PDF auf meiner Festplatte öffnen. Wenn ich auf den Button klicke tut sich aber gar nichts.

  • #2
    Liegt diese wirklich direkt unter C:\? Hast du evtl Vista/Win7

    Comment


    • #3
      Ja ich nutze Windows 7, aber auf Windowx XP wurde es auch schon getestet.
      Hab gerade über Eingabeaufforderung c:\test.pdf eingegeben und es öffnet sich, also müsste der Pfad stimmen.


      Vielleicht hilft ja noch die Warnmeldung weiter:
      Warnung 2 warning C4133: 'Funktion': Inkompatible Typen - von 'char [5]' zu 'LPCWSTR' c:\Projekt\main.c 202 Projekt

      Comment


      • #4
        So ich hab es hingekommen und zwar hab ich folgendes geändert:

        Code:
        ShellExecute( NULL, _T("open"), _T("c:\\test.pdf"), NULL, NULL, SW_SHOWNORMAL);

        Zwei Fragen hab ich dazu aber noch:
        - Wenn ich C:\\ weglassen und die PDF ins Projekt-Verzeichniss rein tu, wieso wird es dann nicht mehr aufgerufen, sprich: _T("test.pdf")
        - Was genau bedeutet nun das _T, hab das verschiedene Ausführungen drüber gelesen.

        Comment


        • #5
          Die Parameter werden als Widestring erwartet
          Christian

          Comment


          • #6
            Gut dann hab ich nur noch 2 Fragen =)


            Code:
            ShellExecute( NULL, _T("open"), _T("test.pdf"), NULL, NULL, SW_SHOWNORMAL);
            1. Wenn die PDF-Datei im gleichen Ordner wie das Programm ist müsste der oben genannte Pfad doch stimmen, aber es geht nicht.

            2. Wenn ich eine if-Abfrage machen will, ob ShellExecute erfolgreich die PDF geöffnet hat, wie mache ich das? Hab schon paar Sachen getestet aber nix ging.

            Comment


            • #7
              zu 1: Nein. Es geht nur wenn der akutelle Arbeitspfad der Anwendung auch gleich dem Pfad der Exe ist. Das ist oft nicht der Fall (z.B. Nach Datei öffnen/speichern-Dialog auf anderen Pfad)

              zu 2: Schau in die MSDN zu ShellExecute und dort den Rückgabewert der Funktion.

              Comment


              • #8
                Originally posted by Merc View Post
                .... _T("test.pdf")....

                1. Wenn die PDF-Datei im gleichen Ordner wie das Programm ist müsste der oben genannte Pfad doch stimmen, aber es geht nicht.
                Nein. Du kannst kein relatives pfad benutzen fuer ShellExecute(). Nur ein absolutes pfad.

                Uebrigens ist es immer ab zu raten relative pfade zu benutzen. Nur absolute also.



                Wenn ich eine if-Abfrage machen will, ob ShellExecute erfolgreich die PDF geöffnet hat, wie mache ich das? Hab schon paar Sachen getestet aber nix ging.
                Und die Hilfe?

                Code:
                	HINSTANCE hinstance = ShellExecute (
                		Handle
                		, NULL
                		, FileName.c_str()
                		, NULL
                		, NULL
                		, SW_SHOWNORMAL
                		);
                
                	if ( (int )hinstance < 32 )
                		{
                
                                ShowMessage ( FileName + "\n\nBetriebsysteem ratlos mit diese datei" ); 
                		}

                Comment


                • #9
                  Ja ich sollte mehr die Hilfe benutzen und weniger die google Funktion *g*

                  Das mit der Abfrage hatte ich schon gelöst, aber trotzdem vielen Dank


                  Hmmm das Problem ist, wenn ich ein Programm hab mit ner PDF Datei und ein anderer Nutzer startet das Programm auf nem anderen PC, dann hat der das ja nicht im Pfad den ich angegeben hab.
                  Aber wenn shell execute keine relativen Pfade schluckt, muss ich mir da was anderes überlegen.

                  Comment


                  • #10
                    Originally posted by Merc View Post
                    Hmmm das Problem ist, wenn ich ein Programm hab mit ner PDF Datei und ein anderer Nutzer startet das Programm auf nem anderen PC, dann hat der das ja nicht im Pfad den ich angegeben hab
                    Natuerlich hat er dass.

                    Wenn du ein ander dein programm gibst. Und eine .pdf datei dazu. Dann sagst du doch das die pdf datei in gleichen ordner/partition/pfad muss liegen als dass program!?

                    Ab dann weisst du wie du ein absolutes pfad erstelst.

                    Comment


                    • #11
                      Hm sorry ich hab mich nun eine Stunde mit der Problemlösung befasst, weil ich nicht so recht verstanden habe was ihr genau meint.

                      Ich dachte ich müsse das Arbeitsverzeichnis mit irgendeiner Funktion herausfinden und dann ins ShellExecute einbinden. Aber das klappte auch nicht.

                      Morgen ist ein neuer Tag

                      Comment


                      • #12
                        Originally posted by Merc View Post
                        Ich dachte ich müsse das Arbeitsverzeichnis mit irgendeiner Funktion herausfinden und dann ins ShellExecute einbinden.
                        Genau! (Na ja: einbinden in filename).

                        Morgen ist ein neuer Tag
                        Wir warten gespannt ob du es findest.

                        Comment


                        • #13
                          Guten Abend

                          Also am Ende bin ich noch nicht aber ich glaube schon etwas weiter. Folgendes hab ich hinzugefügt, um den Pfad herauszubekommen:


                          Code:
                          #include <winbase.h>
                          .
                          .
                          .
                          char path[MAX_PATH];
                          .
                          .
                          .
                          GetModuleFileNameA (NULL, path, MAX_PATH);

                          Stellt sich nur die Frage, ob das richtig ist und wie ich das ins ShellExecute einbinde

                          Comment


                          • #14
                            Es gibt eine Windowsfunktion, die aus einem relativen Pfad den absoluten Pfad ermittelt.

                            Des Weiteren hast du ja nun schon die Lösung gefunden und brauch die beiden Pfade nur noch zusammenführen
                            Christian

                            Comment


                            • #15
                              Originally posted by Merc View Post
                              GetModuleFileNameA (NULL, path, MAX_PATH);


                              Stellt sich nur die Frage, ob das richtig ist
                              Dass kannst nur du uns erzähelen weil du dies ausprobierst hast und jetzt wist was du bekommen hast.

                              Nun was hast du bekommen ? Nur eine Name oder ein relatives pfad oder ein absolutes pfad? Wie sah es aus?


                              und wie ich das ins ShellExecute einbinde
                              Ich have dir schon gesagt dass mann das dann benutzt fur das aufstellen einer filename.

                              (Dass du die filename an ShellExecute() uebergibt ist weiter nicht wichtig meine ich.)

                              Comment

                              Working...
                              X