PDA

View Full Version : فراخوانی برنامه های تحت ویندوز با SheellExecute یا WinExec



موسوی
دوشنبه 10 آذر 1382, 20:36 عصر
باسلام
من در برنامه ای با یکی از دستورات گفته شده در عنوان سوال یه برنامه کاربردی دیگه رو صدا میزنم واجرا میکنم
حالا میخوام بدونم که:
1-چطوری میتونم وقتی برنامه اول(اصلی) رو میبندم برنامه فراخوانی شده هم بسته بشه
2-آیا روشی برای اجرای برنامه دوم بصورت Modal وجود داره یا نه
وجدانا حوصله Search ندارم جواب بدید :lol: :wink:

Kambiz
دوشنبه 10 آذر 1382, 21:35 عصر
function Execute(const CmdLine: String; ShowCmd: Word; Wait: Boolean): Boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
Result := False;
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := ShowCmd;
end;
if CreateProcess(nil, PChar(CmdLine), nil, nil, False,
CREATE_NEW_PROCESS_GROUP or NORMAL_PRIORITY_CLASS, nil, nil,
StartupInfo, ProcessInfo) then
begin
if Wait then WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
Result := True;
end;
end;

موسوی
دوشنبه 10 آذر 1382, 21:57 عصر
بسیار متشکرم
اگه ممکنه یه توضیح کلی همر مورد دستورات بالا بدید

Kambiz
سه شنبه 11 آذر 1382, 14:07 عصر
توضیح هر دستور رو می‌تونی در راهنمای ویندوز پیدا کنی.
برای نمونه فراخوانی زیر باعث می‌شه که NotePad اجرا بشه و تا وقتی که NotePad بسته نشده٬ اجرای برنامه اصلی متوقف می‌شه.


Execute('C:\Windows\System32\NotePad.exe', SW_SHOW, True);
اگر تابع به هر دلیلی موفق به اجرای برنامه نشه مقدار False رو برمی‌گردونه٬ وگرنه مقدار برگشتی تابع True هست.

موسوی
شنبه 15 آذر 1382, 22:40 عصر
متشکرم

دنی کوئیل
دوشنبه 26 دی 1384, 20:51 عصر
چرا وقتی به جای آدرس از متغییر استفاده می کنی Error میده

Hamid_PaK
دوشنبه 26 دی 1384, 22:04 عصر
باید از تابع PChar استفاده کنید چون آرگومان ورودی از نوع Pointer برای Char می باشد ...



WinExe(pChar( a String Variable ),SW_SHOW);


یا حق !!!

MiRHaDi
دوشنبه 26 دی 1384, 23:34 عصر
سلام
زمان آخرین پست :
Saturday 06 December 2003
زمان سوال بعدی :
Monday 16 January 2006

این نشون میده که هیچ وقت پست ها قدیمی نمیشن :)
بای