Announcement

Collapse
No announcement yet.

Probleme mit Winexec ... Durch eine andere Funktion (oder API) ersetzen ???

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

  • Probleme mit Winexec ... Durch eine andere Funktion (oder API) ersetzen ???

    Hiho ...
    Meine Software soll Programme starten können. Allerdings scheint es Probleme mit Parameterprogrammen (naja, aber ihr wisst was ich meine ) zu geben. Folgendes Programm will ich ausführen (CounterStrike, fals das einer kennt):

    hl.exe -console -game cstrike

    Das ganze läuft auch. Das Problem scheint der letzte Parameter zu sein, da kein - davor ist ... Ich weiß nicht, wie ich das Problem lösen soll. Als Verknüfung wird das ganze sauber ausgeführt, allerdings möchte ich keine Verknüfung erstellen, weil dann der NoRun Key aus der Regestry greift ... Ich hoffe mich versteht einer und hat auch noch die passende Antwort ...

    Bis denne Hagen

  • #2
    <p>Hallo Hagen,<br>
    <br>
    benutze statt WinExec, die Procedure ShellExecute. Für Dein Problem müsste der Aufruf lauten:<br>
    <br>
    ShellExecute(Application.Handle, 'open', 'hl.exe', '-console -game cstrike', nil, SW_SHOWNORMAL);<br>
    <br>
    Eventuell musst Du den Parameter -game cstrike in doppelte Anführungszeichen setzen.<br>
    <br>
    Gruß Thomas</p&gt

    Comment


    • #3
      <p>Hallo Hagen,<br>
      <br>
      benutze statt WinExec, die Procedure ShellExecute. Für Dein Problem müsste der Aufruf lauten:<br>
      <br>
      ShellExecute(Application.Handle, 'open', 'hl.exe', '-console -game cstrike', nil, SW_SHOWNORMAL);<br>
      <br>
      Eventuell musst Du den Parameter <b>-game cstrike</b> in doppelte Anführungszeichen setzen.<br>
      <br>
      Gruß Thomas</p&gt

      Comment


      • #4
        Ok ... herzlichen Dank erstmal ... aber ich habe hiermit 2 Probleme. Woher weiß ich, ob es sich um einen Parameter handelt und nicht um eine Leerstelle im Filename. Aber das ist ein kleineres Problem. - sind glaube ich nicht in FileNames erlaub und dann kann ich die ja unterteilen. Aber woher weiß ich, welche ich zusammenfassen muss und welche nicht (mit" ") ... Ist alles nicht so einfach ... Aber das größte Problem ist glaube ich, daß ich net weiß was ich noch mit in <b>uses</b> reinschreiben muss ... ShellExecute kennt Delphi nämlich nicht (Delphi 3)

        Ciao Hage

        Comment


        • #5
          <p>Hallo Hagen,<br>
          <br>
          du musst die Unit <b>ShellApi</b> einbinden.<br>
          <br>
          Gruß Thomas</p&gt

          Comment


          • #6
            Ok danke ... Ich werde das mal versuchen, auch wenn das ein riesen Aufwand ist, die ganzen Parameter mit "" zusammenzufassen ...

            Ciao Hage

            Comment


            • #7
              <p>Hallo Hagen,<br>
              <br>
              so groß kann der Aufwand nicht sein. Als 1. würde ich es einmal ohne Anführungszeichen probieren. Sollte es damit nicht gehen, so schreibe Dir doch einfach eine Funktion, die Dir die Anführungszeichen an den String dranhängt.<br>
              <br>
              <pre>
              function AnfuehrungszeichenAnText(const aText:String):String;
              begin
              Result:='"'+aText+'"';
              end; //
              </pre>
              <br>
              Gruß Thomas</p&gt

              Comment


              • #8
                <p>Hallo Hagen,<br>
                <br>
                so groß kann der Aufwand nicht sein. Als 1. würde ich es einmal ohne Anführungszeichen probieren. Sollte es damit nicht gehen, so schreibe Dir doch einfach eine Funktion, die Dir die Anführungszeichen an den String dranhängt.<br>
                <br>
                <pre>
                function AnfuehrungszeichenAnText(const aText:String):String;
                begin
                Result:='"'+aText+'"';
                end; // AnfuehrungszeichenAnText
                </pre>
                <pre>
                procedure StarteProgramm(aDatei, aParameter:String);
                begin
                if FileExists(aDatei) then
                begin
                aParameter:=AnfuehrungszeichenAnText(aParameter);
                ShellExecute(Application.Handel, 'open', PChar(aDatei), PChar(aParameter), nil, SW_SHOWNORMAL);
                end else ShowMessage('Datei '+aDatei+' nicht gefunden');
                end; // StarteProgramm
                </pre>
                <br>
                Gruß Thomas</p&gt

                Comment


                • #9
                  Jo, so ähnlich habe ich mir das auch vorgestellt. Aber was ist, wenn ich nur den '-game cstrike' in Anführungszeichen setzen muss ... Dann wird das ganze etwas heftiger ... Ich werde erstmal eine TestReihe machen, dann kann man sich immernoch damit rumschlagen ...

                  Ciao Hage

                  Comment


                  • #10
                    Hiho ...
                    also das ganze läuft auch nicht ... Ich hab keine Ahnung warum.Ich habe einfach ein Programm mit 2 Editfeldern und nem Button gebastelt. Der Quelltext sieht so aus:
                    <br><br>
                    exe := Edit1.text;<br>
                    parameter := Edit2.text;<br>
                    ShellExecute(Application.Handle, 'open', pchar(exe), pchar(parameter), nil, SW_SHOWNORMAL);<br><br>
                    Nun habe ich in Edit1 c:\games\HalfLife\hl.exe eingetragen und in Edit2 -console -game cstrike ... Das ganze hat immernoch den alten Fehler hervorgerufen (fals es hier doch einen mit CounterStrike geben sollte, dann kann er das ja mal ausprobieren, bis zum joinen scheint alles zu klappen, aber dann ... ) Naja, aber ich bin ja nicht so leicht klein zu kriegen. Also habe ich versuche jeden Parameter einzeln in "" bzw. in '' zu setzen, aber auch da hatte ich wieder dasselbe Problem wie zuvor. Ich weiß nicht mehr was ich machen soll. Ich habe nu wirklich alles ausprobiert (soweit ich weiß) HILFE !!! Ich weiß echt keinen Rat mehr ....... <br><br>
                    Ciao Hage

                    Comment


                    • #11
                      Hallo,

                      die Funktion <b>ShellExecute</b> ist laut Win32-SDK-Hilfe nur dafür vorgesehen, eine bestimmte Operation mit einer <i>Datei</i> aufzurufen. Dabei geht Win32 davon aus, dass für diesen Datentyp (Dateiendung) eine zuständige Anwendung (EXE) im System registriert ist.

                      Anstelle der Ausnahme ShellExecute würde ich den Standardweg über die Win32-API-Funktion <b>CreateProcess</b> einschlagen, denn hier kann die ausführbare Datei sowie die Kommandozeilenargumente getrennt angegeben werden. Die Suche nach der Zeichenkette CreateProcess sollte einige Beispiele für den Einsatz finden

                      Comment


                      • #12
                        Ok ...
                        Nur leider bin ich noch nicht so der Programmierer und verstehe zum Großteil nur Bahnhof ... Es wäre nicht schlecht, wenn ich den Befehl schon fertig von Ihnen bekommen könnte (mit meinem genannten beispiel), so das ich nur noch die Werte (hl.exe etc.) durch Variablen zu ersetzen brauche. Damit wäre mir sehr geholfen ...

                        Danke im Vorraus

                        MfG Hage

                        Comment


                        • #13
                          Zusatz:

                          Ich habe den String einfach mal in eine Batch-Datei geschrieben ... Hier kommt es zum selben Fehler ...

                          MfG Hage

                          Comment


                          • #14
                            Schreib Dir doch mal eine kleine Testanwendung mit einer listbox, in Form.Show kommt dann
                            <p>
                            <pre>
                            <font size 2>
                            for i := 0 to ParamCount do
                            list.items.add(ParamStr(i)
                            </font size>
                            </pre
                            </p>
                            dann kannst Du genau sehen, was alles jeweils als ein aparameter ankommt und damit experimentieren.. übrigends nicht to ParamCount-1 weil da scheinbar ein fehler in ParamCount steckt.

                            Comment


                            • #15
                              Wie soll ich das denn jetzt verstehen ??? Ich weiß das die Anwendung die Parameter net bekommt und ich suche eine Funktion die das ganze kann. Irgentwie kann ich dein Post nicht so ganz zuordnen... Was soll ich einer Form.Show einer anderen Anwendung ??? Jetzt bin ich ganz verwirrt ... Ich hoffe ja immernoch auf Hilfe von Andreas Kosh ...

                              Ciao Hage

                              Comment

                              Working...
                              X