![]() |
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:
nicht mehr ausführen.
ShellExecute(0, Nil, PChar('makeAVIS.exe'), Nil, Nil, SW_NORMAL);
Wie kann ich die EXE trotzdem öffnen? |
Re: Nach opendialog kein ShellExecute mehr... wieso?
Musst die Eigenschaft ofNoChangeDir des OpenDialogs True setzen:
Delphi-Quellcode:
OpenDialog1.Options.ofNoChangeDir := True;
|
Re: Nach opendialog kein ShellExecute mehr... wieso?
lol und wie binde ichs ein... bekomme nur fehlermeldungen...
Delphi-Quellcode:
hmm oder ich kopier die exe nach C:\ im install programm. Somit kann ich den Pfad angeben.
//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; |
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? |
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:
Ansonsten rate ich dir immer den gesamten Pfad anzugeben:
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;
Delphi-Quellcode:
Chris
ShellExecute(self.Handle, 'open', PChar(ExtractFilePath(Application.ExeName) + 'datei.exe'), nil, nil, SW_SHOW);
|
Re: Nach opendialog kein ShellExecute mehr... wieso?
Anstelle von
Delphi-Quellcode:
ist es besser
...ExtractFilePath(Application.ExeName)...
Delphi-Quellcode:
zu verwenden.
ParamStr(0)
|
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. |
Re: Nach opendialog kein ShellExecute mehr... wieso?
Zitat:
|
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 |
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);
|
Re: Nach opendialog kein ShellExecute mehr... wieso?
Zitat:
|
Re: Nach opendialog kein ShellExecute mehr... wieso?
Zitat:
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. |
Re: ShellExecute startet das Programm nicht...
Ich kann es vom Ordner starten... Ich mach mal ne Verknüpfung...
Aus führen in
Code:
steht bei der Verknüpfung. Soll ich den Pfad statt Nil angeben?
C:\DRP\decodefix100
Delphi-Quellcode:
Bringt auch nichts ...
begin
ShellExecute(0, 'C:\DRPEncFiles\', PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), 'C:\DRPEncFiles\', 'C:\DRPEncFiles\', SW_NORMAL); end; |
Re: ShellExecute startet das Programm nicht...
Code:
ich weiss zwar jetzt nicht, was Du genau startest.
ShellExecute(0, Nil, PChar('makeAVIS.exe'), Nil, Nil, SW_NORMAL);
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. |
Re: ShellExecute startet das Programm nicht...
Delphi-Quellcode:
... darum gehts jetzt. makeAVIS läuft nun. DVD2AVIDRPEnc.exe aber nicht...
ShellExecute(0, Nil, PChar('C:\DRPEncFiles\DVD2AVIDRPEnc.exe'), Nil, Nil, SW_NORMAL);
|
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 .. |
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; |
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; |
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