Win9x で RSRC32.DLL を使ってシステム/GDI/USER リソース使用率を得る方法
(1999/08/10 [火])
Win9x ではベースが 16 bit なので、GDI や USER で大きなリソースをたくさん消費できません。したがって、このリソースの使用率に常に気を配る必要があります。現在の使用率は、GDI や USER というリソース名で表現されます。システムリソースは、この GDI と USER リソースのうちの小さい方の値と同じです。
それを取得する方法は、Win16 API ならば、GetFreeSystemResources という API を使えば簡単に取得することができますが、Win32 には本来必要がないのでそのような API は存在しません。しかし、Win9x のような OS の場合には、Win32 上から何とかして取得したくなります。
その取得の一つの方法として、RSRC32.DLL を使う方法があります。ただしこの DLL はすべての Windows に含まれているわけではないので注意が必要です。具体的な方法を以下に示します。ただしエラー処理を省略してあります。
基本的には RSRC32.DLL に含まれている "_MyGetFreeSystemResources32@4" という関数を呼び出すだけです。この関数の引数は、上で示したように、0 が SYSTEM、1 が GDI、2 が USER リソースを取得することを意味します。戻り値はその使用率(%)です。
それを取得する方法は、Win16 API ならば、GetFreeSystemResources という API を使えば簡単に取得することができますが、Win32 には本来必要がないのでそのような API は存在しません。しかし、Win9x のような OS の場合には、Win32 上から何とかして取得したくなります。
その取得の一つの方法として、RSRC32.DLL を使う方法があります。ただしこの DLL はすべての Windows に含まれているわけではないので注意が必要です。具体的な方法を以下に示します。ただしエラー処理を省略してあります。
UINT WINAPI (*GetFreeResources32)(UINT); //UINT の部分の引数 #define GFR32_SYSTEM 0 #define GFR32_GDI 1 #define GFR32_USER 2 HMODULE hm; int usage; hm = (HMODULE)LoadLibrary("RSRC32.DLL"); GetFreeResources32 = (UINT WINAPI (*)(UINT))GetProcAddress(hm, "_MyGetFreeSystemResources32@4"); usage = GetFreeResources32(GFR32_SYSTEM); //SYSTEM リソース (%) usage = GetFreeResources32(GFR32_GDI); //GDI リソース (%) usage = GetFreeResources32(GFR32_USER); //USER リソース (%) FreeLibrary(hm); |
基本的には RSRC32.DLL に含まれている "_MyGetFreeSystemResources32@4" という関数を呼び出すだけです。この関数の引数は、上で示したように、0 が SYSTEM、1 が GDI、2 が USER リソースを取得することを意味します。戻り値はその使用率(%)です。
by seclan