2009-05-25 11 views
0

explorer.exeがシステムシェルとして実行されていることを確認する必要があります。私は何をする必要があることです。explorer.exeをWindowsシェルとして実行するかどうかを判断しますか?

  • は(シェルなど)explorer.exe
  • 実行explorer.exe
  • と現在のシェル(Winlogon\Shell)を上書き自分の殻を持つ現在のシェルを上書きします。最後の2つの手順の間

はレースです:

  • 私はあまりにも早く自分の殻を現在のシェルを上書きした場合、唯一の「マイドキュメント」ウィンドウが開きます。

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

私がやることに成功し、最良のようなトレイウィンドウを待つことです。

ちょっとずさんなようだ
while(!FindWindow("Shell_TrayWnd", NULL)) { 
    sleep(250); 
} 

、より良い方法はありますか?

+0

私は何をしています。これはWinlogon \ Shellレジストリキーにあります。 – arul

+1

explorer.exeをシェルとして実行して後で置き換えるのはなぜですか? –

+0

キオスクソフトウェア。 – arul

答えて

6

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

+0

これはどちらもうまくいきませんが、ある時点では、エクスプローラの実行後もアクセス可能なままにする必要があります。 – arul

+0

あなたのアプリには、SwitchDesktopを使って実行中のデスクトップを切り替えるための機能が組み込まれています。 – ScottTx

+0

私は私のアプリケーションのステータスウィンドウを "メインウィンドウ"に表示する必要があることを意味します。 – arul

-1

実行中のプロセスを監視してみませんか? 手順1より前の段階では、explorer.exeはデフォルトのシェルではないので、リストされるべきではありません。 ステップ2これを起動してプロセスを監視します。プロセスは使用可能になった時点で変更できます。

.NETフレームワークであるかどうかはわかりませんが、StartInfoクラスのイベントであれば十分です。

+0

これは動作しません。プロセスは、生成されるとすぐにリストされます。プロセスのスポーンとエクスプローラの準備が完了するまでの時間は長いです(完全にランダムではありません)。 – arul

0

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

litstepや他のデスクトップ置き換えソフトウェアのようにsystem.iniにシェルを設定するだけでしたか?前後に切り替える必要がある場合は、ShellOnまたはLiteSpawnのようなシェルスイッチャーを検討してください。

+0

System.iniは機能しません。これはW95時代の古い方法です。私はまた、私は元の投稿に掲載されたものがうまく動作する、私はちょうど良い方法があるかもしれないと思ったサードパーティーの解決策を必要としません... – arul

3

(実際に文書化されているように)最善の方法は、最上位のウィンドウを作成し、「タスクバー作成」のブロードキャストを待つことです。そうすることで、Sleep()呼び出しを取り除くこともできます。

ブロードキャストはhereと記載されています。

関連する問題