8

「昔」、私は Windows ユーザー向けのシンプルなツールを作成しました。これは、コンピューターの前で何をしているかを追跡するものでした (単純なアクティビティ モニター)。GetForegroundWindow、GetWindowThreadProcessId などの Win32 API と関数を使用していました。

昨日、新しい Windows 8 をインストールしましたが、プログラムを実行するのに疲れました。私は 50% の成功を収めました。「クラシック」デスクトップでは、いつものように動作します:)。Metro UI の場合、WWAHost :( 詳細なしのアプリケーションを 1 つだけ取得しました。

私の質問は、Metro UI でアクティブなアプリケーションを追跡する方法はありますか? 手伝ってくれてありがとう

更新: Win32 から Metro UI アプリにアクセスしようとしていますが、別の Metro アプリから Metro アプリにアクセスすることは不可能であることを知っています

4

2 に答える 2

1

WinRT では、アプリケーションが最上位のアプリケーションであることがわかります。また、アプリが最上位のアプリケーションでない場合、スレッドは中断され、カーネルはアプリに対してそれ以上の操作をスケジュールしません。話の終わり。

これは、達成したいことを WinRT では実行できないことを意味します。デスクトップにアクセスできる常駐アプリまたはサービスのように考えています。これらのアプリには 2 つの利点があります。1) それらは常に実行されています。そして、2) 彼らはあなたが望むことをするための API を持っています。

WinRT は意図的にアプリをサンドボックスに入れて、ユーザー エクスペリエンス、パフォーマンス、およびバッテリ寿命を保護します。あなたのシナリオとスコアがあなたのものに似ていることは、デスクトップ アプリの継続的な必要性を強調しています。(これらのタイプのアプリが引き続き必要である限り;))。

申し訳ありませんが、これが悪いニュースである場合。

他のアプリの列挙について。これも不可能です。別のアプリがインストールされているか、実行中かはわかりません。プロトコルのアクティブ化またはファイルのアクティブ化、または (ある意味で) 共有コントラクトを介して、別のアプリを呼び出すことができます。しかし、彼らがメッセージを受け取ったかどうか、そしてユーザーが最初にそれをインストールしたかどうかはわかりません。これは設計によるものです。

WinRT アプリケーションで Win32 API に pinvoke できることに注意してください。それは多くの問題を引き起こし、ストアへの認定を取得するのに頭痛の種になる可能性があります. しかしそれでも、すべての API が公開されているわけではありません。そして、この特定のユース ケースは初心者向けではないことがわかります。

于 2012-11-27T03:32:45.480 に答える
0

これは不可能だと確信しています。Windows 8 の「Metro」では、アクティブなアプリケーションは 1 つだけです。最上位のアプリケーションが実行されている間、他のすべてのアプリケーションは一時停止状態になります。これにより、現在実行中の他のアプリケーションを監視するアプリケーションを作成できなくなります。

Windows 8 アプリのライフサイクルに関する多数の記事を参照してください。

于 2012-11-26T09:37:13.070 に答える