none
C# Form Panelinde Program açmak mümkün mü? RRS feed

  • Soru

  • Herhangi bir programı C# Form Panelinde açmak ve kullanmak (panelde iken etkileşimde bulunmak) mümkün mü? Şayet bir yolu varsa  item olarak ne kullanmalıyım (Panel, PictureBox vs) veya nasıl kodlamalıyım? Cevaplar için şimdiden teşekkürler.
    17 Ocak 2019 Perşembe 19:09

Tüm Yanıtlar

  • Merhaba;

    Panel içerisinde kullanmak elbette mümkün. Burada örnek bir proje var. İnceleyebilirsin.


    İletişim

    18 Ocak 2019 Cuma 05:47
    Moderatör
  • Barış bey, öncelikle cevap için teşekkürler. Verdiğiniz örneği denedim, hatta yorumları okuduğum halde denedim, anladım ki; dahili uygulama kodlaması imiş. Aslında cevaptan sonra kullandığım kodu paylaşmayı düşündüm, çünkü farklı bir çok yol denedikten sonra şu soruya takılmıştım; Dahili Windows uygulaması açılabiliyor, fakat harici bir uygulamayı, hatta Form'a gömülü kaynak olarak bir uygulamayı açmak mümkün mü? Resources'e ve Properties'e Uygulamayı yükledim, "Gömülü Kaynak" ayarı yaptım, Hatta; Temp klasörüne geçici olarak indirip, çalışmasını ve çalıştıktan sonra Temp klasöründen silinmesini sağladım olmadı (Form dışında bu yöntem sorunsuz açılsa da Form içinde açamadım, olmadı) , Bazı kodları egale ettim, tekrar denedim zira uygulama açılsa da yine form dışına açılıyor ve bir hata veriyor. İşte egale edilen ve kullanılan kodun tamamı: Umarım bir çözümü olur. Şimdiden teşekkürler.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Openfile
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            [DllImport("user32.dll")]
            static extern IntPtr SetParent(IntPtr child, IntPtr newParent);
            [DllImport("user32.dll")]
            static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int IParam);
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            private static extern bool IsWindowVisible(IntPtr hWnd);
            private const int WM_SYSCOMMAND = 274;
            private const int SC_MAXIMIZE = 61488;
    
            private void button1_Click(object sender, EventArgs e)
            {
                //byte[] resourceFile = Properties.Resources.Pid_Dialog;
                string open = Path.Combine(Path.GetTempPath(), "Pid_Dialog.CETRAINER");
                //System.IO.File.WriteAllBytes(open, resourceFile);
                Process p = Process.Start(open);
                //System.IO.File.SetAttributes(open, FileAttributes.Hidden);
                //Thread.Sleep(3000); //sleep for 3 seconds
                while(p.MainWindowHandle == IntPtr.Zero || !IsWindowVisible(p.MainWindowHandle))
                {
                    System.Threading.Thread.Sleep(10);
                    p.Refresh();
                }
    
                SetParent(p.MainWindowHandle, this.Handle);
                SendMessage(p.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
    
                //System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
                //Console.WriteLine("[DONE]");
                //System.IO.File.SetAttributes(open, FileAttributes.Normal);
                //File.Delete(open);
            }
        }
    }

    18 Ocak 2019 Cuma 09:25