Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi - ShellExecute

Zdravím.
Nepomuže někdo?.

procedure TForm1.Button2Click(Sender: TObject);
begin
ShellExecute_AndWait ('c:\Windows\notepad.exe');
Beep;
end;

Procedure ShellExecute_AndWait(FileName : String);
var
exInfo : TShellExecuteInfo;
Ph : DWORD;
begin
FillChar( exInfo, Sizeof(exInfo), 0 );
with exInfo do
begin
cbSize:= Sizeof( exInfo );
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
ExInfo.lpVerb := 'open';
lpFile:= PChar(FileName);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
begin
Ph := exInfo.HProcess;
end
else
begin
ShowMessage(SysErrorMessage(GetLastError));
exit;
end;
while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(Ph);
end;

Potřebuji ale spustit soubor s parametrem.
ShellExecute(handle,'open',PChar(filename), PChar(parameters),'',SW_SHOWNORMAL);

Volat tu proceduru takto.
procedure ShellExecute_AndWait(FileName : String; parameters : String);
V proceduře je lpFile:= PChar(FileName);
Tak pod to přidam
parametr := PChar(parameters);

A ze zbytkem bych potřeboval pomoct.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Takto take ne. procedure TForm1.Button3Click(Sender: TObject); var filename,parameters:string; begi…
Kocap 27.12.2019 08:01
Kocap
Evidentne máš problém s definíciou parametrov Tvojej procedury....Predávanie konkrétnych parametrov…
pme 27.12.2019 11:26
pme
To jsem take zkoušel. Procedura si mysli že ji posilan ne jeden, ale dva parametry begin filename :…
Kocap 27.12.2019 12:06
Kocap
Si robíš srandu? nechápem prečo do premennej filename pcháš aj parametre... filename := 'd:\ZALOHUJ…
pme 27.12.2019 12:35
pme
To nejde spustit. [dcc32 Error] Unit1.pas(82): E2034 Too many actual parameters
kocap 27.12.2019 14:04
kocap
V príspevku #2 píšeš, že toto je ok: var filename,parameters:string; begin filename := 'd:\ZALOHUJ…
pme 27.12.2019 14:17
pme
Ano je to ok přes ShellExecute, ale ne přes tu funkci ShellExecute_AndWait. V te funkci je jenom jed…
kocap 27.12.2019 14:42
kocap
To, že Ty si nevieš pozrieť štruktúru typu TSHELLEXECUTEINFO som bohužiaľ nepostrehol... okrem lpFi… poslední
pme 27.12.2019 20:14
pme

Takto take ne.

procedure TForm1.Button3Click(Sender: TObject);
var
filename,parameters:string;
begin
filename := 'd:\ZALOHUJ DELPHI\WinRAR\WinRAR.exe ';
parameters := 'A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"';
ShellExecute_AndWait (filename + parameters);
beep;
end;

Evidentne máš problém s definíciou parametrov Tvojej procedury....Predávanie konkrétnych parametrov premenných Ti tiež robí problémy...

Týmto si myslel akože konkrétne čo?
ShellExecute_AndWait (filename + parameters); //to si chcel spojiť 2 stringy do jedného ??? znamienko + plus ???

Ak máš Tvoju procedúru definovanú takto: procedure ShellExecute_AndWait(FileName : String; parameters : String);
...

potom musíš volať procedúru takto: ShellExecute_AndWait (filename , parameters); parametre predávaš znamienkom , a nie +....

To jsem take zkoušel.
Procedura si mysli že ji posilan ne jeden, ale dva parametry

begin
filename := 'd:\ZALOHUJ DELPHI\zalohuj1\WinRAR.exe A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"';
parameters := 'A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"';
ShellExecute_AndWait(FileName,parameters);
end;

[dcc32 Error] Unit1.pas(82): E2034 Too many actual parameters

Si robíš srandu?
nechápem prečo do premennej filename pcháš aj parametre...

filename := 'd:\ZALOHUJ DELPHI\zalohuj1\WinRAR.exe A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"';

skús to takto:

filename := 'd:\ZALOHUJ DELPHI\zalohuj1\WinRAR.exe';
parameters := 'A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"';

V príspevku #2 píšeš, že toto je ok:

var
filename,parameters:string;
begin
filename := 'd:\ZALOHUJ DELPHI\zalohuj1\WinRAR\WinRAR.exe';
parameters := 'A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"';
ShellExecute(handle,'open',PChar(filename), PChar(parameters),'',SW_SHOWNORMAL);
end;

čiže niečo, niekde robíš zle a nikto okrem Teba Ti do PC nevidí....

Zpět do poradny Odpovědět na původní otázku Nahoru