2012-05-20 4 views
42

私のWPFアプリケーションに複数のウィンドウがある場合、Win32 API呼び出しで使用できるように、各WindowインスタンスのhWndを取得する必要があります。私がやりたいもののWindowインスタンスのhWndを取得する方法は?

例:

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

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

+2

[WPFポップアップコントロールのHwndを取得することはできますか?](http://stackoverflow.com/questions/7815121/is-it-possible-to-get-the-hwnd-of- a-wpf-popup-control) –

+2

@ HansPassant:他の質問は、ポップアップコントロールに関するものであり、実際のウィンドウに関するものではありません。 (はい、この質問も間接的に回答されましたが、重複していません)。 – Douglas

答えて

58

WindowInteropHelperはあなたの友人です。これには、Windowパラメーターを受け入れるコンストラクターと、ウィンドウハンドルを返すHandleプロパティがあります。ダグラスの答えに拡張

Window window = Window.GetWindow(this); 
var wih = new WindowInteropHelper(window); 
IntPtr hWnd = wih.Handle; 
9

Windowがまだ示されていない場合、それはHWNDを持っていない可能性があります。

var window = Window.GetWindow(element); 

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

Window.GeWindowことがnullを返すことができますので、あなたは本当にあまりにもことをテストする必要があります:あなたは、ウィンドウがEnsureHandle()を使用して表示される前に1が作成されるように強制することができます。

関連する問題