Winform 知道一个窗体的句柄,如何获取这个窗体,并添加控件
var frm = (Control)Form.FromHandle(h); h为句柄,我这里强转成control了,你可以自己看情况改动 我原来写过一个例子,调用cmd.exe窗口,并嵌入到自己的窗体内,你可以参考一下 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); } } }
标签:控件,26medical,int,句柄,CharSet,System,窗体,using,true From: https://www.cnblogs.com/1175429393wljblog/p/18223844