winform窗体中嵌入exe程序界面

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using System.Diagnostics; using System.Runtime.InteropServices;

namespace AirWay.CJRS.UI.Protal.Modules {    

public partial class FrmVideo : DevExpress.XtraEditors.XtraForm     {        

   private Process process = null;

        private IntPtr appWin;

        private string exeName = "";

        [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId", SetLastError = true,

            CharSet = CharSet.Unicode, ExactSpelling = true,

            CallingConvention = CallingConvention.StdCall)]

        private static extern long GetWindowThreadProcessId(long hWnd, long lpdwProcessId);

        [DllImport("user32.dll", SetLastError = true)]

        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", SetLastError = true)]

        private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

        [DllImport("user32.dll", EntryPoint = "GetWindowLongA", SetLastError = true)]

        private static extern long GetWindowLong(IntPtr hwnd, int nIndex);

        [DllImport("user32.dll", EntryPoint = "SetWindowLongA", SetLastError = true)]

        private static extern long SetWindowLong(IntPtr hwnd, int nIndex, long dwNewLong);

        //private static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

        [DllImport("user32.dll", SetLastError = true)]

        private static extern long SetWindowPos(IntPtr hwnd, long hWndInsertAfter, long x, long y, long cx, long cy,  long wFlags);

        [DllImport("user32.dll", SetLastError = true)]

        private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);

        [DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]

        private static extern bool PostMessage(IntPtr hwnd, uint Msg, long wParam, long lParam);

        private const int SWP_NOOWNERZORDER = 0x200;

        private const int SWP_NOREDRAW = 0x8;

        private const int SWP_NOZORDER = 0x4;

        private const int SWP_SHOWWINDOW = 0x0040;

        private const int WS_EX_MDICHILD = 0x40;

        private const int SWP_FRAMECHANGED = 0x20;

        private const int SWP_NOACTIVATE = 0x10;

        private const int SWP_ASYNCWINDOWPOS = 0x4000;

        private const int SWP_NOMOVE = 0x2;

        private const int SWP_NOSIZE = 0x1;

        private const int GWL_STYLE = (-16);

        private const int WS_VISIBLE = 0x10000000;

        private const int WM_CLOSE = 0x10;

        private const int WS_CHILD = 0x40000000;

        private static readonly string StartupPath = Application.StartupPath + @"\";

 

        public string ExeName         {

            get { return exeName; }

            set { exeName = value; }

        }

        public FrmVideo()         {             InitializeComponent();         }

        /// <summary>         /// Load         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void FrmVideo_Load(object sender, EventArgs e)         {            

    this.exeName = StartupPath + @"Video/Test.exe";

            try            

   {

                // Start the process

                process = System.Diagnostics.Process.Start(this.exeName);

                // Wait for process to be created and enter idle condition

                process.WaitForInputIdle();

                // Get the main handle

                appWin = process.MainWindowHandle;

            }

            catch (Exception ex)             {

                MessageBox.Show(this, ex.Message, "Error");

            }

            // Put it into this form

            SetParent(appWin, this.Handle);

            // Remove border and whatnot

            // SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);

            // Move the window to overlay it on this window

            MoveWindow(appWin, 0, -30, this.Width, this.Height, false);

            //设置一个Panel挡住退出按钮             //var panel = new Panel {Location = new Point(219, 350), Size = new Size(161, 96), AutoSize = false, BackColor = Color.DarkGreen};             //this.Controls.Add(panel);

        }

        /// <summary>         /// 退出         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void FrmVideo_FormClosed(object sender, FormClosedEventArgs e)        

{               process.Kill();

 }  

}

}

posted @ 2012-05-31 10:05  周易辰  阅读(812)  评论(0)    收藏  举报