home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / cadof101.zip / cadoff.c next >
C/C++ Source or Header  |  1999-04-21  |  4KB  |  148 lines

  1. /***
  2.  cadoff.c - Copyright (c) 1999 by Th. Thielen
  3.  disables reset via CTRL-ALT-DEL
  4.  
  5.  Permission is given by the author to freely redistribute and include
  6.  this code in any program as long as this credit is given where due.
  7.  ***/
  8.  
  9. #define  INCL_BASE
  10. #define  INCL_PM
  11.  
  12. #include <os2.h>
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <stddef.h>
  17. #include <string.h>
  18. #include <stdarg.h>
  19.  
  20. /*** DisplayError ********************************************************/ /*FOLD00*/
  21.  
  22. VOID DisplayError (PSZ pszTitle, PSZ psz)
  23. {
  24.     WinMessageBox (HWND_DESKTOP, HWND_DESKTOP, psz, pszTitle, 0,
  25.                    MB_OK | MB_ERROR | MB_APPLMODAL);
  26. }
  27.  
  28. /*** wp ******************************************************************/ /*FOLD00*/
  29.  
  30. static MRESULT EXPENTRY wp (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) {
  31.     return WinDefWindowProc (hwnd, msg, mp1, mp2); }
  32.  
  33. /*** ToggleCAD ***********************************************************/ /*FOLD00*/
  34.  
  35. BOOL ToggleCAD (VOID)
  36. {
  37.     ULONG   ulApiRet;
  38.     HFILE   hFile;
  39.     ULONG   ulAct;
  40.  
  41.     struct
  42.     {
  43.         USHORT usShiftState;
  44.         BYTE   ucHotKeyMake;
  45.         BYTE   ucHotKeyBreak;
  46.         USHORT usHotKeyID;
  47.     } chParms;
  48.  
  49.     ULONG   ulParm;
  50.     ULONG   ulData;
  51.  
  52.     if ((ulApiRet = DosOpen ("KBD$", &hFile, &ulAct, 0L, 0L, 1L, 0x40, 0L)))
  53.     {
  54.         DisplayError ("ERROR", "Could not open KBD$.");
  55.         return FALSE;
  56.     }
  57.  
  58.     memset (&chParms, 0x00, sizeof (chParms));
  59.     chParms.usHotKeyID = 0xffff;
  60.  
  61.     ulParm = sizeof (chParms);
  62.     ulData = 0;
  63.     ulApiRet = DosDevIOCtl (hFile, 4, 0x56, &chParms, sizeof (chParms),
  64.                             &ulParm, NULL, 0L, &ulData);
  65.     DosClose (hFile);
  66.  
  67.     if (ulApiRet)
  68.     {
  69.         DisplayError ("ERROR", "Function call to KBD$ failed");
  70.         return FALSE;
  71.     }
  72.  
  73.     return TRUE;
  74. }
  75.  
  76. /*** dpAbout *************************************************************/ /*FOLD00*/
  77.  
  78. MRESULT EXPENTRY dpAbout (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  79. {
  80.     switch (msg)
  81.     {
  82.     case WM_COMMAND:
  83.         WinDismissDlg (hwnd, 0);
  84.         break;
  85.     }
  86.  
  87.     return WinDefDlgProc (hwnd, msg, mp1, mp2);
  88. }
  89.  
  90. /*** AboutBox ************************************************************/ /*FOLD00*/
  91.  
  92. VOID AboutBox (HWND hwnd) {
  93.     WinDlgBox (HWND_DESKTOP, hwnd, dpAbout, 0, 1L, NULL); }
  94.  
  95. /*** main ****************************************************************/ /*FOLD00*/
  96.  
  97. int main (int argc, char *argv[])
  98. {
  99.     HAB     hab;
  100.     HMQ     hmq;
  101.     QMSG    qmsg;
  102.     HWND    hwnd;
  103.  
  104.     hab = WinInitialize (0);
  105.     hmq = WinCreateMsgQueue (hab, 0);
  106.  
  107.     if (argc > 1)
  108.     {
  109.         AboutBox (HWND_DESKTOP);
  110.         return 1;
  111.     }
  112.     else
  113.     {
  114.         // pressumably disable CTRL-ALT-DEL
  115.         if (ToggleCAD ())
  116.         {
  117.             WinRegisterClass (hab, "thth.wc.cadoff.object", wp, 0L, 0L);
  118.             if ((hwnd = WinCreateWindow (HWND_OBJECT, "thth.wc.cadoff.object",
  119.                                          NULL, 0L, 0,0,0,0, 0, HWND_BOTTOM,
  120.                                          1L, NULL, NULL)))
  121.             {
  122.                 while (WinGetMsg (hab, &qmsg, 0L, 0, 0))
  123.                     WinDispatchMsg (hab, &qmsg);
  124.  
  125. /*                DosBeep (1000, 200);
  126.                 DosBeep (800, 200);
  127.                 DosBeep (600, 200);
  128.                 DosBeep (400, 200);
  129.                 DosBeep (200, 200); */
  130.  
  131.                 WinDestroyWindow (hwnd);
  132.             }
  133.             else
  134.                 DisplayError ("ERROR", "Could not open object window.");
  135.  
  136.             // pressumably enable CTRL-ALT-DEL again
  137.             ToggleCAD ();
  138.         }
  139.     }
  140.  
  141.     WinDestroyMsgQueue (hmq);
  142.     WinTerminate (hab);
  143.  
  144.     return NO_ERROR;
  145. }
  146.  
  147. /*************************************************************************/
  148.