Question
開発メモ その38 プロセスIDからUWPAppのHWNDは取得できるか?からの追加調査というか本題。
ウィンドウハンドルが取得できれば、たいていのことはできるのがWindows。
WinFormsでもWPFでも、結局かゆいところはWin32API様を三顧の礼で迎え入れる必要がある。
で、サンドボックス環境で動作するUWPアプリに対して、ウィンドウハンドルを経由して操作ができるか。
これができるかどうかは結構大きい。
Getting HWND off of CoreWindow object in UWPにで、Microsoftの人間がこのようにコメントしている。
Please note there are no supported APIs for UWP that accept an HWND. Any API you call will fail Windows Store certification, and even if you avoid the Windows Store (eg, side-load or go through an Enterprise deployment) there is no guarantee the app will work in the future.
パッと見、Win32APIの呼び出しがダメ、みたいに見えるけど、よく読むと、**(APIを呼び出すと)ストア認証に失敗する** って言っているだけで、APIそのものの成否ついては言及していない。
なので、試してみた。
Answer
一部成功。
1 | using System; |
電卓に対してDELキーを送信し、数字を消すだけ。
でも、電卓はSetForegroundWindowで前面には来たけど、SendInputが失敗する。
Win7の電卓アプリで、似たようなコードが成功するかは確認済み。
Supplement
結局、Windows 10 Universal App Key Press Simulation, what OS Context?という記事で、Microsoftの人間が
There is no way to synthesize input in a Universal app. The SendInput API (and equivalents) that InputSimulator uses to inject input is available only to classic Win32 desktop apps, not to Windows Runtime apps.
と発言しているから無理なんでしょう。
全てのWin32APIが無効、というわけではないが、入出力系は全滅かもしれない。