Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <windows.h>
- #define BUF_SIZE 256
- #define MAX_SEP 50
- LARGE_INTEGER freq, start;
- double l = -1000, r = -2000; //time of last left or right presses
- double t() //time in ms
- {
- LARGE_INTEGER cur;
- QueryPerformanceCounter(&cur);
- double d = (double)(cur.QuadPart - start.QuadPart) / freq.QuadPart;
- //start = cur;
- return 1000 * d;
- }
- LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg) {
- case WM_CLOSE:
- PostQuitMessage(0);
- break;
- case WM_INPUT: {
- double tt = t();
- UINT dwSize;
- BYTE lpb[BUF_SIZE]; //too lazy to do properly (malloc/free)
- GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL,
- &dwSize, sizeof(RAWINPUTHEADER));
- if (dwSize > BUF_SIZE) {
- printf("uh oh raw input data too large %d", dwSize);
- exit(1);
- }
- GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb,
- &dwSize, sizeof(RAWINPUTHEADER));
- RAWINPUT* raw = (RAWINPUT*)lpb;
- if (raw->header.dwType == RIM_TYPEMOUSE) {
- int pressed = 0;
- if (raw->data.mouse.usButtonFlags &
- RI_MOUSE_LEFT_BUTTON_DOWN) {
- l = tt;
- pressed = 1;
- }
- if (raw->data.mouse.usButtonFlags &
- RI_MOUSE_RIGHT_BUTTON_DOWN) {
- r = tt;
- pressed = 1;
- }
- if (pressed && -MAX_SEP < l - r && l - r < MAX_SEP) {
- printf("%f\n", l - r);
- fflush(stdout);
- }
- /*
- printf("id:%X\tx:%d\ty:%d\tbtn:%04X\ttime:%f\n",
- raw->header.hDevice,
- raw->data.mouse.lLastX,
- raw->data.mouse.lLastY,
- raw->data.mouse.usButtonFlags,
- t());fflush(stdout);
- */
- }
- break;
- }
- default:
- return DefWindowProc(hWnd, msg, wParam, lParam);
- }
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR lpCmdLine, int nCmdShow){
- MSG msg = {0};
- WNDCLASS wc = {0};
- wc.lpfnWndProc = WndProc;
- wc.hInstance = hInstance;
- wc.lpszClassName = "idkwhattonamethis";
- RegisterClass(&wc);
- HWND hWnd = CreateWindow(wc.lpszClassName, NULL, 0, 0, 0, 0, 0,
- HWND_MESSAGE, NULL, hInstance, NULL);
- RAWINPUTDEVICE rid;
- rid.usUsagePage = 0x01;
- rid.usUsage = 0x02;
- rid.dwFlags = RIDEV_NOLEGACY | RIDEV_INPUTSINK;
- rid.hwndTarget = hWnd;
- RegisterRawInputDevices(&rid, 1, sizeof(rid));
- QueryPerformanceFrequency(&freq);
- //printf("timing precision: %f us", 1e6 / (double)freq.QuadPart);
- QueryPerformanceCounter(&start);
- while (GetMessage(&msg, NULL, 0, 0))
- DispatchMessage(&msg);
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement