4

皆さん、こんにちは。お時間をいただきありがとうございます。

C である種の監視アプリケーションを開発していますが、現在のタスク リストを取得する必要がありました。だから私はタスクリストを使用していて、popen(); のおかげで出力を取得しています。

ptr = popen("tasklist /V", "r");
while(1)
{
    if(fgets(temp, 255, ptr) == NULL) break;
    fputs(temp, log);
}

問題は、ほんの一瞬 cmd.exe ウィンドウがポップアップすることです。これは、新しいウィンドウにフォーカスが切り替わり、アプリケーションがフルスクリーンではなくウィンドウ モードになるため、非常に厄介です。

そのため、「非表示」モード/ウィンドウでそのプロセスを開始するために popen の方法または Windows 自体の方法を調べるのに何日も費やしましたが、結果は得られませんでした。私がすでに試したことは次のとおりです。

cmd.exe /c tasklist /V
start /b cmd.exe /c tasklist /V
start /min /b cmd.exe /c tasklist /V
start /min cmd.exe /c tasklist /V
tasklist > somefile

私も最後のものを試したので、そのいくつかのファイルから出力を読み取りますが、ファイルが作成されてもデータが書き込まれないため、タスクリストは出力を標準出力に強制するようです。

あなたの答えを願って、とにかくありがとう。

4

2 に答える 2

3

CreateProcessこれを実現するには、 passingを構造体のフィールドSW_HIDEとして呼び出し、 inを含めます。wShowWindowSTARTUPINFOCREATE_NO_WINDOWdwCreationFlags

tasklistこの方法は、出力形式が異なるバージョンの のマシンでアプリが実行されている場合があるため、少し脆弱です。

実行中のすべてのプロセスのリストが必要な場合は、 を呼び出すことができますEnumProcesses

于 2011-01-25T17:02:42.607 に答える
1

タスクはEnumProcessesを使用して簡単に達成できます。

ここに与えられた直感的な例。

于 2011-01-25T17:37:08.190 に答える