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

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