Question
またまたつまらない疑問。
開発メモ その36 UWPAppはSystem.Diagnostics.Process.GetProcessesで列挙されるか?で試したように、プロセスIDがわかればWin32APIを駆使してHWNDを取得できるか?という件。
Answer
ちょっと面倒な模様。
開発メモ その37 UWPAppはどういうウィンドウ構造をしているか?で書いたように、UWPアプリは、
- ApplicationFrameWindow
- Windows.UI.Core.CoreWindow
という構造になっている状態。
で、Spy++ で調べた結果、先のSystem.Diagnostics.Process.GetProcessesメソッドで取得できるプロセスIDはWindows.UI.Core.CoreWindowのものであることがわかった。
つまり、
プロセスIDが違うのである。
なので、GetTopWindow、GetWindowThreadProcessId、GetWindow
を駆使して、トップレベルウィンドウから対象のプロセスIDを探す方法ではダメ。
面倒だが、トップレベルウィンドウのクラス名がApplicationFrameWindowかつ子ウィンドウのクラス名がWindows.UI.Core.CoreWindowになっているウィンドウを探し出し、そのプロセスIDと比較する必要がありそう。
具体的には、
1 | using System; |
これで、電卓のウィンドウハンドルを取得できる。