2011-01-25 16 views
4

皆さん、ありがとうございました。おかげでになりました。cmd.exeを使わずにCでpopenをWindows上で実行すると、tasklistがポップアップ表示されます

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

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

問題は、それがその新しいウィンドウにフォーカスを切り替え、それが代わりのフルスクリーンモードをウィンドウ表示するために自分のアプリケーションを行かせるため、2番目の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 

私はので、私はそのsomefileというからの出力を読んでいました、あまりにも最後の1を試してみましたが、ファイルが作成されているが何もデータが書き込まれていないため、stdoutにタスクリスト軍出力のように思えます。

ご回答いただきありがとうございます。

+0

adminコマンドの出力でテキスト処理を行う方法は、プロセス制御とテキスト操作が優れたスクリプト言語で作業する必要があります。 Cは、ほとんどの作業を行う他のプログラムを調整するためのグルーコードの作成には適していません。 – Kaz

答えて

3

あなたはSTARTUPINFO構造体のwShowWindowフィールドとしてSW_HIDEを渡すとdwCreationFlagsCREATE_NO_WINDOWを含むCreateProcessを呼び出すことによって、これを達成することができます。

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

実行中のすべてのプロセスのリストを希望する場合は、EnumProcessesと呼ぶことができます。

+0

あなたの答えをありがとう。残念ながら、私はまだCでうまくいきませんし、どのように使用すべきか理解しているいくつかの問題があります。あなたは私に簡単な例を教えてくれますか?私は本当にそれを感謝します。ありがとうございました。 – Markku

+0

@Markkuあなたはまず自分自身を試してみませんか? websearchを行い、MSDNのドキュメントを読んで、いくつかのコードサンプルを見つけてください。あなたが立ち往生したときに、あなたのコードでここに別の質問を投稿することができます。非常に高いレベルの概要は、プロセスを作成することです。この結果、プロセスハンドルが作成されます。そのハンドル(WaitUntilSignaled)を待ちます。シグナルが送信されると、プロセスが完了し、プロセスを終了することができます。また、出力をキャプチャするためのstdoutファイルハンドルを作成する必要があります。 EnumProcessesを呼び出す方が良いでしょう。 –

+0

ありがとうございました。私はそれを解決した。私は今、ソリューションを投稿します。 – Markku

1

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

例題hereが与えられています。