PDA

View Full Version : تشخیص خاتمه یافتن یک Command در برنامه



Maryam80
چهارشنبه 17 خرداد 1385, 10:51 صبح
با سلام

من در برنامه ام خطوط زیر را نوشته ام حال مشکلی که دارم این است که سیستم بلافاصله پس از اجرای دستور Shellexecute می رود و message را چاپ می کند در صورتیکه هنوز دستور shellexecute من خاتمه نیافته است.
آیا روشی وجود دارد که مادامیکه یک دستور خاتمه نیافته است ،دستور دیگری اجرا نگردد.



shellexecute(handle,'open','d:\cmd.exe','/c d:\landp\autofbss.cmd',nil,SW_SHOWNormal);
messagedlg('Command Finish',mtinformation,[mbok],0);


لازم بذکر است که من از نسخه 1 دلفی تحت OS/2 دارم استفاده می کنم.

mzjahromi
چهارشنبه 17 خرداد 1385, 11:02 صبح
من توی ویندوز از این استفاده میکنم


function TForm1.ExecutePrg(const CmdLine: String; const Wait: boolean): boolean;
var
LastError: Integer;
ExitCode: Cardinal;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := SW_SHOWNORMAL;
Result := CreateProcess(nil, // ptr to name of executable module
PChar(CmdLine), // ptr to command line string
nil, // ptr to process security attributes
nil, // ptr to thread security attributes
false, // handle inheritance flag
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, // creation flags
nil, // ptr to new environment block
nil, // ptr to current directory name
StartupInfo, // ptr to STARTUPINFO
ProcessInfo); // ptr to PROCESS_INFORMATION
if Result then
begin
if Wait then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE);
end;
end
else
begin
LastError := GetLastError;
MessageDlg(SysErrorMessage(LastError) +' (Error: ' +IntToStr(LastError) +')', mtError, [mbOK], 0);
End;
End;

Maryam80
چهارشنبه 17 خرداد 1385, 13:22 عصر
با سلام و تشکر از پاسخ شما

در نسخه 1 دلفی تابع CreateProcess تعریف نشده است.در نتیجه من مجبورم که از Shellexecute استفاده کنم.
حالا می خواهم بدانم که آیا می شود خروجی این تابع را جوری کنترل کرد که تا اجرای آن تمام نشده است ،دستور دیگری را اجرا نکند.

ghabil
چهارشنبه 17 خرداد 1385, 16:24 عصر
کاری که شما دارید میکنید (Delphi و OS2 ) خیلی جالبه ...
دستور CreateProcess یک API ویندوز هستش (مال دلفی نیست) نهایتا هم شما باید ExitCode رو بگیرید که تمامی اینها وابسته به سیستم عامل هستند ،برای همین فکر نکنم به درد شما بخورند ; شما باید API اجرای یک Proccess رو روی OS2 پیدا کنید احتمالا پارامتر خروجیی بهتون میده که نتیجه کار و تمام شدن کار رو خبر میده (مثل همین CreateProcess) حتی منطقی که امکان سنکرون و آسنکرون اجرا کردن رو هم بهتون بده...

Maryam80
شنبه 20 خرداد 1385, 12:52 عصر
ممنون از راهنمایی
ولیکن مشکل من همچنان باقی است.

ghabil
شنبه 20 خرداد 1385, 21:06 عصر
با اولین سرچ تو گوگل -فقط تو تاپیکها- اینو دیدم :
DosExecPgm is the OS/2 api for win32 CreateProcess().

Hamid_PaK
یک شنبه 21 خرداد 1385, 04:00 صبح
شما یونت ویندوز رو مطالعه کنید و آن را برای دلفی 1.0 بروز رسانی کنید ...

یا حق ...