Zobrazit předchozí téma :: Zobrazit následující téma |
Odpoved |
Neotravuj tu s linuxem |
|
12% |
[ 1 ] |
Nevim |
|
37% |
[ 3 ] |
Vim, ale nepovim |
|
25% |
[ 2 ] |
Vim a povim |
|
25% |
[ 2 ] |
|
Celkem hlasů : 8 |
|
Autor |
Zpráva |
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 3. září 2017, 16:20:12 Předmět: Re: cteni dat ze vstupniho zarizeni |
|
|
Nevím, co přesně se snažíš udělat, ale raw input by měl normálně fungovat.
Potřebuješ handle na okno a WindowProc.
Init:
kód: |
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01;
rid.usUsage = 0x02;
rid.dwFlags = RIDEV_NOLEGACY | RIDEV_CAPTUREMOUSE;
rid.hwndTarget = hwnd;
if (RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE)) == FALSE) Error(...);
|
Deinit:
kód: |
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01;
rid.usUsage = 0x02;
rid.dwFlags = RIDEV_REMOVE;
rid.hwndTarget = 0;
RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));
|
Windowproc:
kód: |
case WM_INPUT:
{
UINT dwSize = 0;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, 0, &dwSize, sizeof(RAWINPUTHEADER));
buffer.resize(dwSize);
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, buffer.data(), &dwSize,
sizeof(RAWINPUTHEADER)) != dwSize) {
Error(...);
}
auto raw = (const RAWINPUT *)buffer.data();
if (raw->header.dwType == RIM_TYPEMOUSE) {
if (!(raw->data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE)) {
mouseDeltaX = raw->data.mouse.lLastX;
mouseDeltaY = raw->data.mouse.lLastY;
...
}
auto flg = raw->data.mouse.usButtonFlags;
if (flg & RI_MOUSE_LEFT_BUTTON_DOWN) {
...
}
if (flg & RI_MOUSE_LEFT_BUTTON_UP) {
...
}
if (flg & RI_MOUSE_RIGHT_BUTTON_DOWN) {
...
}
if (flg & RI_MOUSE_RIGHT_BUTTON_UP) {
...
}
if (flg & RI_MOUSE_MIDDLE_BUTTON_DOWN) {
...
}
if (flg & RI_MOUSE_MIDDLE_BUTTON_UP) {
...
}
if (flg & RI_MOUSE_WHEEL) {
wheelDelta = (float)*(const SHORT *)&raw->data.mouse.usButtonData;
wheelDelta /= WHEEL_DELTA;
...
}
}
return 0;
}
|
|
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 3. září 2017, 20:07:27 Předmět: |
|
|
S tvym examplem uz to nejaka data vraci, takze diky.
Nicmene... chci zjistit data vracena trackpointem, coz sice funguje, ale rozsah vracenych dat zavisi na softwarovem nastaveni citlivosti trackpointu. Takze to nejsou surova hw data, ktera jsou na linuxu mimochodem pro kazdou souradnici v signed byte v rozsahu -127 .. 127.
Duvod, proc to chci, popisu snad pozdeji, ted nejak nemam cas
Edit: Snazim se exaktne zmerit rozdil mezi chovanim trackpointu ve windows a v linuxu, abych mohl ten linux nastavit presne jako windows. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 5. září 2017, 15:06:50 Předmět: |
|
|
Ale na Windows se každý touchpad/trackpad/trackpoint chová jinak (asi proto nemáš přístup k raw datům, protože od toho tě odfiltruje driver - musel by sis udělat vlastní ). Driver od výrobce není jen v případě tzv. precision touchpadů/trackpadů, kde se použije driver od Microsoftu přímo ve Windows, aby se snížil lag ve zpracování. |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 5. září 2017, 15:47:30 Předmět: |
|
|
Napsat si driver mě samozřejmě napadlo, ale v principu mi to nepomůže, protože se snažím v podstatě zjistit chování toho existujícího driveru... _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 5. září 2017, 17:44:00 Předmět: |
|
|
Z různých fór se zdá, že se o problému s tím konkrétním typem trackpointu ví, tak asi počkám, až to vyřeší někdo jiný _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
|