home *** CD-ROM | disk | FTP | other *** search
/ HomeWare 14 / HOMEWARE14.bin / os2 / cenv2_19.arj / SHUTDOWN.CMD < prev    next >
OS/2 REXX Batch file  |  1994-03-08  |  4KB  |  96 lines

  1. :: ShutDown.cmd - A weird script that uses many instances of CEnvi
  2. :: ver.1          To shutdown the system.
  3. ::
  4. :: The ShutDown.cmd Algorithm: First, lazy writing is turned off
  5. :: and some processes are killed if they are running.  You can put
  6. :: any batch commands in this first section.  The ones here represent
  7. :: some processes that do not respond to the PMshell's shutdown
  8. :: procedure and would otherwise need to be manually terminated.
  9. cache /LAZY:OFF
  10. CALL Kill "Background Randomizer"
  11. CALL Kill hook_kbs
  12. CALL Kill "DOS Slave"
  13. CALL Kill MemStat
  14. CALL Kill MAXP
  15. CALL Kill NomBBS
  16. CALL Kill UnHanger
  17. CALL Kill "NumLock Forever"
  18. CALL KILL GPSClock
  19.  
  20. :: Next, start the first CEnvi instance of this program, which will kill
  21. :: the second instance when the second instance is waiting for keyboard
  22. :: input.  Give this process a couple of seconds to get going
  23. start "KillMe" /N /F /WIN CEnvi #include 'ShutDown.cmd,,,EXIT' KillShutDown()
  24. CEnvi suspend(2000);
  25.  
  26. :: Then start the second CEnvi instance, which will call WinShutdownSystem().
  27. :: Shutdown will try to shut this process itself, and so that is why the
  28. :: first instance was created
  29. start "ShutSystem" /N /B /WIN CEnvi #include 'ShutDown.cmd,,,EXIT' ShutDown()
  30.  
  31. :: Finally, exit ShutDown.cmd so that the system shutdown doesn't bother it.
  32. :: All of the code below EXIT is used by the CEnvi calls of this source.
  33. EXIT
  34.  
  35.  
  36. ShutDown()  // Execute the WinShutdownSystem() function
  37. {
  38.    // Give the shell that started this process time to EXIT
  39.    suspend(3500);
  40.  
  41.    // Get Msg Queue of this window
  42.    #define ORD_WIN32QUERYWINDOWULONG   843
  43.    #define QWL_HMQ   (-4)
  44.    MsgQueue = DynamicLink("PMWIN",ORD_WIN32QUERYWINDOWULONG,BIT32,CDECL,
  45.                           Info().WinHandle,QWL_HMQ);
  46.  
  47.    // Call WinShutdownSystem()
  48.    #define  ORD_WIN32SHUTDOWNSYSTEM 149
  49.    DynamicLink("PMWP",ORD_WIN32SHUTDOWNSYSTEM,BIT32,CDECL,
  50.                Info().hab,MsgQueue);
  51. }
  52.  
  53. KillShutDown() // Kill the ShutDown procedure because WinShutdwnSystem()
  54. {              // will try to get stuck getting rid of that window
  55.    // Increase priority of this process because the shutdown modal dialog
  56.    // can tak up a LOT of time
  57.    #define ORD_DOS32SETPRIORITY  236
  58.    #define PRTYC_TIMECRITICAL 3
  59.    DynamicLink("doscalls",ORD_DOS32SETPRIORITY,BIT32,CDECL,
  60.                 1/*all threads*/,PRTYC_TIMECRITICAL,0,0);
  61.  
  62.    // Wait for this focus window to change from this one. That's how well
  63.    // know that the kill message is present
  64.    printf("Waiting for \"ShutSystem\" to need shutting down...");
  65.    Focus = GetFocusWindow();
  66.    do {
  67.       suspend(1000);
  68.    } while ( Focus == GetFocusWindow() );
  69.  
  70.    // Call command to kill the ShutDown session so it doesn't start on reboot
  71.    printf("\nKill ShutSystem\n");
  72.    system("Kill ShutSystem");
  73.  
  74.    // Right now a dialog box is asking if we want to kill "SHUTDOWN". Send
  75.    // it the 'Y' keystroke and get out of here
  76.    PostKeystroke('Y');
  77. }
  78.  
  79. PostKeystroke(KeyStroke)
  80. {
  81.    #define KC_CHAR         0x0001
  82.    #define KC_LONEKEY      0x0100
  83.    Param1 = ((KC_CHAR | KC_LONEKEY)) | (1 << 16);
  84.  
  85.    #define ORD_WIN32POSTMSG   919
  86.    #define WM_CHAR   0x007a
  87.    DynamicLink("PMWIN",ORD_WIN32POSTMSG,BIT32,CDECL,
  88.                GetFocusWindow(),WM_CHAR,Param1,KeyStroke);
  89. }
  90.  
  91. GetFocusWindow()  // return handle of active focus window
  92. {
  93.    #define ORD_WIN32QUERYFOCUS   817
  94.    return DynamicLink("PMWIN",ORD_WIN32QUERYFOCUS,BIT32,CDECL,1);
  95. }
  96.