PDA

View Full Version : اجرای فایل exe از داخل برنامه



majid2230
چهارشنبه 18 فروردین 1389, 03:38 صبح
سلام
آیا امکانش هست که یه برنامه ویژوال رو (برنامه ای با پسوند exe ) با parent فرم خودم اجرا کنم مثلا اگر mozilla نصب باشه فایل exe اون رو داخل برنامه خودم (تاکید می کنم با parent برنامه خودم و نه بیرون از آن) باز کنم ؟اگه انجام میشه , لطفا بگید چطوری .

دلفــي
چهارشنبه 18 فروردین 1389, 10:56 صبح
حرفم رو پس گرفتم . البته فعلا !
مراجعه شود به پست 7

lord_viper
چهارشنبه 18 فروردین 1389, 12:26 عصر
این کار احتمالا امکان پذیر هست
(با کنترل تست کردم ولی با فورم تست نکردم)

با استفاده از تابع SetParet

میتونین پرنت فورم mozila رو فورم خودتون قرار بدید با این کار فورم mozila دورن فورم برنامه شما قرار میگیره

Felony
چهارشنبه 18 فروردین 1389, 12:48 عصر
تابع Setparent یک شئ مشتق شده از کلاس TWinControl رو به عنون پارامتر ورودی قبول میکنه ، چه طور فرم موزیلا رو بهش به عنوان پارامتر ورودی دادید ؟

قبلا یکی از دوستان یک نمونه قرار داده بود که برنامه ماشین حساب رو تو فرم برنامه باز میکرد ، البته مشکل داشت ...

majid2230
چهارشنبه 18 فروردین 1389, 13:29 عصر
یه کد پیدا کردم این هم لینکشه ولی هنوز امتحانش نکردم .

"http://stackoverflow.com/questions/796883/how-to-shell-to-another-app-and-have-it-appear-in-a-delphi-form"

حسین شهریاری
چهارشنبه 18 فروردین 1389, 13:46 عصر
بله میشه:

WinExec(Pchar(path+filename),True)

دلفــي
چهارشنبه 18 فروردین 1389, 14:10 عصر
بله میشه:

WinExec(Pchar(path+filename),True)

اين كد فقط يه فايل اجرايي رو اجرا مي كنه ! و اشتباهه !!!


WinExec(Pchar(path+filename),1);


تابع Setparent یک شئ مشتق شده از کلاس TWinControl رو به عنون پارامتر ورودی قبول میکنه ، چه طور فرم موزیلا رو بهش به عنوان پارامتر ورودی دادید ؟

قبلا یکی از دوستان یک نمونه قرار داده بود که برنامه ماشین حساب رو تو فرم برنامه باز میکرد ، البته مشکل داشت ...
اين كار رو ميشه انجام داد ولي قبلا بايد فايل اجرايي مورد نظر رو اجرا كرده باشيد ، به مثال زير توجه كنيد :



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ShellAPI;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
fHandle:THandle;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
const
AVerb = 'open';
AParams = '';
AFileName = 'iexplore.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := SW_HIDE;

ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);

fHandle := Windows.FindWindow( 'IEFrame', nil );
Windows.SetParent( fHandle, Handle );

Resize;
ShowWindow(fHandle, SW_SHOW);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
if IsWindow(fHandle) then begin
SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
SWP_ASYNCWINDOWPOS);
end;
end;

end.

دلفــي
دوشنبه 13 اردیبهشت 1389, 12:26 عصر
این هم مثالش :

http://www.megafileupload.com/en/file/225579/RunExec-zip.html

جواد ملاولی
چهارشنبه 10 شهریور 1389, 15:10 عصر
اين كار رو ميشه انجام داد ولي قبلا بايد فايل اجرايي مورد نظر رو اجرا كرده باشيد ، به مثال زير توجه كنيد :



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ShellAPI;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
fHandle:THandle;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
const
AVerb = 'open';
AParams = '';
AFileName = 'iexplore.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := SW_HIDE;

ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);

fHandle := Windows.FindWindow( 'IEFrame', nil );
Windows.SetParent( fHandle, Handle );

Resize;
ShowWindow(fHandle, SW_SHOW);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
if IsWindow(fHandle) then begin
SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
SWP_ASYNCWINDOWPOS);
end;
end;

end.


همیشه که نام کلاس برنامه مورد نظر رو نمی دونیم؛ پس باید چکار کنیم؟
ضمنا در ویندوز 7 این کد کار نمی کنه

دلفــي
جمعه 06 آبان 1390, 15:08 عصر
همیشه که نام کلاس برنامه مورد نظر رو نمی دونیم؛ پس باید چکار کنیم؟


مي تونيد نام كلاس رو خودتون با كدنويسي بدست بياريد (كمي جستجو در نت بد نيست !)