با سلام خدمت دوستان.
در دلفي چطور مي شود كه يك فايل اجرايي مثل يك Help كه توسط نرم افزار مولتي مديا بيلدر ساخته شده را اجرا كرد؟
ممنون.
Printable View
با سلام خدمت دوستان.
در دلفي چطور مي شود كه يك فايل اجرايي مثل يك Help كه توسط نرم افزار مولتي مديا بيلدر ساخته شده را اجرا كرد؟
ممنون.
ShellExecute در یونیت ShellApi
با سلام خدمت دوستان
ادميرال جان اين ShellApi كه گفتي كجاست؟ آيا بايد نصبش كنم؟
ممنون.
با سلام خدمت دوستان
ادميرال جان اين ShellApi كه گفتي كجاست؟ آيا بايد نصبش كنم؟
ممنون.
سلامنقل قول:
با سلام خدمت دوستان
ادميرال جان اين ShellApi كه گفتي كجاست؟ آيا بايد نصبش كنم؟
ممنون.
در قسمت Uses ها یونیت ShellApi رو هم بنویسید.
موفق باشید.
با سلام
ضمن اضافه کردن shellapi به uses
اینم کد:
ShellExecute(0,0,'adress.exe',0,0,0)
خدا نگهدار
با سلام خدمت دوستان.
اولا تشكر مي كنم از دوستاني كه من را در اين تاپيك راهنمايي كردن. ثانيا اين كه امين آقا من اين كار را كردم ولي مشكلي كه هست اينه كه وقتي برنامه را اجرا مي كنم فايل Exe هم بلافاصله اجرا مي شه. در صورتي كه اين كد را پشت يك كليد نوشته ام. سوال ديگه هم اين كه اين همه صفر براي چي است و چي كار مي كنه؟
ممنون.
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
);
سلام soltanmahi
شما ننوشتی که این فایل اجرایی رو از داخل سی دی می خوای باز کنی یا از هارد دیسک خود ؟
حتما بنویس تا جوابت رو بدم
فعلا خداحافظ
سلام soltanmahdi
مشکلی نیست من کد هر دو را برات می نو یسم
ارهارد دیسک اجرا شود از این کد
از سی دی اجرا شود از این کدکد:winexec(' Your Drive:\\Your Folder \\ yourfile.exe',10);
اگه مشکلی بود حتما بنویس تا بعد خدا حافظکد:winexec(' Your Folder \ Your File.exe',10);
:cool:
با سلام خدمت دوستان.
sp1000 جان از راهنمايي هاي شما متشكرم. من هنوز دستورات شما را اجرا نكردم فقط مشكلي از قبل بود و مي خواستم بپرسم اين است كه درايو ويندوز يك كامپيوتر ديگر را از كجا مي توان بدست آورد و يا درايو سي دي؟
مطلب ديگر اين كه در حالت اين كه از روي هارد ديسك اجرا شود شماره 10 را در آخر نوشته ايد براي چي است؟
ممنون.
با سلامنقل قول:
نوشته شده توسط soltanmahdi
در آغاز راه بدست آوردن درايو ويندوز
پس از اونکد:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
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;
end.
دوست گرامي
حالا ما فقط اگه دستورا را بفهميم خيليه ديگه ريشه يابي اجزاي اون الان براي ما نه بلكه براي هركسي جز اونا كه آخر آخر دلفيند كار بدرد نخوريه اما موافقم كه اگه آدم اين دستورارا بفهمه بهتر از اينه كه ياد بگيره اما خوب كار خيلي
سختيه فهميدنشون در مورد اون صفرا اطلاعات ادميرال جان كامل بود اما تا اونجا كه مي ذونم يكي از اونها در نورد هندل يكي در مورد پارامتر و يكي شم يه متغير كه نمي دونم چكار مي كنه اگه ctrl+spaceرا بزنی تو توضیحاش هست
در ضمن برای من این دستور هیچ اشکالی نداره و کامل اجرا میشه
امیدوارم به دردتون بخوره
خدا نگهدار
سلامنقل قول:
مشکلی نیست من کد هر دو را برات می نو یسم
ارهارد دیسک اجرا شود از این کد
کد:
winexec(' Your Drive:\\Your Folder \\ yourfile.exe',10);
از سی دی اجرا شود از این کد
کد:
winexec(' Your Folder \ Your File.exe',10);
اگه مشکلی بود حتما بنویس تا بعد خدا حافظ
جناب sp1000 میشه بگین چرا باید از دو تا بک اسلش استفاده بشه ؟!!
این دو تا دستور رو امتحان کنید :
کد:WinExec( 'C:\\\\\windows\\\\system32\\\\\\\\\\calc.exe' , SW_SHOWNORMAL );
کد:WinExec('C:\windows\system32\calc.exe',SW_SHOWNORMAL);
اون دو تا دستور بالا رو هم امتحان کن تا نتیجه رو ببینی!نقل قول:
با سلام خدمت دوستان.
sp1000 جان از راهنمايي هاي شما متشكرم. من هنوز دستورات شما را اجرا نكردم فقط مشكلي از قبل بود و مي خواستم بپرسم اين است كه درايو ويندوز يك كامپيوتر ديگر را از كجا مي توان بدست آورد و يا درايو سي دي؟
مطلب ديگر اين كه در حالت اين كه از روي هارد ديسك اجرا شود شماره 10 را در آخر نوشته ايد براي چي است؟
اون 10 هم که پارامتر دوم تابع WinExec هست نوع نشون دادن پنجره برنامه ی اجرا شده رو نشون میده مثلاً
SW_HIDE
SW_SHOW
SW_SHOWNORMAL
SW_SHOWNA
SW_SHOWMAXIMIZED
و غیره که اون عدد هم معرف یکی از این حالاته.
موفق باشید.
حالا چرا بدبختا ميزني
يه اشتباه كرده
من که چیزه بدی نگفتم !نقل قول:
حالا چرا بدبختا ميزني
يه اشتباه كرده
فقط گفتم کدی رو که نوشته توجیـح کنه. شاید من دارم اشتباه میکنم.
هدف من توهین یا اذیت کردن کسی نبود.
با سلام خدمت دوستان.
اول از راهنمايي هاي همه متشكرم. فقط يك مشكلي كه هست اينه كه نرم افزار مولتي مديا بيلدر كه خيلي پيش پا افتاده و خيلي قابليت نداره با يك دستور ساده 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 است؟
در آخر از تمام دوستان تشكر مي كنم.
ممنون
دستور WinExec برای سازگاری با ورژن های قدیمی تر ویندوز هست و بهتره در ویندوزهای 32 بیتی از دستور ShellExecute و CreateProcess استفاده بشه.نقل قول:
سوال ديگه هم اين كه اين دو تا دستور چه فرقي با هم مي كنند؟ منظورم Winexec ShellExecute است؟
از نظر امکانات هم خیلی با هم متفاوتند.مثلاً Winexec فقط 2 تا پارامتر میگیره و Shellexecute می تونه 6 تا پارامتر بگیره و CreateProcess تا 10 تا پارامتر میگیره !
اصلاً این دستور ربطی به کاری که میخوای بکنی نداره !نقل قول:
اولا اين كه اين دستور محل پوشه ويندوز در درايو ويندوز را بر مي گرداند. ثانيا اين كه اين علامت سوال ها براي چيه؟ در مورد ارسال پيامت بيشتر توضيح بده.
این علامت سوال ها هم یه رشته هست دیگه !!!
ببین :
کد:procedure TForm1.Button3Click(Sender: TObject);
var
WinDir: array[0..255] of Char;
begin
GetWindowsDirectory(WinDir, MAX_PATH);
MessageBox(Handle,WinDir ,'Hello', MB_OK+MB_ICONINFORMATION);
end;
با سلام خدمت دوستان.
اولا دست شما به خاطر راهنمايي هاتون درد نكنه.
1- با استفاده از دستور CreateProcess مي توان فايل هاي ديگري به غير از اجرايي (EXE) را اجرا كرد؟
2-پس با توجه به توضيحات شما بهتره كه از دستور ShellExecute استفاده كنم؟
3-خوب اگر به درد كاره من نمي خوره پس به چه دردي مي خوره؟نقل قول:
اصلاً این دستور ربطی به کاری که میخوای بکنی نداره !
ممنون.
تا جایی که من میدونم خیــرنقل قول:
1- با استفاده از دستور CreateProcess مي توان فايل هاي ديگري به غير از اجرايي (EXE) را اجرا كرد؟
من اینطور ترجیـح میدم!نقل قول:
2-پس با توجه به توضيحات شما بهتره كه از دستور ShellExecute استفاده كنم؟
با این دستور هم میتونی فایل اجرا کنی هم پرینت بگیری و هم یک پوشه رو باز کنی.( پارامتر دوم : open,print,explorer)
منظور من پیدا کردن پوشه نصب ویندوز بود. برای چی میخواین پوشه نصب ویندوز رو بدونید ؟!نقل قول:
3-خوب اگر به درد كاره من نمي خوره پس به چه دردي مي خوره؟
با سلام خدمت دوستان.
ادميرال جان پس فايل هاي غير اجرايي را باچي مي توان باز كرد مثلا يك فايل با فرمت Pdf ؟نقل قول:
تا جایی که من میدونم خیــر
من يك سري گزارِش گيري ها دارم كه در پوشه ويندوز كپي مي كنم. حالا براي فراخواني انها بايد اسم درايو ويندوز مقابل را بدانم يا نه؟نقل قول:
منظور من پیدا کردن پوشه نصب ویندوز بود. برای چی میخواین پوشه نصب ویندوز رو بدونید ؟!
ممنون
نقل قول:
ادميرال جان پس فايل هاي غير اجرايي را باچي مي توان باز كرد مثلا يك فايل با فرمت Pdf ؟
دقت نکردی تو پست قبلی چی گفتم؟!نقل قول:
با این دستور هم میتونی فایل اجرا کنی هم پرینت بگیری و هم یک پوشه رو باز کنی.( پارامتر دوم : open,print,explorer)
ببین :
البته باید Acrobat Reader یا یه نرم افزار مشاهده فایل های PDF روی سیستم نصب باشه.کد:Shellexecute(0,'open','C:\Admiral.pdf',nil,nil,SW_SHOWNORMAL);
این رو نگفته بودی یا من ندیده بودم !نقل قول:
من يك سري گزارِش گيري ها دارم كه در پوشه ويندوز كپي مي كنم. حالا براي فراخواني انها بايد اسم درايو ويندوز مقابل را بدانم يا نه؟
ممنون
با سلام خدمت دوستان.
چر ديدم كه نوشتي ولي فكر كردم منظورت باز كردن پنجره Open است. خوب از مورد اول.نقل قول:
دقت نکردی تو پست قبلی چی گفتم؟!
اولا كه من مستقيما اشاره نكرده بودم. ثانيا اين كه به قول خودت بايد نرم افزار نصب باشه براي بررسي اين كار بايد توي كامپوتر به دنبال نرم افزار گشت كه فكر كنم براي اين كار از رجيستري استفاده مي كنند. اگر همين طور هست لطفا من را راهنمايي كن كه چطوري مي توانم جستجو كنم.نقل قول:
البته باید Acrobat Reader یا یه نرم افزار مشاهده فایل های PDF روی سیستم نصب باشه.
در آخر هم مي خواستم ببينم كه مي تواني من را در مورد خروجي LPCTSTR راهنمايي كني كه چي هست و احتياج به Uses داره؟
ممنون
سلام
این کاری که میخوای انجام بدی 100% تضمینی نیست.نقل قول:
اين كه به قول خودت بايد نرم افزار نصب باشه براي بررسي اين كار بايد توي كامپوتر به دنبال نرم افزار گشت كه فكر كنم براي اين كار از رجيستري استفاده مي كنند. اگر همين طور هست لطفا من را راهنمايي كن كه چطوري مي توانم جستجو كنم.
برای اینکه ببینی آکروبات ریدر روی سیستم نصب هست یا نه میتونی این مسیر رو تو رجیستری چک کنی:
حتی میتونی توی مسیر زیرکد:HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader
محل نصبش رو پیدا کنی.(X.X ورژن نرم افزاره)کد:HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\X.X\InstallPath
این یک نوع داده در ویژوال ++C هست که چون توابع API ساختارشون با ++C بیان میشه توی Help این توابع هم ساختار اصلی رو نشون میده.نقل قول:
در آخر هم مي خواستم ببينم كه مي تواني من را در مورد خروجي LPCTSTR راهنمايي كني كه چي هست و احتياج به Uses داره؟
دیگه این تاپیک خیلی داره از مبحث اصلی خارج میشه. اگه برای سوال های جدید تاپیک جدید باز کنی بهتره.
موفق باشی.
براي اجرا كردن فايل ها از درون دلفي راه هاي مختلفي وجود دارد كه من مختصري از كامل ترين راه را ميگو يم:
براي اين كار تابعي وجود دارد به نام ShellExecute كه در يونيت ShellApi تعريف شده است بنابراين لازم است ابتدا يونيت ShellApi را به ليست يونيتهاي پروژه اضافه كنيد.اين تابع يكي از توابع قدرتمند براي اجراي فايل است.شكل كلي تابع به اين صورت است:
پارامتر اول يك متغيير از نوع HWND است.کد:Function ShellExecute (hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;
لازم است براي كساني كه با مفهوم 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:
يادم رفته بود در مورد درايو ويندوز از دستورات زير مي توانيد استفاده كنيد:
من دلفيم يه اشكالي پيدا كرده نتونستم اين دستورو امتحان كنم ولي فكر كنم كار مي كنه. بدرود:happy:کد:procedure TForm1.Button1Click(Sender: TObject);
var
st:string;
WinDir: array[0..255] of Char;
begin
GetWindowsDirectory(WinDir, MAX_PATH);
st:=LeftStr (windir,3);
showmessage (st);
end;