home *** CD-ROM | disk | FTP | other *** search
/ Windoware / WINDOWARE_1_6.iso / winutil / bye103p / bye.pas < prev    next >
Pascal/Delphi Source File  |  1991-06-12  |  3KB  |  113 lines

  1. {$M 1024,1024,R-,S-,D-,L-,N-,A-}
  2. Program Bye;
  3.  
  4.    (* BYE.PAS - Quick Exit For Windows
  5.     * Written by Richard R. Sands in Turbo Pascal for Windows
  6.     * Copyright ⌐ Richard R. Sands
  7.     * All rights reserved
  8.     *
  9.     * Since this program goes around the Program Manager to quit, it will
  10.     * not save your current Program Manager settings (group window size and
  11.     * positions).  If you want your Progman settings saved, you must exit
  12.     * from the Program Manager.
  13.     *
  14.     * Version History
  15.     *    1.01P - 04/10/91 - Initial Release
  16.     *    1.02P - 05/04/91 - Added "Operating System" menu option
  17.     *    1.03P - 07/11/91 - Takes less memory - reduced Heap/Stack
  18.     *)
  19.  
  20.    {$R BYE}
  21.  
  22.    USES
  23.      WinTypes, WinProcs, ByeCmds;
  24.  
  25.    CONST
  26.      AppName = 'Bye';
  27.  
  28. { -------------------------------------------------------------------------- }
  29. function WindowProc(Window: hWnd; Message, WParam: Word; LParam: Longint): Longint; export;
  30.   begin
  31.     WindowProc := 0;
  32.     case Message of
  33.       wm_SysCommand:
  34.           case wParam of
  35.             idm_About : begin
  36.                            DoAbout(Window);
  37.                            EXIT
  38.                         end;
  39.             idm_Confirm: ToggleConfirm(Window);
  40.             idm_OS     : WinExec('Command.Com', sw_Normal);
  41.             idm_Quit   : Quit(Window);
  42.           end;
  43.       wm_QueryOpen: begin
  44.                        Quit(Window);  { Double click on Icon }
  45.                        { If returns 0 then we cannot open - this
  46.                          suppresses the maximize functions }
  47.                        EXIT
  48.                     end;
  49.       wm_Destroy:
  50.         begin
  51.           PostQuitMessage(0);
  52.           EXIT;
  53.         end;
  54.     end;
  55.     WindowProc := DefWindowProc(Window, Message, WParam, LParam)
  56.   end;
  57.  
  58. { -------------------------------------------------------------------------- }
  59. procedure WinMain;
  60.   var Window  : hWnd;
  61.       Message: TMsg;
  62.   const
  63.     WindowClass: TWndClass = (
  64.       style: 0;
  65.       lpfnWndProc: @WindowProc;
  66.       cbClsExtra: 0;
  67.       cbWndExtra: 0;
  68.       hInstance: 0;
  69.       hIcon: 0;
  70.       hCursor: 0;
  71.       hbrBackground: 0;
  72.       lpszMenuName: AppName;
  73.       lpszClassName: AppName);
  74.   begin
  75.     if HPrevInst = 0 then
  76.     begin
  77.       WindowClass.hInstance := hInstance;
  78.       WindowClass.hIcon := LoadIcon(hInstance, 'ICON');
  79.       WindowClass.hCursor := LoadCursor(0, idc_Arrow);
  80.       WindowClass.hbrBackground := GetStockObject(white_Brush);
  81.       if not RegisterClass(WindowClass) then Halt(255);
  82.     end
  83.     else
  84.        Halt(0);  { Only One Instance Allowed }
  85.     Window := CreateWindow(
  86.       AppName, AppName,
  87.       ws_OverlappedWindow,
  88.       cw_UseDefault,
  89.       cw_UseDefault,
  90.       cw_UseDefault,
  91.       cw_UseDefault,
  92.       0,
  93.       0,
  94.       HInstance,
  95.       nil);
  96.  
  97.     ModifySystemMenu(Window); { Add our commands to system menu }
  98.  
  99.     ShowWindow(Window, sw_Minimize);  { This minimizes the window }
  100.  
  101.     while GetMessage(Message, 0, 0, 0) do   { Main Message Loop }
  102.     begin
  103.       TranslateMessage(Message);
  104.       DispatchMessage(Message)
  105.     end;
  106.     Halt(Message.wParam)
  107.   end;
  108.  
  109. { -------------------------------------------------------------------------- }
  110. begin
  111.    WinMain
  112. end.
  113.