0

explorer.exeがシステム シェルとして実行されることを確認する必要があります。私がする必要があるのは:

  • 現在のシェル ( Winlogon\Shell) を上書きします。explorer.exe
  • 実行explorer.exe(シェルとして)
  • 現在のシェルを自分のシェルで上書きします。

最後の 2 つのステップの間に競合があります。

  • 現在のシェルを自分のシェルですぐに上書きすると、[マイ ドキュメント] ウィンドウしか開きません。

問題は、エクスプローラーがシェルとして初期化されていることを確認するために呼び出すことができるイベント/ミューテックス/コールバックはありますか?

私がなんとかした最善の方法は、次のようなトレイウィンドウを待つことです。

while(!FindWindow("Shell_TrayWnd", NULL)) { 
     sleep(250);
}

ちょっとずさんなようですが、もっと良い方法はありますか?

4

4 に答える 4

6

私はこれをやろうとさえしません。新しい winsta0 デスクトップ (Win32 API CreateDesktop) を作成し、そのデスクトップでキオスク アプリケーションを起動して、それに切り替える必要があります。そうすれば、デフォルトのデスクトップをそのままにして、エクスプローラーを実行し、必要に応じてデスクトップに戻ることができます。私たちが構築したキオスク プロジェクトでは、これを行うことで多くの成功を収めました。

于 2009-06-03T19:58:57.180 に答える
3

より良い方法 (実際に文書化されているように) は、トップレベル ウィンドウを作成し、"TaskbarCreated" ブロードキャストを待つことです。そうすれば、Sleep() 呼び出しも取り除くことができます。

ブロードキャストはここに文書化されています。

于 2009-07-30T23:47:57.273 に答える
0

3 つのステップが必要な理由を説明していません。「キオスク ソフトウェア」は説明ではありません。

litestep や他のデスクトップ代替ソフトウェアのように、system.ini でシェルを単純に設定してみましたか? 前後に切り替える必要がある場合は、このタスク用に作成されたShellOnLiteSpawnなどのシェル スイッチャーを検討してください。

于 2009-06-07T18:37:15.383 に答える
-1

実行中のプロセスを監視してみませんか? ステップ 1 の前に、explorer.exe はデフォルトのシェルではないため、リストされません。ステップ 2 を開始し、プロセスを監視します。プロセスが利用可能になったら変更します。

あなたが .NET フレームワークを使用しているかどうかはわかりませんが、StartInfo クラスのイベントで十分である場合は、ニーズを満たす必要があります。

于 2009-06-02T21:07:55.563 に答える