Untitled
unknown
plain_text
a year ago
2.6 kB
16
Indexable
#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) {
if (raw->data.mouse.usButtonFlags &
RI_MOUSE_LEFT_BUTTON_DOWN) {
l = tt;
}
if (raw->data.mouse.usButtonFlags &
RI_MOUSE_LEFT_BUTTON_UP) {
printf("%f\n", tt - l);
fflush(stdout);
}
/*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;
}
Editor is loading...
Leave a Comment