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 02:00

Form içinde exe açmak!

Mesaj gönderen Shou »

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: 135
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca »

: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: 135
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca »

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 02:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou »

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: 135
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca »

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 02:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou »

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: 135
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca »

İ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 02:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou »

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: 135
Kayıt: 14 Kas 2005 12:24

Re: Form içinde exe açmak!

Mesaj gönderen adnansirca »

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 02:00

Re: Form içinde exe açmak!

Mesaj gönderen Shou »

Arkadaşlar formun içinde exe açmayı bilen yokmu?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Form içinde exe açmak!

Mesaj gönderen sabanakman »

Ö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 »

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