59

私のWPFアプリケーションには複数のウィンドウがあります。Win32API呼び出しで使用できるように、各WindowインスタンスのhWndを取得できる必要があります。

私がやりたいことの例:

Window myCurrentWindow = Window.GetWindow(this);
IntPtr myhWnd = myCurrentWindow.hWnd; // Except this property doesn't exist.

これを行うための最良の方法は何ですか?

4

2 に答える 2

84

WindowInteropHelperあなたの友達です。Windowパラメータを受け取るコンストラクタと、Handleそのウィンドウ ハンドルを返すプロパティがあります。

Window window = Window.GetWindow(this);
var wih = new WindowInteropHelper(window);
IntPtr hWnd = wih.Handle;
于 2012-05-20T17:02:36.943 に答える
23

ダグラスの答えを拡張すると、Windowまだ表示されていない場合は、HWND がない可能性があります。次のコマンドを使用して、ウィンドウが表示される前に強制的に作成することができますEnsureHandle()

var window = Window.GetWindow(element);

IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle();

Window.GeWindowが返される可能性があることに注意してください。そのnullため、実際にそれもテストする必要があります。

于 2016-10-06T12:18:10.290 に答える