3

こんにちは、次のようないくつかのシステム プロパティを開く必要があるプログラムを作成する必要があります。

Process sound = new Process();
sound.StartInfo.FileName = "mmsys.cpl";
sound.Start();

// Place 1

Process device = new Process();
device.StartInfo.FileName = "hdwwiz.cpl";
device.Start();

// Place 2

// Other Code doing sth

それはうまくいきますが、私の問題は、最初にmmsys.cplを実行し、ユーザーが何をしなければならないかを確認するのを待ち、ウィンドウを閉じた後にhdwwiz.cplを実行する必要があることです。

だから// Place 1私は書いた:

sound.WaitForExit();

しかし、mmsys.cpl は単なるショートカットであり、プロセス "explorer.exe" として実行され、hdwwiz.cpl は "mmc.exe" として実行されるため、コマンドはそのウィンドウを閉じるまで待機せず、両方を同時に実行するため、機能しません。

私が望むようにsthを作る方法はありますか?

4

2 に答える 2

1

実行しているものは、コントロール パネル ファイルと呼ばれます。従来のものは、次のようmmsys.cplに名前で処理されたプロセスでホストされていますrundll32.exe 。次を使用して、これらのプロセスのリストをポーリングできます。

Process[] processes = Process.GetProcessessByName("rundll32.exe");

WaitForExitこれらのProcessオブジェクトを呼び出します。mmc.exe新しいベースの .CPLについても同じことができます。

明らかに、複数のコントロール パネル アプレットが同時に実行されている場合、これは優れたソリューションではありません。この場合、おそらくユーザーに警告を出して、他のものを閉じることができます。

他のより複雑なソリューションでは、pinvoke を使用して Win32 関数を呼び出し、EnumWindowsトップ レベル ウィンドウのリストを取得し、それらをフックしてWM_CLOSEメッセージを監視する必要があります。

于 2013-07-06T21:03:48.770 に答える