板 1- 前 次 新 レス
旧雑記サルベージ
[114]管理人 ★:06/09/06 17:49 ID:???
2006年03月10日
■AutoHotkey用システムモニタ用関数群(lukewarm.s101.xrea更新
PDH.DLLのAPIでは様々な情報が取得できるが、.Netの奴の何かなど、訳の分からないものやどうでもいい物が大半だった。
しかし、ディスクのアクセス量なども取得できるらしいので、とりあえず関数を作ってみることに。
取得したい情報はパス文字列で指定しなければならない。
PdhBrowseCountersというAPIで項目を選択するダイアログが出せるとのことなので、それを呼び出す関数を作成した。
とりあえずディスクのアクセス率を取得してみると、それらしい物が取得できた。
アクセス率とアイドル率を足して100にならないなど怪しいところはあるが、気にしないことにする。
次に、ネットワークの使用率を取得してみる。
パス文字列にはネットワークインターフェイスの名前が含まれる。
ネットワークインターフェイスには「MS TCP Loopback interface」というのと、PCに接続されたNICらしき物の2つがある。
実際に必要なのはNICの方だが、PCによって違うので、何らかの方法で取得しなければならない。
PDHのAPIで自動取得できるようにするのは面倒だったので、以下のような方法で取得取得してもらうことにした。
RunWait,cmd /c route print > %tmp%\route.txt,,HIDE
FileReadLine,nic,%tmp%\route.txt,4
StringTrimLeft,nic,nic,32
FileDelete,%tmp%\route.txt
とりあえずパス文字列ができたのでモニタリングしてみたが、なぜか値がおかしい。
テストダウンロードを行っているIrvineの示している転送量の70%くらいの値になってしまう。
Windowsの管理ツールにあるパフォーマンスモニタで監視しても同じなので仕様だろう。
TClockのソースを見たら、ネットワーク転送量はiphlpapi.dllというDLLの関数で取得していることが分かったので、せっかくだから移植してみることに。
データを受け取るのに必要なバッファが10KBくらいあって気持ち悪い。
構造体の定義もややこしく、メンバのアドレスオフセットを計算するのが面倒なんで、VCで適当に「printf("%d\n",(int)(&(st.dwInOctets))-(int)(&st));」のようなコードを書いて実行して調べた。
その他は、他のモニタリング関数と同じような感じで適当に作ったら動いた。
サンプルスクリプトも作ることにした。
ラベルとプログレスバーで情報を表示し、背景を透過して文字だけが浮かんでいる状態にし、最前面に表示するようにした。
とりあえず、取得できる情報を片っ端から表示することに。
HDDの情報は、ドライブの数だけ列挙する。
ついでに、DriveSpaceFree命令などを利用してHDDの空き容量も表示できるようにした。
フォントなどを工夫したら、それなりに見栄えのするシステムモニタができた。
ドライブが7つもあると無闇に縦長になってしまって邪魔だが。
なぜかスクリプトのメモリ使用量が15MBを超えていて、あまり実用性はない。
前 次