Form içinde exe açmak!

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 01:00

Form içinde exe açmak!

Mesaj gönderen Shou » 01 Eki 2011 04:27

Merhaba ben form içinde exe açmak istiyorum bazı programlarda gördüm form içinde açıyolar exe'yi bunu nasıl yaparım şöyle yaptım fakat form dışında açıyor yine ;

Kod: Tümünü seç

WinExec('program.exe',sw_ShowNormal); // bu form dışı açıyor
diğeri ;

Kod: Tümünü seç

ShellExecute(Handle, 'open', 'program.exe', '', nil, SW_SHOW);
Not : uses , "shellapi" eklenmesi gerek.

her 2 kodda form dışında açıyo form içinde nasıl açarız yardım edersenız sevinirim?

adnansirca
Üye
Mesajlar: 133
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca » 02 Eki 2011 12:08

:ara
Forumda ve Google da fazlasıyla örnek bulabilirsiniz.
Burayı inceleyin.
viewtopic.php?f=2&t=2094&start=0

Ben kendi projelerimde aşağıdaki kodları kullanıyorum.
Button Clik

Kod: Tümünü seç

var
  Rec: TShellExecuteInfo;
  fHandle : HWND;
const
  AVerb = 'open';
  AParams = '';
  AFileName = 'Project2.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( nil,'Form2'  );//Formun Caption değerini biliyorsak bu şekilde kullanabiliriz.
  Windows.SetParent( fHandle, PAnel1.Handle );
  Resize;
  ShowWindow(fHandle , SW_MAXIMIZE);
Form Resize

Kod: Tümünü seç

var
fHandle : HWND;
begin
  if IsWindow(fHandle) then begin
    SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
      SWP_ASYNCWINDOWPOS);
  end;

adnansirca
Üye
Mesajlar: 133
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca » 02 Eki 2011 09:18

Xearth yazdı:Abi verdigin kodu çalıştıramadım birde şöyle açıklıyım ben formun içinde açmak istiyorum exe'yi formu kapatınca içinde çalışan exe'de kapanacak o yüzden , yardımcı olursanız sevinirim.
Konu dağılmasın diye cevabını burdan veriyorum.

Muharrem beyin açıklama yaptığı mesaj baya güzel ve fikir verici.
O mesajı dikkatlice incelemenizi tavsiye ederim. Uygulama adı veya caption değerine göre uygulamaya nasıl erişileceği konusunda yeterli bilgi mevcut.

Ulaşmak istediğiniz uygulama kendi yazdığınız uygulama mı. Eğer kendi uygulamanız ise Ana Formun Caption değerini rahatlıkla biliyorsunuz demektir.

Size gönderdiğim kodları ben rahatlıkla kullanabiliyorum.
Tam istediğiniz şekilde çalışıyor aslında.
Aldığınız bir hata var mı, programda kesilme varsa belirtin. Hataya göre çözüm bulunabilir.

Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 01:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou » 02 Eki 2011 09:23

Abi ben çalıştıramadım nasıl olucak anlamadım birde şöyle bir kod buldum bakarmısınız ;

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
Var
WindowsNumarasi : THandle;
WindowsAdi : String;

begin
WindowsNumarasi := FindWindow(nil, 'Hesap Makinası');

if WindowsNumarasi= 0 then begin
ShowMessage('pencere bulunamadı');
end else
Windows.Setparent( WindowsNumarasi, Form1.Handle );
end;
bu kod'da pencere bulunamadı diyor fakat ben bunu project2.exe çalıştırsın yapamazmıyım?

adnansirca
Üye
Mesajlar: 133
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca » 02 Eki 2011 09:32

verdiğim linkteki kodlar ve açıklamalar mantığını anlayabilmeniz içindi.
İlk cevapta verdiğim (kendi kullandığım) örnek kodları deneyin. Çalışıyor.
Project2 uygulama adı.
Form2 uygulamanın ana formunun caption ı.
Ulaşmak istediğiniz uygulamaya göre bu değerleri değiştirmelisiniz.

Örnek bir uygulamayı gönderiyorum.
http://hotfile.com/dl/131259471/b09f11d ... e.rar.html

Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 01:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou » 02 Eki 2011 09:40

