窗体句柄强转成control

 
摘自:http://zhidao.baidu.com/question/96926630.html?si=1
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsApplication1
{
    public partial class Form2 : Form
    {

        [DllImport("user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
        [DllImport("user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
        [DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
        private const int WM_SYSCOMMAND = 0x112;
        private const int SC_MAXIMIZE = 0xF030;
        private const int SC_MINIMIZE = 0xF020;
        private const int SC_RESTORE = 0xF120;
        public const int SW_HIDE = 0;
        public const int SW_SHOW = 5;
        [DllImport("user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        private static extern int ShowWindow(int hwnd, int nCmdShow);

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            //Process p = null;
           // p = System.Diagnostics.Process.Start("c:\\windows\\system32\\cmd.exe");
             ShellExecute(this.panel1.Handle.ToInt32(), "open", @"c:\\windows\\system32\\cmd.exe", null, ".", SW_HIDE);  // 让CtrlDemo.exe运行在PANEL里
            IntPtr h = FindWindow(null, "c:\\windows\\system32\\cmd.exe");
            //关键在这里
            var frm = (Control)Form.FromHandle(h);
            //使你的Form可以嵌入别的容器
          
            //frm.Visible = true;

            SetParent(h, this.panel1.Handle); //嵌套到panel1内  
            SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
            ShowWindow(h.ToInt32(), SW_SHOW);

        }
    }
}
posted @ 2011-01-07 16:56  叮/当  阅读(790)  评论(0编辑  收藏  举报