在程序中如何得到系统资源/GDI/User的数值(用于Win2000的)(50分)

  • 主题发起人 主题发起人 guojun
  • 开始时间 开始时间
G

guojun

Unregistered / Unconfirmed
GUEST, unregistred user!
看了以前的讨论,是用如下方法(抄录如下),不知在Win2000下能否使用。
在Win2000下如何处理?我想知道系统资源状况,防止操作员无限制地开窗口。
function LoadLibrary16(LibraryName: PChar): THandle;
stdcall;
external kernel32 index 35;
procedure FreeLibrary16(HInstance: THandle);
stdcall;
external kernel32 index 36;
function GetProcAddress16(Hinstance: THandle;
ProcName: PChar): Pointer;
stdcall;
external kernel32 index 37;
procedure QT_Thunk;
cdecl;
external kernel32 name 'QT_Thunk';
function GetFreeSysRes(SysRes: Word): Word;
var
Thunks: Array[0..$20] of Word;
hInst16 : word;
Sr : Pointer;
begin
hInst16 := LoadLibrary16('user.exe');
Thunks[0] := hInst16;
if hInst16 < 32 then
raise Exception.Create('Can''t load USER.EXE!');
FreeLibrary16(hInst16);
SR := GetProcAddress16(hInst16, 'GetFreeSystemResources');
if SR = nil then
raise Exception.Create('Can''t get address of GetFreeSystemResources!');
asm
push SysRes // push arguments
mov edx, SR // load 16-bit procedure pointer
call QT_Thunk // call thunk
mov Result, ax // save the result
end;
end;
 
为什么是16
有32位的对应函数吗?
 
把LoadLibrary16换成别的就不好使了。我也正是想知道这个
问题才贴出来问大家呀!
 
RSRC32.DLL中有一个_MyGetFreeSystemResources32,
参数不知道,很可能与GetFreeSystemResources是一样的。
Windows的“资源状况”调用的就是它。
 
为什么不试试我说的。
WIN2000是不能用THUNK调16位DLL的。
好象没有别的API。
 
我根本不知道从何试起,一点都不会。
 
试了一下,参数真是一样的。
声明:
function _MyGetFreeSystemResources32(Res:WORD):WORD;stdcall;external 'rsrc32.dll' index 1;
调用:
SystemRes:=_MyGetFreeSystemResources32(0);
GdiRes:=_MyGetFreeSystemResources32(1);
UserRes:=_MyGetFreeSystemResources32(2);
 
to o*o
好使,只是不知道这RsRc32.dll是系统本身的还是什么带的?
我先把分给你,如果你有空,就再解答一下上面的问题.
 
接受答案了.
 
是系统带的(在/windows/system/)。用户有可能不选安装资源状况,
安全起见,把它放在应用程序目录里一份。
 
后退
顶部