اجراي برنامه ها از دلفي ( دستور ShellExecute) و پاسخ به سوال دوست عزیز آقای سعید عسگری
در اين مقاله طريقه اجرا يا باز کردن نرم افزار هاي خارج از محيط دلفي را با استفاده از تابع API ويندوز ShellExecute را ياد خواهيد گرفت.
چرا بايد برنامه ها را از دلفي اجرا کرد؟
شايد اين سوال براي شما پيش بيايد چرا بايد نرم افزارها را خارج از دلفي اجرا کرد. شما در يکي از موارد ذيل ممکن است نياز به اجراي يک نرم افزار خارج از دلفي داشته باشيد
• برنامه هاي نصب و عزل
• برنامه هاي سيستمي
• برنامه هاي اپليکيشن سرور
• برنامه هاي گزارش گيري
• و ....
موارد بسياري است که ممکن است شما بخواهيد از اين دستور استفاده کنيد که به چندي از آنها اشاره شد.
دستور ShellExecure
اين دستور به ما اجازه ميدهد که برنامه هاي ديگر را اجرا کنيم. نحو اين دستور به شکل ذيل مي باشد.
HINSTANCE ShellExecute(HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
جدول زير پارامترهاي اين دستور را شرح ميدهد.
پارامتر |
ورودي/خروجي |
توضيحات |
hwnd |
ورودي |
دستگيره يا هندل پنجره اصلي - براي گزارش خطاها حتما نياز است |
lpOperation |
ورودي |
اشاره گر - اين پارامتر به نوع عمليات اشاره مي کند |
lpFile |
ورودي |
اشاره گر به نام فايل اجرايي شما |
lpParameters |
ورودي |
اشاره گر به پارامترهاي ارسالي به نرم افزار شما - در صورتي که پارامتر نباشد به صورت تهي بماند |
lpDirectory |
ورودي |
دايرکتوري پيش فرض براي اجراي نرم افزار |
nShowCmd |
ورودي |
اشاره گر تنظيم حالت نمايش برنامه بعد از اجرا |
د ر صورتي که دستور shellexcute به درستي اجرا نشود يک کد خطا برمي گرداند شما مي توانيد با استفاده از تابع GetLastError خطا رخ داده را متوجه شويد. در صورتي که دستور Shellexecute به درستي اجرا شود کد خطاي بازگشتي بزرگتر از 32 مي باشد . در صورتي که کد خطا بازگشتي کمتر يا برابر با 32 باشد يک خطا رخ داده است. براي دريافت اطلاعات بيشتر در مورد کدهاي خطا اين دستور به MSDN مراجعه کنيد.
در دلفي شما به راحتي با استفاده از دستور SysErrorMessage مي توانيد آخرين خطا را بدست آوريد.نمونه کد زير روش استفاده از اين دستور را نشان داده است.
if ShellExecute(Handle, 'print', PChar('c:\log.txt'), nil, nil, SW_SHOWNORMAL) <= 32 then
ShowMessage(SysErrorMessage(GetLastError));
پارامتر lpOperation
با استفاده از دستور ShellExecute مي توان نرم افزارها و آبجکتهاي مختلف را اجرا کرد . مقادير قابل قبول براي پارامتر دوم اين دستور lpOperation به شرح جدول ذيل مي باشد.
lpOperation مقدار پارامتر |
شرح |
edit |
باز کردن يک سند براي ويرايش در يک ويرايشگر |
explore |
مرورگر فايلهاي ويندوز براي مرور دايرکتوري خاص ... |
find |
جستجو به دنبال يک فايل در دايرکتوري خاص... |
open |
باز کردن يک فايل يا برنامه |
print |
چاپ يک سند |
NULL |
اطلاعات بيشتر در پايين ... |
در صورتي که مقدار پارامتر lpOperation برابر با null قرار بگيرد براي باز کردن فايل يا برنامه از رجيستري ويندوز و از قسمت تخصيص فايلهاي اجرايي به پسوند فايلها براي اجراي دستور فوق استفاده مي گردد.
پارامتر nShowCmd
اين پارامتر به دستور ShellExecute مي گويد که بعد از اجراي يک برنامه آن را به چه حالتي نمايش بدهد. انواع حالات مختلف در جدول ذيل آمده است.
nShowCmd مقدار پارامتر |
شرح |
SW_HIDE |
مخفي کردن پنجره |
SW_MAXIMIZE |
بزرگ کردن پنجره |
SW_MINIMIZE |
به حداقل رساندن پنجره |
SW_RESTORE |
فعال کردن يک پنجره در صورتي که به حالت حداقل يا حداکثر باشد |
SW_SHOW |
نمايش پنجره در حالت و موقعيت پيش فرض |
SW_SHOWDEFAULT |
نمايش پنجره به حالت پيش فرض در برنامه |
SW_SHOWMAXIMIZED |
فعال و به حداکثر رساندن پنجره |
SW_SHOWMINIMIZED |
فعال و به حداقل رساندن يک پنجره |
SW_SHOWMINNOACTIVE |
نمايش يک پنجره در حالت غير فعال و حداقل |
SW_SHOWNA |
نمايش يک پنجره در وضعيت فعلي |
SW_SHOWNOACTIVATE |
نمايش و فعال کردن يک پنجره - ويندوز اين پنجره را در حالت پيش فرض خود نمايش مي دهد. |
SW_SHOWNORMAL |
نمايش و فعال کردن پنجره به حالت عادي |
وقتي که شما براي اولين بار يک برنامه را اجرا مي کنيد بايد از مقدار SW_SHOWNORMAL استفاده کنيد.
استفاده از دستور ShellExecute
درقسمت پايين چند نمونه از حالتهاي استفاده از اين دستور آورده شده است. شما مي توانيد اين دستورات را براي کار خود تغيير دهيد. در دلفي براي استفاده از اين دستور بايد دو يونيت Windows و ShellAPI در قسمت Uses قرار گرفته باشد.
اجراي برنامه Demo.exe از دايرکتوري C:\app
ShellExecute(Handle,NIL,PChar('C:\apps\demo.exe'), nil,nil,SW_SHOWNORMAL);
باز کردن فايل log.txt
ShellExecute(Handle,'open',PChar('c:\log.txt'), nil,nil,SW_SHOWNORMAL);
پخش فايل ending.mp3
ShellExecute(Handle,'play',PChar('c:\ending.mp3'), nil,nil,SW_SHOWNORMAL);
چاپ فايل log.txt
ShellExecute(Handle,'print',PChar('c:\log.txt'), nil,nil,SW_SHOWNORMAL);
باز کردن مروگر فايل ويندوز از C:\
ShellExecute(Handle,'explore',PChar('c:\'), nil,nil,SW_SHOWNORMAL);
ساخت يک نامه الکترونيکي جديد به واسطه Outlook Express
Procedure CreateEmail(Const EmailAddr, Subject, Body: String);
var
ConcatEmailStr: String;
Begin
ConcatEmailStr := EmailAddr + '?subject=' + Subject + '&body=' + Body;
ShellExecute(Handle,'open',PChar(ConcatEmailStr), nil, nil, SW_SHOWNORMAL);
end;