Hocam teşekkür ederim verdigin exe çalışıyorda ben delphi 7 kullanıyorum proje açılmadı bende hata verdı bana ;

button2 bastıgımızda "/xxx/project9.exe" açan kodları buraya verırmısınız nasıl çalıştıracagım anlatırmısınız?

adnansirca
Üye
Mesajlar: 133
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca » 02 Eki 2011 09:49

İlk cevapta verdiğim mesajın benzeri olacak. Forum yöneticileri kusura bakmasın.
Kendi uygulamanızdaki forma bir adet panel yerleştirin ve adını panel1 yapın.
Daha sonra formunuzun ilgili yerlerine aşağıdaki kodları yazın.

Button2 click

Kod: Tümünü seç

var
  Rec: TShellExecuteInfo;
  fHandle : HWND;// Handle id. 
const
  AVerb = 'open';//Uygulamayı açıyoruz.
  AParams = '';//Parametreler
  AFileName = 'xxx\Project9.exe';//Erişmek istediğimiz uygulamanın adı.
  ADir = '';//Uygulamanın bulunduğu dizin 
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( nil,'Form7'  );//Caption değerini buradan alıyoruz. Uygulama adına göre çağırmak için parametrelerin yerini değiştirip uygulama adını yazmak gerekir.
  Windows.SetParent( fHandle, PAnel1.Handle );
  Resize;
  ShowWindow(fHandle , SW_MAXIMIZE);
  //http://www.delphiturkiye.com/forum/viewtopic.php?f=2&t=2094&start=0  (mrmarman)
Form un Resize yordamına

Kod: Tümünü seç

var
fHandle : HWND;
begin
  if IsWindow(fHandle) then begin
    SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
      SWP_ASYNCWINDOWPOS);
  end;

Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 01:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou » 02 Eki 2011 09:55

Abi tekrar tekrar teşekkür ederimde şimdi dediğin gibi eklıyorum button2.click ;

Kod: Tümünü seç

  Rec: TShellExecuteInfo;
ile ;

Kod: Tümünü seç

  Rec.fMask        := SEE_MASK_NOCLOSEPROCESS;
kısmı hata veriyor kırmızı oluyor + ;

Form un Resize yordamına ;

Kod: Tümünü seç

var
fHandle : HWND;
begin
  if IsWindow(fHandle) then begin
    SetWindowPos(fHandle, 0, 0, 0, ClientWidth, ClientHeight,
      SWP_ASYNCWINDOWPOS);
  end;
bunu koy demişsinde resize yordamı nedir onu bılmıyorum + siz delphi xe kullanıyorsunuz ben delphi 7 hatırlatıyım tekrar , yardımcı olursanız sevinirim şimdiden teşekkürler..

Not : abi verdigin exe denedımde form içinde exe açınca pencere dışında açıldıgı gozukuyorç..

adnansirca
Üye
Mesajlar: 133
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca » 02 Eki 2011 10:39

Resize formun boyutları değiştiğinde çalışan yordamdır.

Hata konusunda googledan arama yapın isterseniz. Ben de delphi 7 mevcut değil.

Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 01:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou » 06 Eki 2011 06:20

Arkadaşlar formun içinde exe açmayı bilen yokmu?

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3037
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Form içinde exe açmak!

Mesaj gönderen sabanakman » 07 Eki 2011 10:14

Önce programı aç, sonra FindWindow ile ilgili pencereyi bul ve SetParent ile formunun içine al. Zaten yukarıda bunlar önerilmiş hep. Bu iş bu şekilde yapılabiliyor daha mesaj yazmanız abes olmuş. FindWindow ile pencereyi bulamadıktan sonra bu işlemi gerçekleştiremezsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

notname
Üye
Mesajlar: 149
Kayıt: 11 Şub 2005 02:15

Re: Form içinde exe açmak!

Mesaj gönderen notname » 07 Eki 2011 07:35

herşeyden önce handle(s) ve windows ile ilgili yeterli bilgiye sahip ol. sonra kodların ne işe yaradığını anlarsın :) gördüğüm kadarıyla delphi hakkında hiç bilgin yok. hazır verilen kodlarla olacak işler değil. sorunun cevabı @setparent

Cevapla