Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ShellExecute startet das Programm nicht... (https://www.delphipraxis.net/16740-shellexecute-startet-das-programm-nicht.html)

DRPEnc 22. Feb 2004 17:54


ShellExecute startet das Programm nicht...
 
Ich hab ein Problem! In meinem Programm kann man mit Opendialoge pfade bestimmen.
Sobald ich einen ausgeführt hatte kann ich folgenden Befehl:
Delphi-Quellcode:
ShellExecute(0, Nil, PChar('makeAVIS.exe'), Nil, Nil, SW_NORMAL);
nicht mehr ausführen.

Wie kann ich die EXE trotzdem öffnen?

Wheelie 22. Feb 2004 18:09

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Musst die Eigenschaft ofNoChangeDir des OpenDialogs True setzen:

Delphi-Quellcode:
OpenDialog1.Options.ofNoChangeDir := True;

DRPEnc 22. Feb 2004 18:27

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
lol und wie binde ichs ein... bekomme nur fehlermeldungen...

Delphi-Quellcode:
//Open supported files
procedure TForm6.Button3Click(Sender: TObject);
begin
If Not OpenDialog1.Execute Then Exit;

Close;
//Debug
form1.edit1.text:='  ' + '"' + OpenDialog1.FileName + '"'
//OpenDialog1.Options.ofNoChangeDir:= True;

end;
hmm oder ich kopier die exe nach C:\ im install programm. Somit kann ich den Pfad angeben.

Die Muhkuh 22. Feb 2004 18:32

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Verrat mir mal wie das gehen soll.

Du beendest das Programm und dann soll es noch was ausführen?

CalganX 22. Feb 2004 18:36

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Hi,
@Spider: dem Formularnamen nach, beendet er nicht das Programm, sondern nur ein Formular.

@DRPEnc:
Versuchs mal so:
Delphi-Quellcode:
OpenDialog1.Options := OpenDialog1.Options + [ofNoChangeDir];
if OpenDialog1.Execute then begin
  Form1.Edit1.Text := OpenDialog1.FileName;
  // hier kannst du dann noch was Ausführen oder so...
  Close;
end;
Ansonsten rate ich dir immer den gesamten Pfad anzugeben:
Delphi-Quellcode:
ShellExecute(self.Handle, 'open', PChar(ExtractFilePath(Application.ExeName) + 'datei.exe'), nil, nil, SW_SHOW);
Chris

Matze 22. Feb 2004 18:37

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Anstelle von

Delphi-Quellcode:
...ExtractFilePath(Application.ExeName)...
ist es besser

Delphi-Quellcode:
ParamStr(0)
zu verwenden.

Die Muhkuh 22. Feb 2004 18:39

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
@Chris,


seit wann kann ein geschlossenes Formular noch Code ausführen? Mit visible oder Hide ja aber net wenns zu ist.

MathiasSimmack 22. Feb 2004 18:57

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Zitat:

Zitat von Matze
Anstelle von

Delphi-Quellcode:
...ExtractFilePath(Application.ExeName)...
ist es besser

Delphi-Quellcode:
ParamStr(0)
zu verwenden.

Willst du damit sagen: "ExtractFileName(Application.ExeName)" ist mit "paramstr(0)" identisch? Oder willst du darauf hinaus, dass man anstelle von "Application.ExeName" "paramstr(0)" nehmen soll? Ich tippe mal auf letzteres und halte dir vor, dass das das (:shock:) gleiche ist. Hinter "Application.ExeName" steckt auch bloß "paramstr(0)". Der Vorteil bei letzterem ist allerdings, dass du für nonVCL- und Konsolenprogramme nicht umdenken musst, weil es da ja das TApplication-Objekt nicht gibt.

Matze 22. Feb 2004 19:00

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
:duck:

Ich meinte das 2.
Ich habe hier mal gelesen, dass ParamStr(0) besser wäre, dann stimmt das wohl nicht. :oops:

Sorry

DRPEnc 22. Feb 2004 19:08

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Hmm k, ich hab einen festen Ordner nun, in dem sich die Exe befindet.
Nun will ich auch DVD2AVI durch mein app öffnen. Auch ne exe, nur öffnet sich die nicht obwohl ich den Pfad angegeben hatte...

Delphi-Quellcode:
ShellExecute(0, Nil, PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), Nil, Nil, SW_NORMAL);

Wheelie 22. Feb 2004 19:55

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Zitat:

Zitat von DRPEnc
lol und wie binde ichs ein... bekomme nur fehlermeldungen...

Delphi-Quellcode:
//Open supported files
procedure TForm6.Button3Click(Sender: TObject);
begin
If Not OpenDialog1.Execute Then Exit;

Close;
//Debug
form1.edit1.text:='  ' + '"' + OpenDialog1.FileName + '"'
//OpenDialog1.Options.ofNoChangeDir:= True;

end;
hmm oder ich kopier die exe nach C:\ im install programm. Somit kann ich den Pfad angeben.

ich weiß nicht warum ihr euch das so unheimlich schwer macht :roll: du musst hier auch nix "einbinden" sondern einfach nur die o.g. eigenschaft des opendialogs im objektionspektor verändern!

stoxx 22. Feb 2004 19:57

Re: Nach opendialog kein ShellExecute mehr... wieso?
 
Zitat:

Zitat von DRPEnc
Hmm k, ich hab einen festen Ordner nun, in dem sich die Exe befindet.
Nun will ich auch DVD2AVI durch mein app öffnen. Auch ne exe, nur öffnet sich die nicht obwohl ich den Pfad angegeben hatte...

Delphi-Quellcode:
ShellExecute(0, Nil, PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), Nil, Nil, SW_NORMAL);

