将表单绑定到另一个进程的窗口

时间:2012-11-29 09:25:47

标签: c# winforms

对于我的项目,我需要将我的Winform绑定到另一个进程的窗口,在这种情况下是浏览器的页面,其标题为“Client”,因此它只能在该窗口中移动它。什么是最好和最稳定的方法呢?

我已经尝试通过标题获取窗口过程,该过程成功。我通过使用getWindowRect方法得到窗口rect,但这似乎不起作用,因为窗体不能正确绑定到窗体。

IntPtr hWnd = FindWindow(null, this.windowTitle);
RECT rect1;
GetWindowRect(hWnd, out rect1);

RECT rect2;
GetWindowRect(this.Handle, out rect2);

if (!(rect2.Y >= rect1.Y && rect2.Y + rect2.Height <= rect1.Y + rect1.Height && rect2.X >= rect1.X && rect2.X + rect2.Width <= (rect1.X + rect1.Width) - (rect1.Width / 3)))
{
Console.WriteLine("You can't leave the window with this form! Naughty!");
}

1 个答案:

答案 0 :(得分:2)

if (!(rect2.Y >= rect1.Y && rect2.Y + rect2.Height <= rect1.Y + rect1.Height ...

显然,您对RECT的声明是虚假的。它没有Height或Width属性,它的行为与.NET Rectangle类型不同。始终使用pinvoke.net网站或Pinvoke Interop Assistant工具等良好来源仔细检查您的pinvoke声明。适当的声明是:

private struct RECT {
    public int Left, Top, Right, Bottom;
}

相应地调整你的if()语句。