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.

Předmět Autor Datum
Pouzij puvodni proceduru a cely prikaz i s paranetrem predej najednou; ShellExecute_AndWait('vlastn…
Jan Fiala 26.12.2019 08:55
Jan Fiala
To jsem zkoušel. Přes ShellExecute jen s jedním PChar to nefunguje. Takto ok. var filename,param…
Kocap 26.12.2019 09:28
Kocap
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
Pokud nevíš, jak tam zabudovat parametry, pak si najdi funkci, která umí i parametry: function Shel…
Jan Fiala 27.12.2019 16:29
Jan Fiala

To jsem zkoušel.

Přes ShellExecute jen s jedním PChar to nefunguje.

Takto 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;

Takto ne.
ShellExecute_AndWait ('d:\ZALOHUJ DELPHI\zalohuj1\WinRAR.exe A -r -m5 "g:\111111\ARDUINO" "d:\ARDUINO\"');

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í....

To, že Ty si nevieš pozrieť štruktúru typu TSHELLEXECUTEINFO som bohužiaľ nepostrehol...

okrem lpFile...obsahuje aj lpParameters...

JaFi Ti to nižšie celé ukázal ako na to.

Pokud nevíš, jak tam zabudovat parametry, pak si najdi funkci, která umí i parametry:

function ShellExecAndWait(const FileName, Parameters, dir: string;
  CmdShow: Integer): Boolean;
var
  Sei: TShellExecuteInfo;
begin
  FillChar(Sei, SizeOf(Sei), #0);
  Sei.cbSize := SizeOf(Sei);
  Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS;
  Sei.lpFile := PChar(FileName);
  Sei.lpParameters := PChar(Parameters);
  Sei.lpdirectory := PChar(dir);
  Sei.nShow := CmdShow;
//  Εδώ έχω ένα πρόβλημα...
  Result := ShellExecuteEx(@Sei);
  if Result then
  begin
    WaitForInputIdle(Sei.hProcess, INFINITE);
    WaitForSingleObject(Sei.hProcess, INFINITE);
    CloseHandle(Sei.hProcess);
  end;
end;

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