
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.
Pokud nevíš, jak tam zabudovat parametry, pak si najdi funkci, která umí i parametry: