home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 March
/
Chip_2002-03_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d56
/
MSYSINFO.ZIP
/
Demos
/
ResourceMeter
/
Main.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-10-12
|
2KB
|
76 lines
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls;
type
TfrmMain = class(TForm)
pbGDI: TProgressBar;
pbSystem: TProgressBar;
pbUser: TProgressBar;
lGDI: TLabel;
lSystem: TLabel;
lUser: TLabel;
Timer: TTimer;
procedure TimerTimer(Sender: TObject);
private
public
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
const
cSystem = 0;
cGDI = 1;
cUSER = 2;
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';
var
hInst16: THandle;
SR: Pointer;
function GetFreeSysRes(SysRes: Word): Word;
var
Thunks: Array[0..$20] of Word;
begin
Thunks[0]:=hInst16;
hInst16:=LoadLibrary16('user.exe');
if hInst16<32 then
raise Exception.Create('Can''t load USER.EXE!');
FreeLibrary16(hInst16);
SR:=GetProcAddress16(hInst16,'GetFreeSystemResources');
if not Assigned(SR) 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;
procedure TfrmMain.TimerTimer(Sender: TObject);
begin
pbGDI.Position:=GetFreeSysRes(cGDI);
pbUser.Position:=GetFreeSysRes(cUser);
pbSystem.Position:=GetFreeSysRes(cSystem);
lGDI.Caption:=Format('GDI - %d%% free',[pbGDI.Position]);
lUser.Caption:=Format('User - %d%% free',[pbUser.Position]);
lSystem.Caption:=Format('System - %d%% free',[pbSystem.Position]);
end;
end.