ich kenn jetzt das programm nicht, deswegen kann ich es auch nicht testen,
Aber eventuell braucht das programm das Ausführungsverzeichnis in den parametern von Shellexecute (wo bei Dir überall noch nil drin steht)

schau mal auf die verknüpfung auf dem Desktop, wie es gestartet wird, oder ob eventuell sogar parameter nötig sind.

DRPEnc 22. Feb 2004 19:59

Re: ShellExecute startet das Programm nicht...
 
Ich kann es vom Ordner starten... Ich mach mal ne Verknüpfung...
Aus führen in
Code:
C:\DRP\decodefix100
steht bei der Verknüpfung. Soll ich den Pfad statt Nil angeben?

Delphi-Quellcode:
begin
ShellExecute(0, 'C:\DRPEncFiles\', PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), 'C:\DRPEncFiles\', 'C:\DRPEncFiles\', SW_NORMAL);
end;
Bringt auch nichts ...

stoxx 22. Feb 2004 20:04

Re: ShellExecute startet das Programm nicht...
 
Code:
ShellExecute(0, Nil, PChar('makeAVIS.exe'), Nil, Nil, SW_NORMAL);
ich weiss zwar jetzt nicht, was Du genau startest.
Aber Du solltest wissen, dass Dein Aufruf

makeAVIS.exe immer in dem Pfad die EXE Datei sucht, welchen Du in einer Windows Verknüpfung eingetragen hast.

Wenn dort also ausführen in: s C:\ steht, dann wird c:\makeAVIS.exe gesucht.
Wenn Du die Exe direkt im Ordner doppel klickst, dann liefert 'makeAVIS.exe' zufällig den richtigen Pfad.
Auch unter Delphi.
Du solltest also immer paramstr(0) verwenden. bzw ExtractFilepath(paramstr(0));
aufpassen auch bei der Funktion GetCurrentDir, die liefert auch das Verzeichnis, was in der Verknüpfung eingetragen ist.

DRPEnc 22. Feb 2004 20:05

Re: ShellExecute startet das Programm nicht...
 
Delphi-Quellcode:
ShellExecute(0, Nil, PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), Nil, Nil, SW_NORMAL);
... darum gehts jetzt. makeAVIS läuft nun. DVD2AVIDRPEnc.exe aber nicht...

stoxx 22. Feb 2004 20:06

Re: ShellExecute startet das Programm nicht...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
begin
ShellExecute(0, 'C:\DRPEncFiles\', PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), 'C:\DRPEncFiles\', 'C:\DRPEncFiles\', SW_NORMAL);
end;


ich würde Dich bitten, die Aufrufkonvention von Shellexecute nochmal genauer zu studieren, und nicht einfach wild was eintragen, in der Hoffnung, dass es funktioniert

siehe Bild ..

DRPEnc 22. Feb 2004 20:12

Re: ShellExecute startet das Programm nicht...
 
Sorry, bin Anfänger ...

Damit gehts auch nicht:

Delphi-Quellcode:
function WinExec32AndWait(const Cmd: string; const CmdShow: Integer): Cardinal;
var
  sui : TStartupInfo;
  pi : TProcessInformation;
begin
  Result := Cardinal($FFFFFFFF);
  ZeroMemory(@sui,sizeof(TStartupInfo)); sui.cb := SizeOf(TStartupInfo);
                                         sui.dwFlags := STARTF_USESHOWWINDOW;
                                         sui.wShowWindow := CmdShow;

  if(CreateProcess(nil,pchar(Cmd),nil,nil,False,NORMAL_PRIORITY_CLASS,nil,nil,sui,pi)) then
    begin
      WaitForInputIdle(pi.hProcess, INFINITE);
      if(WaitForSingleObject(pi.hProcess, INFINITE) = WAIT_OBJECT_0) then
        begin
          {$IFDEF DELPHI3}
          if not GetExitCodeProcess(pi.hProcess, Integer(Result)) then
          {$ELSE}
          if not GetExitCodeProcess(pi.hProcess, Result) then
          {$ENDIF DELPHI3}
            Result := Cardinal($FFFFFFFF);
        end;
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    end;
end;

procedure TForm6.GroupBox3Click(Sender: TObject);
var ChildExitCode: Cardinal;
begin
  ChildExitCode := WinExec32AndWait('"C:\DRPEncFiles\DVD2AVIDRPEnc.exe"', SW_NORMAL);
  if ChildExitCode = $FFFFFFFF then
     ShowMessage('Delphi 6 konnte nicht gestartet werden.');
end;

stoxx 22. Feb 2004 20:19

Re: ShellExecute startet das Programm nicht...
 
Es muss gehen ! :-)

Guck Dir bitte nochmal die Parameter an, mit der die Exe gestartet werden muss eventuell !
funktioniert denn ein einfacher doppelklick auf diese Exe Datei ?
probier mal das hier:


Code:
procedure starten;
var pfad : string;
    cmd, par, fil, dir: PChar;
begin
pfad := 'C:\DRPEncFiles\DVD2AVIDRPEnc.exe';

 if fileexists (pfad) then
   begin

     cmd := PChar('open');
     fil := PChar(pfad);
     par := nil;
     Dir := PCHAR(  ExtractfilePath(pfad) );
     Shellexecute(0, cmd, fil, par, dir, SW_SHOWNORMAL);
   end else
   showmessage('Datei nicht vorhanden !');
end;

DRPEnc 22. Feb 2004 20:24

Re: ShellExecute startet das Programm nicht...
 
Nun läuft alles... hatte den Button mit dem Befehl nicht verknüpft. Mir ist irgendwie Groupbox.Click untergekommen :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz