PDA

نسخه کامل مشاهده نسخه کامل : اجراي فايل Exe



soltanmahdi
08-11-2006, 08:39
با سلام خدمت دوستان.
در دلفي چطور مي شود كه يك فايل اجرايي مثل يك Help كه توسط نرم افزار مولتي مديا بيلدر ساخته شده را اجرا كرد؟
ممنون.

Admiral
08-11-2006, 09:57
ShellExecute در یونیت ShellApi

soltanmahdi
09-11-2006, 13:51
با سلام خدمت دوستان
ادميرال جان اين ShellApi كه گفتي كجاست؟ آيا بايد نصبش كنم؟
ممنون.

soltanmahdi
09-11-2006, 13:57
با سلام خدمت دوستان
ادميرال جان اين ShellApi كه گفتي كجاست؟ آيا بايد نصبش كنم؟
ممنون.

Admiral
09-11-2006, 17:54
با سلام خدمت دوستان
ادميرال جان اين ShellApi كه گفتي كجاست؟ آيا بايد نصبش كنم؟
ممنون.

سلام

در قسمت Uses ها یونیت ShellApi رو هم بنویسید.

موفق باشید.

amin a.^2
09-11-2006, 19:30
با سلام
ضمن اضافه کردن shellapi به uses
اینم کد:
ShellExecute(0,0,'adress.exe',0,0,0)
خدا نگهدار

soltanmahdi
10-11-2006, 08:35
با سلام خدمت دوستان.
اولا تشكر مي كنم از دوستاني كه من را در اين تاپيك راهنمايي كردن. ثانيا اين كه امين آقا من اين كار را كردم ولي مشكلي كه هست اينه كه وقتي برنامه را اجرا مي كنم فايل Exe هم بلافاصله اجرا مي شه. در صورتي كه اين كد را پشت يك كليد نوشته ام. سوال ديگه هم اين كه اين همه صفر براي چي است و چي كار مي كنه؟
ممنون.

Admiral
10-11-2006, 10:41
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
);

sp1000
11-11-2006, 07:18
سلام soltanmahi
شما ننوشتی که این فایل اجرایی رو از داخل سی دی می خوای باز کنی یا از هارد دیسک خود ؟
حتما بنویس تا جوابت رو بدم
فعلا خداحافظ

sp1000
11-11-2006, 07:59
سلام soltanmahdi
مشکلی نیست من کد هر دو را برات می نو یسم
ارهارد دیسک اجرا شود از این کد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

از سی دی اجرا شود از این کد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه مشکلی بود حتما بنویس تا بعد خدا حافظ
:cool:

soltanmahdi
11-11-2006, 18:19
با سلام خدمت دوستان.
sp1000 جان از راهنمايي هاي شما متشكرم. من هنوز دستورات شما را اجرا نكردم فقط مشكلي از قبل بود و مي خواستم بپرسم اين است كه درايو ويندوز يك كامپيوتر ديگر را از كجا مي توان بدست آورد و يا درايو سي دي؟
مطلب ديگر اين كه در حالت اين كه از روي هارد ديسك اجرا شود شماره 10 را در آخر نوشته ايد براي چي است؟
ممنون.

amin a.^2
11-11-2006, 18:36
با سلام خدمت دوستان.
sp1000 جان از راهنمايي هاي شما متشكرم. من هنوز دستورات شما را اجرا نكردم فقط مشكلي از قبل بود و مي خواستم بپرسم اين است كه درايو ويندوز يك كامپيوتر ديگر را از كجا مي توان بدست آورد و يا درايو سي دي؟
مطلب ديگر اين كه در حالت اين كه از روي هارد ديسك اجرا شود شماره 10 را در آخر نوشته ايد براي چي است؟
ممنون.
با سلام
در آغاز راه بدست آوردن درايو ويندوز

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس از اون
دوست گرامي
حالا ما فقط اگه دستورا را بفهميم خيليه ديگه ريشه يابي اجزاي اون الان براي ما نه بلكه براي هركسي جز اونا كه آخر آخر دلفيند كار بدرد نخوريه اما موافقم كه اگه آدم اين دستورارا بفهمه بهتر از اينه كه ياد بگيره اما خوب كار خيلي
سختيه فهميدنشون در مورد اون صفرا اطلاعات ادميرال جان كامل بود اما تا اونجا كه مي ذونم يكي از اونها در نورد هندل يكي در مورد پارامتر و يكي شم يه متغير كه نمي دونم چكار مي كنه اگه ctrl+spaceرا بزنی تو توضیحاش هست
در ضمن برای من این دستور هیچ اشکالی نداره و کامل اجرا میشه
امیدوارم به دردتون بخوره
خدا نگهدار

Admiral
11-11-2006, 20:06
مشکلی نیست من کد هر دو را برات می نو یسم
ارهارد دیسک اجرا شود از این کد

کد:
winexec(' Your Drive:\\Your Folder \\ yourfile.exe',10);
از سی دی اجرا شود از این کد
کد:
winexec(' Your Folder \ Your File.exe',10);

اگه مشکلی بود حتما بنویس تا بعد خدا حافظ

سلام

جناب sp1000 میشه بگین چرا باید از دو تا بک اسلش استفاده بشه ؟!!

این دو تا دستور رو امتحان کنید :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



با سلام خدمت دوستان.
sp1000 جان از راهنمايي هاي شما متشكرم. من هنوز دستورات شما را اجرا نكردم فقط مشكلي از قبل بود و مي خواستم بپرسم اين است كه درايو ويندوز يك كامپيوتر ديگر را از كجا مي توان بدست آورد و يا درايو سي دي؟
مطلب ديگر اين كه در حالت اين كه از روي هارد ديسك اجرا شود شماره 10 را در آخر نوشته ايد براي چي است؟


اون دو تا دستور بالا رو هم امتحان کن تا نتیجه رو ببینی!
اون 10 هم که پارامتر دوم تابع WinExec هست نوع نشون دادن پنجره برنامه ی اجرا شده رو نشون میده مثلاً
SW_HIDE
SW_SHOW
SW_SHOWNORMAL
SW_SHOWNA
SW_SHOWMAXIMIZED
و غیره که اون عدد هم معرف یکی از این حالاته.

موفق باشید.

amin a.^2
11-11-2006, 21:03
حالا چرا بدبختا ميزني
يه اشتباه كرده

Admiral
11-11-2006, 21:30
حالا چرا بدبختا ميزني
يه اشتباه كرده

من که چیزه بدی نگفتم !

فقط گفتم کدی رو که نوشته توجیـح کنه. شاید من دارم اشتباه میکنم.

هدف من توهین یا اذیت کردن کسی نبود.

soltanmahdi
12-11-2006, 06:55
با سلام خدمت دوستان.
اول از راهنمايي هاي همه متشكرم. فقط يك مشكلي كه هست اينه كه نرم افزار مولتي مديا بيلدر كه خيلي پيش پا افتاده و خيلي قابليت نداره با يك دستور ساده Window اسم درايو ويندوز شخص مقابل را مي دهد حالا چرا در دلفي اينقدر فيلم و سيانس وجود داره!!!!!!


procedure TForm1.BitBtn1Click(Sender: TObject);
var
WinDir: array[0..255] of Char;
begin
GetWindowsDirectory(WinDir, MAX_PATH);
Edit1.Text:= WinDir;
MessageBox(Handle, '????I ????', '', MB_OK+MB_ICONINFORMATION);
end;

اولا اين كه اين دستور محل پوشه ويندوز در درايو ويندوز را بر مي گرداند. ثانيا اين كه اين علامت سوال ها براي چيه؟ در مورد ارسال پيامت بيشتر توضيح بده.
سوال ديگه هم اين كه اين دو تا دستور چه فرقي با هم مي كنند؟ منظورم Winexec ShellExecute است؟
در آخر از تمام دوستان تشكر مي كنم.
ممنون

Admiral
12-11-2006, 09:53
سوال ديگه هم اين كه اين دو تا دستور چه فرقي با هم مي كنند؟ منظورم Winexec ShellExecute است؟

دستور WinExec برای سازگاری با ورژن های قدیمی تر ویندوز هست و بهتره در ویندوزهای 32 بیتی از دستور ShellExecute و CreateProcess استفاده بشه.

از نظر امکانات هم خیلی با هم متفاوتند.مثلاً Winexec فقط 2 تا پارامتر میگیره و Shellexecute می تونه 6 تا پارامتر بگیره و CreateProcess تا 10 تا پارامتر میگیره !



اولا اين كه اين دستور محل پوشه ويندوز در درايو ويندوز را بر مي گرداند. ثانيا اين كه اين علامت سوال ها براي چيه؟ در مورد ارسال پيامت بيشتر توضيح بده.

اصلاً این دستور ربطی به کاری که میخوای بکنی نداره !

این علامت سوال ها هم یه رشته هست دیگه !!!

ببین :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

soltanmahdi
13-11-2006, 08:17
با سلام خدمت دوستان.
اولا دست شما به خاطر راهنمايي هاتون درد نكنه.
1- با استفاده از دستور CreateProcess مي توان فايل هاي ديگري به غير از اجرايي (EXE) را اجرا كرد؟
2-پس با توجه به توضيحات شما بهتره كه از دستور ShellExecute استفاده كنم؟

اصلاً این دستور ربطی به کاری که میخوای بکنی نداره !
3-خوب اگر به درد كاره من نمي خوره پس به چه دردي مي خوره؟
ممنون.

Admiral
13-11-2006, 15:04
1- با استفاده از دستور CreateProcess مي توان فايل هاي ديگري به غير از اجرايي (EXE) را اجرا كرد؟

تا جایی که من میدونم خیــر


2-پس با توجه به توضيحات شما بهتره كه از دستور ShellExecute استفاده كنم؟

من اینطور ترجیـح میدم!
با این دستور هم میتونی فایل اجرا کنی هم پرینت بگیری و هم یک پوشه رو باز کنی.( پارامتر دوم : open,print,explorer)



3-خوب اگر به درد كاره من نمي خوره پس به چه دردي مي خوره؟

منظور من پیدا کردن پوشه نصب ویندوز بود. برای چی میخواین پوشه نصب ویندوز رو بدونید ؟!

soltanmahdi
14-11-2006, 06:26
با سلام خدمت دوستان.

تا جایی که من میدونم خیــر
ادميرال جان پس فايل هاي غير اجرايي را باچي مي توان باز كرد مثلا يك فايل با فرمت Pdf ؟


منظور من پیدا کردن پوشه نصب ویندوز بود. برای چی میخواین پوشه نصب ویندوز رو بدونید ؟!

من يك سري گزارِش گيري ها دارم كه در پوشه ويندوز كپي مي كنم. حالا براي فراخواني انها بايد اسم درايو ويندوز مقابل را بدانم يا نه؟
ممنون

Admiral
14-11-2006, 09:38
ادميرال جان پس فايل هاي غير اجرايي را باچي مي توان باز كرد مثلا يك فايل با فرمت Pdf ؟


با این دستور هم میتونی فایل اجرا کنی هم پرینت بگیری و هم یک پوشه رو باز کنی.( پارامتر دوم : open,print,explorer)

دقت نکردی تو پست قبلی چی گفتم؟!

ببین :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته باید Acrobat Reader یا یه نرم افزار مشاهده فایل های PDF روی سیستم نصب باشه.


من يك سري گزارِش گيري ها دارم كه در پوشه ويندوز كپي مي كنم. حالا براي فراخواني انها بايد اسم درايو ويندوز مقابل را بدانم يا نه؟
ممنون

این رو نگفته بودی یا من ندیده بودم !

soltanmahdi
14-11-2006, 10:24
با سلام خدمت دوستان.

دقت نکردی تو پست قبلی چی گفتم؟!
چر ديدم كه نوشتي ولي فكر كردم منظورت باز كردن پنجره Open است. خوب از مورد اول.

البته باید Acrobat Reader یا یه نرم افزار مشاهده فایل های PDF روی سیستم نصب باشه.
اولا كه من مستقيما اشاره نكرده بودم. ثانيا اين كه به قول خودت بايد نرم افزار نصب باشه براي بررسي اين كار بايد توي كامپوتر به دنبال نرم افزار گشت كه فكر كنم براي اين كار از رجيستري استفاده مي كنند. اگر همين طور هست لطفا من را راهنمايي كن كه چطوري مي توانم جستجو كنم.
در آخر هم مي خواستم ببينم كه مي تواني من را در مورد خروجي LPCTSTR راهنمايي كني كه چي هست و احتياج به Uses داره؟
ممنون

Admiral
14-11-2006, 11:21
سلام


اين كه به قول خودت بايد نرم افزار نصب باشه براي بررسي اين كار بايد توي كامپوتر به دنبال نرم افزار گشت كه فكر كنم براي اين كار از رجيستري استفاده مي كنند. اگر همين طور هست لطفا من را راهنمايي كن كه چطوري مي توانم جستجو كنم.


این کاری که میخوای انجام بدی 100% تضمینی نیست.

برای اینکه ببینی آکروبات ریدر روی سیستم نصب هست یا نه میتونی این مسیر رو تو رجیستری چک کنی:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حتی میتونی توی مسیر زیر


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

محل نصبش رو پیدا کنی.(X.X ورژن نرم افزاره)


در آخر هم مي خواستم ببينم كه مي تواني من را در مورد خروجي LPCTSTR راهنمايي كني كه چي هست و احتياج به Uses داره؟

این یک نوع داده در ویژوال ++C هست که چون توابع API ساختارشون با ++C بیان میشه توی Help این توابع هم ساختار اصلی رو نشون میده.

دیگه این تاپیک خیلی داره از مبحث اصلی خارج میشه. اگه برای سوال های جدید تاپیک جدید باز کنی بهتره.

موفق باشی.

shayan_p30
14-12-2006, 08:00
براي اجرا كردن فايل ها از درون دلفي راه هاي مختلفي وجود دارد كه من مختصري از كامل ترين راه را ميگو يم:

براي اين كار تابعي وجود دارد به نام ShellExecute كه در يونيت ShellApi تعريف شده است بنابراين لازم است ابتدا يونيت ShellApi را به ليست يونيتهاي پروژه اضافه كنيد.اين تابع يكي از توابع قدرتمند براي اجراي فايل است.شكل كلي تابع به اين صورت است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پارامتر اول يك متغيير از نوع 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 را اجرا نماييد.

پارامتر سوم مشخص كننده نام فايل يا شاخه اي است كه شما مي خواهيد عمليات بر روي آن انجام شود.

حتما تا حالا با طرز كار اين تابع آشنا شده ايد اما اگر لازم بود در پست هاي بعدي به توضيح بقيه ي اجزا اين تابع و مثال هاي جالب تري از اين تابع (فرستادن ميل و ...) پرداخته ميشود. بدرود :happy:

shayan_p30
14-12-2006, 08:07
يادم رفته بود در مورد درايو ويندوز از دستورات زير مي توانيد استفاده كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

من دلفيم يه اشكالي پيدا كرده نتونستم اين دستورو امتحان كنم ولي فكر كنم كار مي كنه. بدرود:happy: