9x ではリソース不足などというわけのわからないもののおかげで
window の生成に注意を払わなければならないと言うわけの分から
ないプログラミングをしなければなりません。
でも、リソースを調べるにはサンクなどというこれまたわけの分
からないものを使わなくてはならず困ってしまいます。
そのためのサンプルを示します。
Thunk についてはこの辺がよさげかと。
http://www.thedelphimagazine.com/samples/thunk/thunk95.htm
ただ、Thunk は NT には無い機能なので、NT とソースが混在出来
ない欠点があります。
このサンプルはそれも回避しています。
つまり、9x でも NT でも動きます。

type
  EThunkError = class(Exception);

function CheckMemory: Boolean;
procedure ShowError(ErrNo: Integer);

implementation

{$R *.DFM}

function LoadLibrary16(dllName: PChar): THandle; stdcall;
    external 'kernel32.dll' index 35;
function FreeLibrary16(hHand: THandle): Integer; stdcall;
    external 'kernel32.dll' index 36;
function GetProcAddress16(handle: integer; ProcName: PChar): pointer;
    stdcall; external 'kernel32.dll' index 37;

function GetFreeSysRes(SysRes: Word): Word;
var
  ThunkTrash    : array[0..$20] of Word;
  hInst         : THandle;
  globalPointer : Pointer;
  QT_Thunk      : TProcedure;
  Kernel32Mod   : THandle;
begin
  Result := 100;
  if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then
    exit;
//  else if SysUtils.Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
//    isWin9x;

  ThunkTrash[0] := 0;

  Kernel32Mod := GetModuleHandle('Kernel32.Dll');
  QT_Thunk := GetProcAddress(Kernel32Mod, 'QT_Thunk');
  try
    if @QT_Thunk = nil then
      raise EThunkError.Create('Flat thunks only supported under Windows 95');
  except
    exit;
  end;

  hInst := LoadLibrary16('user.exe');
  globalPointer := GetProcAddress16(hInst, 'GetFreeSystemResources');

  asm
    push SysRes
    mov  edx, globalPointer
    call QT_Thunk
    mov  Result, ax
  end;

  FreeLibrary16(hInst);
end;

Function CheckMemory: Boolean;
begin
  Result := False;

  if GetFreeSysRes(0) < 10 then Result := True; // 各リソースが 10%
  if GetFreeSysRes(1) < 10 then Result := True; // 以下になったら不
  if GetFreeSysRes(2) < 10 then Result := True; // 安定と判断。
end;

Procedure ShowError( ErrNo: Integer );
begin
  case ErrNo of
    1: MessageDlg( 
           'メモリ不足です。いくつかのウィンドウを閉じるか' + #13#10 +
           '他のアプリケーションを終了して下さい。', mtError, [mbOK], 0 
                 );
  end;
end;


使い方は

if CheckMemory then ShowError( 1 );

とかです。