home *** CD-ROM | disk | FTP | other *** search
/ Freesoft 1997 March / Freesoft_1997-03_cd.bin / recenz / 925 / LOCK.C next >
C/C++ Source or Header  |  1991-04-20  |  5KB  |  206 lines

  1. #pragma argsused
  2. #include <windows.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <time.h>
  7. #define MAXCODESIZE 100
  8. long FAR PASCAL WndMainProc();
  9. BOOL FAR PASCAL KeypadBox(HWND,unsigned int,WORD,DWORD);
  10. FARPROC hfun;
  11. FARPROC TransitHook;
  12. FARPROC TransitCoor;
  13. HANDLE hInst;
  14. FARPROC lpProc;
  15. FARPROC prevhook;
  16. HWND mwnd;
  17. int CODESIZE;
  18. int top,bottom,left,right;
  19.  
  20. char buf[80];
  21. int code[MAXCODESIZE];
  22. int tcode[MAXCODESIZE];
  23.  
  24. int ValidCmdLine(LPSTR str)
  25. {
  26.  int x,c;
  27.  
  28.  if (lstrlen(str)<1 || lstrlen(str)>=MAXCODESIZE) return FALSE;
  29.  for (x=0;x<lstrlen(str);x++)
  30.  {
  31.   c=toupper(str[x]);
  32.   if ((c<'0' || c>'9') && (c<'A' || c>'F')) return FALSE;
  33.  }
  34.  return TRUE;
  35. }
  36.  
  37. int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,
  38.            LPSTR lpCmdLine,int CmdShow)
  39. {
  40.  WNDCLASS wc;
  41.  HANDLE hAcc;
  42.  HANDLE hLib;
  43.  HWND hWnd;
  44.  MSG msg;
  45.  int x;
  46.  
  47.  if (!hPrevInstance)
  48.  {
  49.   wc.style=NULL;
  50.   wc.lpfnWndProc=WndMainProc;
  51.   wc.cbClsExtra=wc.cbWndExtra=0;
  52.   wc.hInstance=hInstance;
  53.   wc.hIcon=LoadIcon(hInstance,"ICON");
  54.   wc.hCursor=LoadCursor(NULL,IDC_ARROW);
  55.   wc.hbrBackground=GetStockObject(WHITE_BRUSH);
  56.   wc.lpszMenuName=NULL;
  57.   wc.lpszClassName="ComboLockWindow";
  58.   if (!RegisterClass(&wc)) return FALSE;
  59.  }
  60.  hInst=hInstance;
  61.  hWnd=CreateWindow(  "ComboLockWindow",
  62.         "Lock-By Kevin LaFata",
  63.         WS_OVERLAPPEDWINDOW,
  64.         CW_USEDEFAULT,
  65.         CW_USEDEFAULT,
  66.         CW_USEDEFAULT,
  67.         CW_USEDEFAULT,
  68.         NULL,
  69.         NULL,
  70.         hInstance,
  71.         NULL);
  72.  if (!hWnd) return FALSE;
  73.  CODESIZE=lstrlen(lpCmdLine);
  74.  if (!ValidCmdLine(lpCmdLine))
  75.  {
  76.   MessageBox(hWnd,"Invalid Command Line-Please See Documentation",
  77.   "Combination Lock",MB_OK);
  78.   return FALSE;
  79.  }
  80.  else
  81.  {
  82.   for (x=0;x<CODESIZE;x++)
  83.   {
  84.    switch(lpCmdLine[x])
  85.    {
  86.     case '1':code[x]=1;break;
  87.     case '2':code[x]=2;break;
  88.     case '3':code[x]=3;break;
  89.     case '4':code[x]=4;break;
  90.     case '5':code[x]=5;break;
  91.     case '6':code[x]=6;break;
  92.     case '7':code[x]=7;break;
  93.     case '8':code[x]=8;break;
  94.     case '9':code[x]=9;break;
  95.     case '0':code[x]=16;break;
  96.     case 'A':
  97.     case 'a':code[x]=10;break;
  98.     case 'B':
  99.     case 'b':code[x]=11;break;
  100.     case 'C':
  101.     case 'c':code[x]=12;break;
  102.     case 'D':
  103.     case 'd':code[x]=13;break;
  104.     case 'E':
  105.     case 'e':code[x]=14;break;
  106.     case 'F':
  107.     case 'f':code[x]=15;break;
  108.    }
  109.   }
  110.   for (x=0;x<CODESIZE;x++) tcode[x]=255;
  111.   ShowWindow(hWnd,SW_SHOWMINIMIZED);
  112.   UpdateWindow(hWnd);
  113.   hLib=LoadLibrary("lockdll.dll");
  114.   hfun=GetProcAddress(hLib,"MyHookEr");
  115.   TransitHook=GetProcAddress(hLib,"TransitHook");
  116.   TransitCoor=GetProcAddress(hLib,"TransitCoor");
  117.   prevhook=SetWindowsHook(WH_GETMESSAGE,hfun);
  118.   (*TransitHook)(prevhook);
  119.  
  120.   lpProc=MakeProcInstance((FARPROC)KeypadBox,hInst);
  121.   DialogBox(hInst,"Keypad",hWnd,lpProc);
  122.   FreeProcInstance(lpProc);
  123.  
  124.   if (!UnhookWindowsHook(WH_GETMESSAGE,hfun))
  125.    MessageBox(hWnd,"Could not Unhook Message Filter","Combination Lock",MB_OK);
  126.   FreeLibrary(hLib);
  127.   PostQuitMessage(0);
  128.  
  129.   while(GetMessage(&msg,NULL,NULL,NULL))
  130.   {
  131.    if (TranslateAccelerator(hWnd,hAcc,&msg)==0)
  132.    {
  133.     TranslateMessage(&msg);
  134.     DispatchMessage(&msg);
  135.    }
  136.   }
  137.   return (msg.wParam);
  138.  }
  139. }
  140.  
  141. long FAR PASCAL WndMainProc(HWND hWnd,
  142.                 unsigned message,
  143.                 WORD wParam,
  144.                 LONG lParam)
  145. {
  146.  
  147.  switch (message)
  148.  {
  149.   case WM_DESTROY:
  150.    PostQuitMessage(0);
  151.   break;
  152.   case WM_COMMAND:
  153.   default:
  154.   return (DefWindowProc(hWnd,message,wParam,lParam));
  155.  }
  156.  return (NULL);
  157. }
  158.  
  159. BOOL FAR PASCAL KeypadBox(hDlg,message,wParam,lParam)
  160. HWND hDlg;
  161. unsigned int message;
  162. WORD wParam;
  163. DWORD lParam;
  164. {
  165.  int x,y;
  166.  RECT rect;
  167.  POINT point;
  168.  
  169.  switch(message)
  170.  {
  171.   case WM_INITDIALOG:
  172.    GetClientRect(hDlg,&rect);
  173.    point.x=rect.left; point.y=rect.top;
  174.    ClientToScreen(hDlg,&point);
  175.    rect.left=point.x; rect.top=point.y;
  176.    point.x=rect.right; point.y=rect.bottom;
  177.    ClientToScreen(hDlg,&point);
  178.    rect.right=point.x; rect.bottom=point.y;
  179.    ClipCursor(&rect);
  180.    SetCursorPos((rect.right-rect.left)/2+rect.left,
  181.         (rect.bottom-rect.top)/2+rect.top);
  182.   return FALSE;
  183.   case WM_COMMAND:
  184.    switch(wParam)
  185.    {
  186.     case 101:case 102:case 103:case 104:
  187.     case 105:case 106:case 107:case 108:
  188.     case 109:case 110:case 111:case 112:
  189.     case 113:case 114:case 115:case 116:
  190.      for (x=0;x<CODESIZE-1;x++) tcode[x]=tcode[x+1];
  191.      tcode[CODESIZE-1]=wParam-100;
  192.      y=0;
  193.      for (x=0;x<CODESIZE;x++) if (tcode[x]==code[x]) y++;
  194.      if (y==CODESIZE)
  195.      {
  196.       ClipCursor(NULL);
  197.       EndDialog(hDlg,1);
  198.      }
  199.     return TRUE;
  200.    }
  201.   return TRUE;
  202.   default:
  203.   return FALSE;
  204.  }
  205. }
  206.