Advertisement
Guest User

mouse smasher 1

a guest
Sep 3rd, 2015
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #define BUF_SIZE 256
  4.  
  5. #define MAX_SEP 50
  6.  
  7. LARGE_INTEGER freq, start;
  8.  
  9. double l = -1000, r = -2000; //time of last left or right presses
  10.  
  11. double t() //time in ms
  12. {
  13.     LARGE_INTEGER cur;
  14.     QueryPerformanceCounter(&cur);
  15.     double d = (double)(cur.QuadPart - start.QuadPart) / freq.QuadPart;
  16.     //start = cur;
  17.     return 1000 * d;
  18. }
  19.  
  20. LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  21. {
  22.     switch (msg) {
  23.     case WM_CLOSE:
  24.         PostQuitMessage(0);
  25.         break;
  26.     case WM_INPUT: {
  27.         double tt = t();
  28.         UINT dwSize;
  29.         BYTE lpb[BUF_SIZE]; //too lazy to do properly (malloc/free)
  30.         GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL,
  31.                 &dwSize, sizeof(RAWINPUTHEADER));
  32.         if (dwSize > BUF_SIZE) {
  33.             printf("uh oh raw input data too large %d", dwSize);
  34.             exit(1);
  35.         }
  36.         GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb,
  37.                 &dwSize, sizeof(RAWINPUTHEADER));
  38.         RAWINPUT* raw = (RAWINPUT*)lpb;
  39.         if (raw->header.dwType == RIM_TYPEMOUSE) {
  40.             int pressed = 0;
  41.             if (raw->data.mouse.usButtonFlags &
  42.                     RI_MOUSE_LEFT_BUTTON_DOWN) {
  43.                 l = tt;
  44.                 pressed = 1;
  45.             }
  46.             if (raw->data.mouse.usButtonFlags &
  47.                     RI_MOUSE_RIGHT_BUTTON_DOWN) {
  48.                 r = tt;
  49.                 pressed = 1;
  50.             }
  51.             if (pressed && -MAX_SEP < l - r && l - r < MAX_SEP) {
  52.                 printf("%f\n", l - r);
  53.                 fflush(stdout);
  54.             }
  55.             /*
  56.             printf("id:%X\tx:%d\ty:%d\tbtn:%04X\ttime:%f\n",
  57.                     raw->header.hDevice,
  58.                     raw->data.mouse.lLastX,
  59.                     raw->data.mouse.lLastY,
  60.                     raw->data.mouse.usButtonFlags,
  61.                     t());fflush(stdout);
  62.             */
  63.         }
  64.         break;
  65.     }
  66.     default:
  67.         return DefWindowProc(hWnd, msg, wParam, lParam);
  68.     }
  69.     return 0;
  70. }  
  71.  
  72. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  73.             LPSTR lpCmdLine, int nCmdShow){
  74.     MSG msg = {0};
  75.     WNDCLASS wc = {0};
  76.     wc.lpfnWndProc = WndProc;
  77.     wc.hInstance = hInstance;
  78.     wc.lpszClassName = "idkwhattonamethis";
  79.     RegisterClass(&wc);
  80.     HWND hWnd = CreateWindow(wc.lpszClassName, NULL, 0, 0, 0, 0, 0,
  81.                     HWND_MESSAGE, NULL, hInstance, NULL);
  82.  
  83.     RAWINPUTDEVICE rid;
  84.     rid.usUsagePage = 0x01;
  85.     rid.usUsage = 0x02;
  86.     rid.dwFlags = RIDEV_NOLEGACY | RIDEV_INPUTSINK;
  87.     rid.hwndTarget = hWnd;
  88.     RegisterRawInputDevices(&rid, 1, sizeof(rid));
  89.  
  90.     QueryPerformanceFrequency(&freq);
  91.     //printf("timing precision: %f us", 1e6 / (double)freq.QuadPart);
  92.     QueryPerformanceCounter(&start);
  93.  
  94.     while (GetMessage(&msg, NULL, 0, 0))
  95.         DispatchMessage(&msg);
  96.  
  97.     return msg.wParam;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement