|
Usuários |
|
52 Usuários Online
|
|
[Artigos]
Monitorar Recursos do Sistema |
Publicado por mgrasser : Terça, Setembro 21, 2004 - 08:54 GMT-3 (4090 leituras)
1 Comentário Enviar para um amigo Versão para impressão
|
Eu me sinto meio antigo em dizer que ainda utilizo Windows 98, e neste SO, se você utiliza vários aplicativos abertos simultaneamente, em um determinado momento a máquina trava, procurei descobrir se conseguiria monitorar alguma coisa como memória disponível no computador para conseguir de alguma forma avisar o usuário para começara a fechar as tranqueiras abertas antes que o computador trave, tentei utilizar a API MemoryStatus, mas vi que nada ali indicado tinha a ver com os travamentos que aconteciam, então descobri o programa MSINFO32 e vi o indicador Recursos disponíveis de sistema, pesquisando um pouco mais encontrei a base para fazer este programa com um Form e um Timer que avisa quando os recursos caírem abaixo de 10%.
Não sei se funciona para W2000 ou W_XP, mas quem quiser experimentar:
unit memo;
interface
uses
Windows, SysUtils, Classes,Forms, Dialogs,ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
Gfsr_SystemResources = 0;
Gfsr_GdiResources = 1;
Gfsr_UserResources = 2;
function GetFreeSystemResources(SysResource: Word): Word;
implementation
{$R *.DFM}
{ Undocumented Kernel32 calls. }
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';
{ Use global variables, so QT_Thunk does not trash them. }
var
hInst16: THandle;
GFSR: Pointer;
{ QT_Thunk needs a stack frame. }
{$StackFrames On}
{ Thunking call to 16-bit USER.EXE. The ThunkTrash argument
allocates space on the stack for QT_Thunk. }
function GetFreeSystemResources(SysResource: Word): Word;
var
ThunkTrash: array[0..$20] of Word;
begin
{ Prevent the optimizer from getting rid of ThunkTrash. }
ThunkTrash[0] := hInst16;
hInst16 := LoadLibrary16('user.exe');
if hInst16 < 32 then
raise Exception.Create('Cannot load USER.EXE');
{ Decrement the usage count. This doesn't really free the
library, since USER.EXE is always loaded. }
FreeLibrary16(hInst16);
{ Get the function pointer for the 16-bit function in USER.EXE. }
GFSR := GetProcAddress16(hInst16, 'GetFreeSystemResources');
if GFSR = nil then
raise Exception.Create('Cannot get address of GetFreeSystemResources');
{ Thunk down to USER.EXE. }
asm
push SysResource { push arguments }
mov edx, GFSR { load 16-bit procedure pointer }
call QT_Thunk { call thunk }
mov Result, ax { save the result }
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
X: Word;
begin
X :=GetFreeSystemResources(0);
If X < 10
then ShowMessage('Seu computador está ficando perigosamente sem recursos, '+ #13 +
'Feche um ou mais aplicativos');
Application.Title := Format('%d%% : Rec Livres', [X]);
Application.Minimize;
end;
end.
{MGrasser}
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|