Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 20 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
52 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Monitorar Recursos do Sistema
Publicado por mgrasser : Terça, Setembro 21, 2004 - 08:54 GMT-3 (4090 leituras)
Comentários 1 Comentário   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador 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
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: weo : Out 25, 2006 - 04:00
(Informações sobre o membro | Enviar uma mensagem) http://
Nao funciona no windows XP.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados