2010-12-15 16 views
6

アプリケーションのインストール中。一般的に、ユーザーはインストールの開始前にすべてのウィンドウを閉じるように求められました。インストールされていない場合、インストールは中部 で停止し、開いているウィンドウをすべて閉じるようにユーザーに依頼します。 XXXアプリケーションでコードを追加するように求められました。アプリケーションが実行中で、他のウィンドウ(例:エクスプローラ、ブラウザ、ワードなど)を開いた場合、アプリケーションはウィンドウのリストを開いたというウィンドウをスローする必要があります。 私はC#で始める方法をお勧めします。開いているウィンドウのリストを取得するC#

答えて

0

お試しSetWinEventHook P/Invoke経由のWinAPI機能。 EVENT_OBJECT_CREATEイベントをフックできますが、私は100%確実ではありません。私はC/C++でしかこれをやっていません。

1

System.Diagnostics.Processクラスを使用すると、マシンで実行されているすべてのプロセスの情報を取得できます。次に、意図したアプリケーション/プロセスが実行されているかどうかを調べることができます。

GetProcesses()またはGetProcessByName()のいずれかの方法を使用できます。参照のためにthis msdn linkを参照してください。私は同じことを達成するより効率的な方法があると確信しています。このHTH

7

テスト:

var openWindowProcesses = System.Diagnostics.Process.GetProcesses() 
    .Where(p => p.MainWindowHandle != IntPtr.Zero && p.ProcessName != "explorer"); 

openWindowProcessesべきは、彼らがアクティブなメインウィンドウを持っている、開いているすべてのアプリケーションが含まれています。

エクスプローラがデスクトップのメインプロセスであり、決して閉じないでください。p.ProcessName != "explorer"をwhere式に置きます。

プロセスの実行を監視するには、ManagementEventWatcherクラスを使用できます。 thisをご覧ください。

+0

(可視メインウィンドウを持っている)あなたのシステム上の開いているすべてのアプリケーションを介して列挙するために、このようなforeachループを設定します。隠された窓は何ですか? – DReJ

+0

私は、この質問をした人はタイマーの使用について知っていると思います。このようなシナリオでは、非表示のウィンドウでプロセスを閉じるだけで十分だと思います。これらの状況では、プロセスはウィンドウより重要です。プログラマーはプロセスをチェックして、どのプロセスを開いてはならないかを調べる必要があります。これは、Whereメソッドの式を変更することで簡単に実行できます。 しかし、ありがとう!私は私の答えでプロセスを見ていることについていくつかの情報を追加します。 –

+0

お寄せいただきありがとうございます。一度実装すると私はあなたに結果を知らせます – user517206

1

を使用すると、タイマーにより、ウィンドウの一覧を取得する必要があるような問題点を解決するために

foreach (var process in Process.GetProcesses().Where(p => p.MainWindowHandle != IntPtr.Zero)) { 
    //do something with the process here. To display it's name, use process.MainWindowTitle 
    } 
+0

アプリケーションに複数の可視ウィンドウがある場合はどうなりますか? – Neolisk

関連する問題