我正在尝试使用捕获另一个并发应用程序的进程并将其显示在我自己的WinForm的面板中。我使用的代码:
private void button1_Click(object sender, EventArgs e)
{
Process[] myProc = Process.GetProcessesByName("the_external_program_i_want");
Process p = myProc[0];
IntPtr appWin = p.MainWindowHandle;
SetParent(appWin, this.Handle);
SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
MoveWindow(appWin, panel1.Location.X, panel1.Location.Y, panel1.Width, panel1.Height, true);
}
然而,代码的作用是它将捕获外部进程的整个窗口。我想要实现的是“裁剪”这个窗口;仅显示外部进程窗口的特定区域。
我该如何做到最好?
感谢。
答案 0 :(得分:1)
不要将Form设为父级,而是将Panel设为父级:
SetParent(appWin, panel1.Handle);
SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
MoveWindow(appWin, -100, -100, panel1.Width+100, panel1.Height+100, true);
请注意,我将应用移至(-100,-100)。这意味着应用程序的左上角将向左移动100个像素,并从面板的左上角向上移动(但由于面板将剪切,因此不在视线范围内)。我调整了宽度/高度,无论窗口移动了多少,它都会延伸到面板的右下角。