// <summary>
/// 查找窗体
/// </summary>
/// <param name="lpClassName">窗体类名</param>
/// <param name="lpWindowName">窗体标题</param>
/// <returns></returns>
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// FindWindowEx 比 FindWindow 多出两个句柄参数
/// </summary>
/// <param name="hwndParent">要查找子窗体的父窗体句柄</param>
/// <param name="hwndChildAfter">子窗体句柄</param>
/// <param name="lpClassName"></param>
/// <param name="lpWindowName"></param>
/// <returns></returns>
/// <remarks>如果 Parent 是 0, 则函数以桌面窗口为父窗口, 查找桌面窗口的所有子窗口;
/// 如果是 HWND_MESSAGE, 函数仅查找所有消息窗口;
/// 子窗口必须是 Parent 窗口的直接子窗口;
/// 如果 Child 是 0, 查找从 Parent 的第一个子窗口开始
/// 如果 Parent 和 Child 同时是 0, 则函数查找所有的顶层窗口及消息窗口.
/// </remarks>
[DllImport("User32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetWindowDC(IntPtr hWnd);
/// <summary>
/// 设置父窗体
/// </summary>
/// <param name="child">要设置的窗体句柄</param>
/// <param name="newParent">要设置为父窗体的句柄</param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr child, IntPtr newParent);
private void Form1_Load(object sender, EventArgs e)
{
IntPtr P = FindWindow("Progman", "Program Manager");
IntPtr shellHandle = FindWindowEx(P, IntPtr.Zero, "SHELLDLL_DefView", null);
IntPtr viewHandle = FindWindowEx(shellHandle, IntPtr.Zero, "SysListView32", null);
SetParent(this.comboBoxTreeView1.Handle, viewHandle);
}