寫一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:激活並顯示一個窗口。如果窗口被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程序第一次顯示窗口的時候應該指定此標志。