0

私のプロジェクトでは、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!");
}
4

1 に答える 1

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

明らかに、RECTに対するあなたの宣言は偽物です。HeightまたはWidthプロパティはなく、.NETRectangleタイプのようには動作しません。pinvoke.netWebサイトやPinvokeInteropAssistantツールなどの適切なソースを使用して、pinvoke宣言を常に再確認してください。適切な宣言は次のとおりです。

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

それに応じてif()ステートメントを調整します。

于 2012-11-29T12:48:39.083 に答える