WPFウィンドウのハンドルを見つける


109

Windowsフォームにはwin1.Handleプロパティがあり、これを思い出すとメインウィンドウハンドルのハンドルを返しますか?

WPFウィンドウのハンドルを取得する同等の方法はありますか?

私は次のコードをオンラインで見つけました、

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

しかし、私のアプリケーションには複数のウィンドウがあるので、それは私には役に立たないと思います。

ありがとう!!


24
エヴァンさん、フレンドリーなアドバイスをさせてください。カーゴカルトプログラミングをしないでください!オンラインで見つけたコードを分析します。Application.Current.MainWindowを渡していることがはっきりとわかります。それから、別のウィンドウへの参照を渡すことで、答えが得られると考えることができます。私はWindowInteropHelperを使用したことがありませんが、それでもそれを推論するだけで質問に答えることができました。
Gregory Higley、

1
あなたは正しい、ありがとう!今日は疲れました。
エヴァン

5
問題ない!そして、私はそれを批判として意味するのではなく、単に参考にするためにです。私たちは皆、時々小さなカーゴカルチャーをしました。:)
Gregory Higley

回答:


142

まあ、を渡す代わりにApplication.Current.MainWindow、必要なウィンドウへの参照を渡すだけですnew WindowInteropHelper(this).Handle


FileSaveコモンダイアログがトップレベルウィンドウへの参照を取得することを発見したので、たとえば、アプリケーションのMainWindowへの参照を渡すことができます。本当に必要なときに備えて相互運用サービスを保存します。
デビッドA.グレイ

39

WindowsInteropHelperクラスでウィンドウを使用するだけです。

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

現在、アプリケーションのメインウィンドウを求めています。メインウィンドウには常に1つあります。ただし、System.Windows.Windowから派生したWindowクラスであれば、どのWindowでも同じ手法を使用できます。



3

Windowなんらかの理由でアプリケーションのすべてののウィンドウハンドルが必要な場合は、Application.Windowsプロパティを使用してすべてのWindows WindowInteropHandlerを取得し、を使用して、すでに示したようにハンドルを取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.