ウィンドウのタイトル名を入力してボタンを押すと、自フォームの中にそのウィンドウを取り込みます。
…何に使えるのやら…(笑)
using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WindowCatcher { public partial class Form1 : Form { private List<IntPtr> windows; public Form1() { InitializeComponent(); this.SetBounds(0, 0, 640, 480, BoundsSpecified.Size); windows = new List<IntPtr>(); } private void btnCatch_Click(object sender, EventArgs e) { IntPtr hwnd = FindWindow(null, cmbWindowTitle.Text); if (hwnd != null && !windows.Contains(hwnd)) { MoveWindow(hwnd, 0, 0, 320, 240, true); SetParent(hwnd, this.Handle); windows.Add(hwnd); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // 解放 foreach (IntPtr hwnd in windows) { SetParent(hwnd, (IntPtr)null); } } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr FindWindow( string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] public static extern int MoveWindow( IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr SetParent( IntPtr hWndChild, IntPtr hWndNewParent); } }
Win32APIにはGetDesktopWindowというデスクトップの実体のハンドルを取得するやつもあるので、それを使って得たウィンドウを取り込んだらどうなるのかなー、わくわく♪…って試してみましたが、何も起こりませんでした。ハンドルはちゃんと取得できてるみたいなんだけどねー。ちゅまんなーい。