1

概要
プロセス/ PIDによって、特定のアプリケーションがWinRT(別名「メトロ」)モードで実行されているかどうかを検出する必要があります。これを行う良い方法はありますか?

失敗した試行と観察

  • OpenProcess()を呼び出し、GetPackageId()を呼び出し!= APPMODEL_ERROR_NO_PACKAGEをチェックします。これは一部のプロセスで機能するようですが、Metroモードで実行しているChromeなどの他のプロセスはチェックに失敗します。
  • Metroアプリは、常にsvchost.exeによってホストされているように見えます(親など)。

何か案は?「しないでください」や「なぜ」は省略してください。この特定の質問には役立たないため、回答。

4

2 に答える 2

1

IsImmersiveProcessプロセスが Metro モードで実行されている場合は true を返します。検出アプリがサービスとして実行されている場合、この呼び出しは常に false を返すことに注意してください。

于 2013-07-24T23:23:08.930 に答える
0

Metro アプリが WWA アプレットを実行している場合は、PID からコマンド ライン引数を取得し、それが WWAHOST.exe かどうかを確認します。すべての Metro アプリが WWA アプレットとして実行されているわけではありません。たとえば、IE は Metro モードでスタンドアロンの exe として実行されます。

これは大げさに聞こえるかもしれませんが、IE がメトロ モードであるかどうかを検出するのに役立ちました。メトロ モードの IE プロセスは、iexplore.exe のままです。Metro モードでのルートの親プロセスは Wininit.exe で、非 Metro モードでは explorer.exe です。したがって、IE の PID のルートの親 PID を見つけ、親の PID から親のプロセス名を取得し、それを「Wininit.exe」または「Explorer.exe」と比較します。

于 2013-07-24T19:56:06.823 に答える