UWPウインドウからパッケージ名を取りたい
UWPアプリはApplicationFrameWindowクラスウインドウの子供にWindows.UI.Core.CoreWindowクラスウインドウが別プロセスでいるのでそこからプロセスIDを取得してよしなに。って感じの説明がぐぐるとヒットしますが、UWPウインドウがアクティブの場合、Windows.UI.Core.CoreWindowクラスウインドウが何故か存在しません。そこでApplicationFrameWindowクラスウインドウから情報を取得ってことになりますなるなった。
SHGetPropertyStoreForWindowを呼び出してIID_IPropertyStoreからPKEY_AppUserModel_IDを取得することでパッケージを取得できます。
IPropertyStore store; Guid IID_IPropertyStore = new Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99"); SHGetPropertyStoreForWindow(window.Handle, ref IID_IPropertyStore, out store); PropertyKey PKEY_AppUserModel_ID = new PropertyKey( new Guid("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3"), 5); store.GetValue(ref PKEY_AppUserModel_ID, out PROPVARIANT v); appName = Marshal.PtrToStringUni(v.value);
twitter公式で9E2F88E3.Twitter_wgeqdkkx372wm!x554f661dyd360y462cy8743yf8a99b7d41dbxが取れたら成功。