人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WindowsXP/2000で、現在のCPU占有率を調べるAPIや教えてください。また、特定の実行ファイル (例えば、game.exe) が走っているかチェックするAPIについても教えてください。具体的なコードがあると有難いです。タスクマネージャを見ろとかはダメですよ〜。あくまでWindowsAPIを使ってです。

●質問者: ryoko_komachi
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:API CPU exe WindowsXP いるか
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tomaton20
●20ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

VC++での場合ですが、

PDH系APIを利用します。

コードです(URLはダミーです)。

#include <windows.h>

#include <stdio.h>

#include <pdh.h>


void main()

{

HQUERY hQuery;

HCOUNTER hCounter;

PDH_COUNTER_PATH_ELEMENTS cpe;

char path[256];

DWORD size = 256;

PDH_FMT_COUNTERVALUE FmtValue;


//クエリー作成

PdhOpenQuery(NULL, 0, &hQuery);


//所得したい情報(カウンタ)のパスを作成

//例として、メモ帳のCPU使用率

//ObjectNameやCounterNameで指定する名称は、

//PdhEnumObjects()でオブジェクトの列挙

//PdhEnumObjectItems()でカウンタの列挙が出来る

//決めうちなら、システムモニタの「カウンタの追加」を参照

cpe.szMachineName = NULL;

cpe.szObjectName = ”Process”;

cpe.szInstanceName = ”notepad”;

cpe.szParentInstance = NULL;

cpe.dwInstanceIndex = 0;

cpe.szCounterName = ”% Processor Time”;

PdhMakeCounterPath(&cpe, path, &size, 0);


//カウンタをクエリーに追加

PdhAddCounter(hQuery, path, 0, &amphCounter);


#if 1

//値取得

PdhCollectQueryData(hQuery);

//10秒間待つ

Sleep(10000);

//値取得

PdhCollectQueryData(hQuery);

#else

//こちらでもよいが、NT4では動かない

PdhCollectQueryDataEx(hQuery, 10, NULL);

#endif


//10秒間のメモ帳のCPUの使用率を取得

PdhGetFormattedCounterValue(hCounter, PDH_FMT_DOUBLE, NULL, &FmtValue);

printf(”メモ帳のCPU使用率: %f%%¥n”, FmtValue.doubleValue);


//終了

PdhCloseQuery(hQuery);

}

◎質問者からの返答

ありがとうございます。特定アプリでなく、合計占有率が欲しいのですが……。引き続き募集中です。


2 ● くまっぷす
●60ポイント

http://msdn.microsoft.com/library/default.asp?url=/library/en-us...

このAPIを使えばよさそうです。困ったことに日本語のMSDNライブラリでは抜けてるんですよ>このAPIの説明。

http://codeproject.com/useritems/Get_CPU_Usage.asp

ここにコード断片が載っています。

あとは適当なtick数だけ待ってUsage情報の差を複数回取って計算する部分を書けばいいはずです。

◎質問者からの返答

おー、これは完璧っぽいです。ありがとうございます〜(涙)。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