Sziasztok!
Azt szeretném megvalósítani, hogy ShellExecute-tal meghívok egy .bat file-t, és ha az végzett, legyen visszacsatolás erről 1 MessageDlg formájában. Jelenleg csak egymás után van felsorolva a 2 művelet, de ezzel csak az a bökkenő, hogy még javában nyitva van a cmd ablak, amikor már kapom az üzenetet, hogy befejezte. Van erre valamilyen megoldás? Hogyan lehet "megmondani" a Delphinek, hogy csak a cmd ablak automatikus bezárása után jöjjön a MessageDlg ablak?
Előre is köszönöm a válaszokat!
- 4068 megtekintés
Hozzászólások
procedure ExecuteAndWait(const aCommand: string); var tmpStartupInfo: TStartupInfo; tmpProcessInformation: TProcessInformation; tmpProgram: String; begin tmpProgram := trim(aCommand); FillChar(tmpStartupInfo, SizeOf(tmpStartupInfo), 0); with tmpStartupInfo do begin cb := SizeOf(TStartupInfo); wShowWindow := SW_HIDE; end; if CreateProcess(nil, pchar(tmpProgram), nil, nil, true, CREATE_NO_WINDOW, nil, nil, tmpStartupInfo, tmpProcessInformation) then begin // loop every 10 ms while WaitForSingleObject(tmpProcessInformation.hProcess, 10) > 0 do begin Application.ProcessMessages; end; CloseHandle(tmpProcessInformation.hProcess); CloseHandle(tmpProcessInformation.hThread); end else begin RaiseLastOSError; end; end;
--
[ Falu.me | Tárhely | A Linux és én ]
- A hozzászóláshoz be kell jelentkezni
Köszönöm a kódrészletet!
Ha csak simán beillesztem, elindul a program, de nem azt csinálja, amit szeretnék. Ez persze rendben is van így, mert nem hivatkozok rá sehol.
Viszont, ha fönt a type-nál beírom, hogy procedure ExecuteAndWait(const aCommand: string);
már hibát dob: unsatisfied forward or external declaration.
Gondoltam az a baja, hogy nincs deklarálva az "aCommand" nevű konstans. De itt meg azért akadtam el, hogy akkor milyen értéket kell neki adni?
Ennél a példánál a string típusú vektorban pl. a 3 nap van:
const Days : array[0..3] of string = ('Sat','Sun', 'Mon' );
Én eddig csak értékadással tanultam konstans megadást.
Az én ide vonatkozó kódrészletem ez lenne:
procedure TForm1.save(Sender: TObject);
var s:string;
begin
s:='c:\Program Files\save\save.bat';
ShellExecute(handle, 'open' ,pchar(s),nil, pchar(extractfilepath(s)), SW_SHOWNORMAL) ;
MessageDlg('A mentés befejeződött.', mtInformation, [mbyes],0);
end;
Az egymásnak megfeleltetés tekintetében szerintem az "aCommand" felelne meg az én "s" változómnak, csak az nem lokális lenne, hanem 1 globális konstans. Jól gondolom?
- A hozzászóláshoz be kell jelentkezni
Ejha! - Gondolta magában Dömdödöm....
s:='c:\Program Files\save\save.bat';
ExecuteAndWait(s);
--
[ Falu.me | Tárhely | A Linux és én ]
- A hozzászóláshoz be kell jelentkezni