
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.
Takto take ne.
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
[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\"';
To nejde spustit.
[dcc32 Error] Unit1.pas(82): E2034 Too many actual parameters
V príspevku #2 píšeš, že toto je ok:
čiže niečo, niekde robíš zle a nikto okrem Teba Ti do PC nevidí....
Ano je to ok přes ShellExecute, ale ne přes tu funkci ShellExecute_AndWait.
V te funkci je jenom jedno lpFile:= PChar(FileName);
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.