放大以显示由进程捕获的窗口部分
本文关键字:窗口部 进程 显示 放大 | 更新日期: 2023-09-27 18:34:03
我正在尝试使用捕获另一个并发应用程序的进程并将其显示在我自己的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);
}
但是,代码的作用是它将捕获外部进程的整个窗口。我想实现的是"裁剪"这个窗口;仅显示外部进程窗口的特定区域。
我应该如何做到最好?
谢谢。
不要将表单设置为父项,而是将面板设置为父项:
SetParent(appWin, panel1.Handle);
SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
MoveWindow(appWin, -100, -100, panel1.Width+100, panel1.Height+100, true);
请注意,我将应用程序移至 (-100, -100)。 这意味着应用程序的左上角将从面板的左上角向左和向上移动 100 像素(但看不到,因为面板会将其夹住)。 我调整了宽度/高度,无论窗口移动了多少,以便它延伸到面板的右下角。