home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol12n13.zip / SHUTDN.ZIP / SHUTDN.PAS < prev    next >
Pascal/Delphi Source File  |  1992-12-09  |  2KB  |  77 lines

  1. {$A+,B-,D-,F-,G-,I-,K-,L-,N-,P-,Q-,R-,S-,T-,V+,W+,X+,Y-}
  2. PROGRAM ShutDn;
  3. Uses WinTypes, WinProcs, WinDOS, Strings,
  4. {$IFDEF Ver70} OWindows; {$ELSE} WObjects; {$ENDIF}
  5. {$R ShutDn}
  6. {$D ShutDown - Copyright (c) 1993 by Neil J. Rubenking}
  7.  
  8. CONST AppName : PChar = 'ShutDown';
  9. TYPE
  10.   TMyApplication = OBJECT(TApplication)
  11.     PROCEDURE InitMainWindow; virtual;
  12.   END;
  13.  
  14.   PTestWindow = ^TTestWindow;
  15.   TTestWindow = OBJECT(TWindow)
  16.     DidShutDown : Boolean;
  17.     FUNCTION GetClassName : PChar; Virtual;
  18.     PROCEDURE GetWindowClass(var AWndClass: TWndClass); Virtual;
  19.     PROCEDURE wmQueryOpen(VAR Msg : TMessage); Virtual
  20.       wm_First + wm_QueryOpen;
  21.     FUNCTION CanClose : Boolean; Virtual;
  22.     PROCEDURE wmQueryEndSession(VAR Msg : TMessage);
  23.       Virtual wm_First + wm_QueryEndSession;
  24.   END;
  25.  
  26.   FUNCTION TTestWindow.GetClassName;
  27.   BEGIN GetClassName := AppName; END;
  28.  
  29.   PROCEDURE TTestWindow.GetWindowClass(VAR AWndClass : TWndClass);
  30.   BEGIN
  31.     TWindow.GetWindowClass(AWndClass);
  32.     AWndClass.hIcon := LoadIcon(HInstance, AppName);
  33.     DidShutDown := FALSE;
  34.   END;
  35.  
  36.   PROCEDURE TTestWindow.wmQueryOpen(VAR Msg : TMessage);
  37.   BEGIN Msg.Result := 0; END;
  38.  
  39.   FUNCTION TTestWindow.CanClose : Boolean;
  40.   BEGIN
  41.     CanClose := MessageBox(hWindow, 'ShutDown should remain active '+
  42.       'until Windows shuts down.  Terminate it anyway?',
  43.       'ShutDown Message', mb_YesNo + mb_IconQuestion) = idYes;
  44.   END;
  45.  
  46.   PROCEDURE TTestWindow.wmQueryEndSession(VAR Msg : TMessage);
  47.   VAR
  48.     CommandLine : ARRAY[0..144] OF Char;
  49.     InstanceID  : THandle;
  50.   BEGIN
  51.     IF NOT DidShutDown THEN
  52.       BEGIN
  53.         MessageBox(hWindow, 'Running SHUTDOWN.BAT.  When it '+
  54.           'finishes, exit Windows again', 'ShutDown Message',
  55.           mb_Ok + mb_IconInformation);
  56.         Msg.Result := 0;
  57.         StrCopy(CommandLine, GetEnvVar('COMSPEC'));
  58.         StrCat(CommandLine, ' /C SHUTDOWN.BAT');
  59.         WinExec(CommandLine, sw_ShowNormal);
  60.         DidShutDown := TRUE;
  61.       END
  62.     ELSE DefWndProc(Msg);
  63.   END;
  64.  
  65.   PROCEDURE TMyApplication.InitMainWindow;
  66.   BEGIN
  67.     MainWindow := New(PTestWindow, Init(Nil, AppName));
  68.   END;
  69.  
  70. VAR MyApp: TMyApplication;
  71. BEGIN
  72.   cmdShow := SW_ShowMinimized;
  73.   MyApp.Init(AppName);
  74.   MyApp.Run;
  75.   MyApp.Done;
  76. END.
  77.