C# 内嵌其他程序到自己程序

写一xxx聊天机器人啊什么的可能会用到这种技术.
比如把QQ窗体嵌入自己的winform中
其实很简单,调用两个API函数即可。

1 [DllImport("User32.dll ", EntryPoint = "SetParent")]
2 private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
3  
4 [DllImport("user32.dll ", EntryPoint = "ShowWindow")]
5 public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

调用:

1 Process p = new Process();
2                     p.StartInfo.FileName = "cmd.exe ";
3                     p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;//设置程序样式
4                     p.Start();
5                     SetParent(p.MainWindowHandle, this.Handle); //改变p的父窗口句柄为本程序句柄
6                     ShowWindow(p.MainWindowHandle, 3);//第一个参数窗口句柄,第二个参数 指定窗口如何显示  

参数二API原型:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_HIDE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序第一次显示窗口的时候应该指定此标志。

 

摘自:http://www.msdn5.com/thread-388-1-1.html

posted @ 2015-03-02 13:41  cnblogs_小A  阅读(6405)  评论(0编辑  收藏  举报