میتونین از دستورwinexc با پارامتر hide استفاده کنین این دستور 2 پارامتر میگیره اولی ادرس فایل و دومی نوع نمایش
کد:
The WinExec function runs the specified application.
This function is provided for compatibility with earlier versions of Windows. For Win32-based applications, use the CreateProcess function.
UINT WinExec(
LPCSTR lpCmdLine, // address of command line
UINT uCmdShow // window style for new application
);
یا
از دستور shellexecute اونم با پارامتر hide استفاده کنی
کد:
The ShellExecute function opens or prints a specified file. The file can be an executable file or a document file. See ShellExecuteEx also.
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
تابع APIي وجود دارد به نام WinExec. شكل كلي اين تابع از اين قرار است:
WinExec(lpCmdLine: PAnsiChar; uCmdShow: Cardinal);
كه lpCmdLine خط دستور مورد نظر شما براي اجراي فايل و uCmdShow بايد يكي از مقادير زير را داشته باشد:
SW_HIDE SW_MAXIMIZE SW_MINIMIZE
SW_RESTORE SW_SHOW SW_SHOWDEFAULT
SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE
SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL
براي توضيحات بيشتر راجع به هر كدام از اين ثابت ها به راهنماي Windows SDK دلفي يا MSDN مراجعه كنيد.
تابع WinExec تابع بسيار قديمي و محدودي است و ما قصد نداريم در اين مقاله بيشتر از اين راجع به اين تابع صحبت كنيم.
تابع ديگري وجود دارد به نام ShellExecute. اين تابع در يونيت ShellAPI تعريف شده است. بنابر اين لازم است يونيت ShellAPI را در ليست uses يونيت خود وارد كنيد. اين يكي از توابع بسيار قدرتمند براي اجراي فايل است.
نگاهي به شكل كلي اين تابع بياندازيد:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;
hWnd Handle پنجره اي كه اين دستور را فراخوانده است.
Operation نوع دستوري مورد نظر جهت اجرا
FileName نام فايل يا شاخه
Parameters پارامترهاي مورد نظر در هنگام اجراي فايل exe
Directory شاخه پيش فرض در هنگام اجراي فايل
ShowCmd مشخص كننده چگوني نمايش فايل در هنگام اجرا
پارامتر اول يك متغيير از نوع HWND است.
لازم است براي كساني كه با مفهوم Handle در ويندوز آشنا نيستند توضيحاتي راجع به Handle بدهم. هر پنجره يا آبجكتي در ويندوز داراي يك Handle است كه براي دسترسي به آن پنجره يا آبجكت شما بايد از اين Handle استفاده كنيد. در واقع يك Handle يك عدد در مبناي 16 است. Handle يك عدد unique يا همتا است كه ويندوز آن را مقداردهي مي كند. اگر از يك پنجره دو Instance اجرا شده باشد (مثلا يك برنامه دو بار اجرا شده باشد) هر كدام از اين Instanceها يك Handle جداگانه دارند.
با اين تفاصيل پارامتر اول Handle پنجره اي است كه اين دستور را صادر كرده است. شما براي اين پارامتر مي توانيد از Application.Handle استفاده كنيد و يا آن را برابر 0 قرار دهيد. به علاوه مي توانيد Handle يك برنامه ديگر را بدهيد.
در صورتي كه شما مي خواهيد پيغام هاي اخطار آن فايل را دريافت كنيد يا آن را كنترل نماييد و يا تا اجراي كامل آن اجراي برنامه را متوقف كنيد با Handle برنامه خود را با استفاده از Application.Handle به اين پارامتر بدهيد.
پارامتر دوم مشخص كننده وظيفه اي است كه قرار است انجام شود. اين پارامتر مقادير پيش فرضي ندارد و بستگي به خصوصيات فايل اجرايي دارد. روي يك فايل از نوع Text كليد سمت راست ماوس را بزنيد. احتمالا موارد بالاي ليست "open"، "Edit with ..." , "print" است. هر كدام از اين رشته هاي مي توانند يك عمليات يا Operation باشند. به عنوان مثال شما مي خواهيد يك فايل Text را چاپ كنيد. در اين صورت كافي است از عبارت print به عنوان operation استفاده كنيد. يا مي خواهيد يك فايل rar را با استفاده از WinRar باز كنيد. در اين صورت مي توانيد از "Extract files" استفاده كنيد. حتما تا به حال متوجه شده ايد كه دستور ShellExecute چه مقدار انعطاف پذير است. با استفاده از اين فرمان مي توانيد هر گونه دستور Shell را اجرا نماييد.
پارامتر سوم مشخص كننده نام فايل يا شاخه اي است كه شما مي خواهيد عمليات بر روي آن انجام شود.
پارامتر چهارم ليست پارامترهايي است كه تمايل داريد فايل exe با اين پارامترها اجرا شود. پارامترها پنجم نيز نام شاخه پيش فرض در هنگام اجراي فايل مورد نظر شماست. اگر شما فايل exe اي را اجرا كنيد و اين فايل exe بخواهد از شاخه جاري فايلهاي اضافه اي را استفاده كند ويندوز شاخه جاري را به اون مطابق با اين شاخه اطلاع خواهد داد. و اما آخرين پارامتر مشخص كننده شكل اجراي فايل است. مقدار اين پارامتر مي تواند يكي از ثابت هايي ليستي باشد كه در ابتداي اين مقاله عنوان شد. به عنوان مثال شما مي توانيد از SW_HIDE استفاده كنيد كه در اين صورت فايل اجراي شما مخفي خواهد بود و يا از SW_SHOWMINIMIZE استفاده كنيد كه در اين صورت برنامه شما Minimizeشده اجرا مي شود.
و حالا به يك نكته خيلي مهم توجه كنيد:
1- رشته هاي اين تابع از نوع PChar هستند بنابراين شما بايد رشته هاي string را به صورت PChar به اين تابع بدهيد. شما مي توانيد به طور عادي رشته مورد نظر خود را به اين تابع بدهيد و يا در صورتي كه رشته مورد نظر شما string است بايد با استفاده با استفاده از دستور PChar آن را Typecast كنيد. به عنوان مثال:
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'test.exe') , '', '', SW_SHOWNORMAL);
در اين مثال با استفاده از تابع ExtractFilePath و Application.ExeName كه حاوي آدرس كامل فايل Exe است شاخه اي كه فايل exe در آن قرار دارد را پيدا كرده ايم و سپس فايل test.exe را كه در كنار فايل اصلي اجرايي وجود دارد را به آن اضافه كرده ايم. كل اين عبارت TypeCast شده است به PChar.
جهت اطلاع كساني كه نمي دانند TypeCast چيست. TypeCast فرآيندي است كه شما متغيير يا Objectي را از يك نوع به نوع ديگري تبديل ميكنيد. كد زير را نگاه كنيد و با نوع پيشرفته تري از TypeCast آشنا شويد:
procedure TForm1.Button1Click(Sender: TObject); begin TButton(Sender).Caption := 'Test'; end;
در اين مثال Sender را از نوع TObject است TypeCast كرده ايم به TButton. و پراپرتي Caption آنرا تغيير داده ايم. براي اطلاعات بيشتر راجع به TypeCast به كتب دلفي مراجعه كنيد.
و اجازه دهيد به چند مثال جالب نيز نگاهي بياندازيم:
edit كردن يك فايل HTML با Editor پيش فرض HTML:
ShellExecute(Handle, 'edit', 'test.htm', '', '', SW_SHOW);
نصب يك فايل INF
ShellExecute(Handle, 'install', 'divx.inf', '', '', SW_SHOW);
فشرده ساختن يك فايل با استفاده از winrar و ارسال آن به ايميل:
ShellExecute(Handle, 'compress and mail...', 'test.file', '', '', SW_SHOW);
ارسال ايميل به ghoghnoose.dana@gmail.comو با موضوع "Great Article":
ShellExecute(0, 'open', 'mailto:ghoghnoose.dana@gmail.com, '', '', SW_SHOWNORMAL);