Hi

Thanks for you little demo, I should have written it! Sorry for the delay.

My guess is that this problem always existed, but for some reason was not so apparent as in win10 (whatever is different). You have seen one occurrence of a wrong dx which might show, that this problem also exists in win7.

The only solution I see to solve this is to change to rawinput in exclusive mode. Maybe I will give it a try when I have a moment.

Anyway, I added some print statements:

    ...
    @ViewEventHandler
    @Win32EventHandler(WM_MOUSEMOVE)
    def _event_mousemove(self, msg, wParam, lParam):
        x, y = self._get_location(lParam)
print('_event_mousemove: !!!', x, y)

        if (x, y) == self._exclusive_mouse_client:
            # Ignore the event caused by SetCursorPos
            self._mouse_x = x
            self._mouse_y = y
            return 0
        print("_event_mousemove: !exlcusive ignored, x,y", (x,y), "vs exclusive mouse client", self._exclusive_mouse_client)

        y = self._height - y

        if self._exclusive_mouse and self._has_focus:
            # Reset mouse position (so we don't hit the edge of the screen).
            _x, _y = self._exclusive_mouse_screen
            self.set_mouse_position(_x, _y, absolute=True)

        dx = x - self._mouse_x
        dy = y - self._mouse_y
    ...

and in:
    ...
    def set_mouse_position(self, x, y, absolute=False):
        if not absolute:
            rect = RECT()
            _user32.GetClientRect(self._view_hwnd, byref(rect))
            _user32.MapWindowPoints(self._view_hwnd, HWND_DESKTOP, byref(rect), 2)

            x = x + rect.left
            y = rect.top + (rect.bottom - rect.top) - y

        _user32.SetCursorPos(x, y)
        print("set_mouse_position", (x, y))

    ...

And it seems to be a windows problem (as indicated already by the stackoverflow entries). I have tried py3.6 64bit and py2.7 32bit (see below) both using pyglet 1.2.4 (pip installed).

No special configuration for scaling or similar:






Here the output for py3.6 64bit, moving the mouse only to the right:

...\Pyweek24> py -3 .\pylget_mouse.py
set_mouse_position (617, 453)
_event_mousemove: !!! 320 240
_event_mousemove: !!! 320 240
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:2, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 322 239
_event_mousemove: !exlcusive ignored, x,y (322, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:241, dx:1, dy:1
_event_mousemove: !!! 320 240
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:2, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0*>>>neg dx<<<*
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:1, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 323 239
_event_mousemove: !exlcusive ignored, x,y (323, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:241, dx:0, dy:1
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-2, dy:-1 *>>>neg dx<<<*
_event_mousemove: !!! 326 238
_event_mousemove: !exlcusive ignored, x,y (326, 238) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 326, y:242, dx:5, dy:2
_event_mousemove: !!! 326 239
_event_mousemove: !exlcusive ignored, x,y (326, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 326, y:241, dx:0, dy:-1
_event_mousemove: !!! 325 239
_event_mousemove: !exlcusive ignored, x,y (325, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 325, y:241, dx:-1, dy:*0 >>>neg dx<<<*
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:-2, dy:-1 *>>>neg dx<<<*
_event_mousemove: !!! 324 239
_event_mousemove: !exlcusive ignored, x,y (324, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:241, dx:1, dy:1
_event_mousemove: !!! 322 239
_event_mousemove: !exlcusive ignored, x,y (322, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:241, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:-1*>>>neg dx<<<*
_event_mousemove: !!! 327 240
_event_mousemove: !exlcusive ignored, x,y (327, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 327, y:240, dx:6, dy:0
_event_mousemove: !!! 329 240
_event_mousemove: !exlcusive ignored, x,y (329, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 329, y:240, dx:2, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-7, dy:0>>>neg dx<<<
_event_mousemove: !!! 320 240
_event_mousemove: !!! 323 239
_event_mousemove: !exlcusive ignored, x,y (323, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:241, dx:3, dy:1
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-2, dy:-1*>>>neg dx<<<*
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 324 240
_event_mousemove: !exlcusive ignored, x,y (324, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:240, dx:3, dy:0
_event_mousemove: !!! 324 239
_event_mousemove: !exlcusive ignored, x,y (324, 239) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:241, dx:0, dy:1
_event_mousemove: !!! 325 240
_event_mousemove: !exlcusive ignored, x,y (325, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 325, y:240, dx:1, dy:-1
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-1, dy:0*>>>neg dx<<<*
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 324 240
_event_mousemove: !exlcusive ignored, x,y (324, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:240, dx:2, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 324 240
_event_mousemove: !exlcusive ignored, x,y (324, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:240, dx:4, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:2, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-1, dy:0 *>>>neg dx<<*<
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:2, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 324 240
_event_mousemove: !exlcusive ignored, x,y (324, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:240, dx:1, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-2, dy:0*>>>neg dx<<<*
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:1, dy:0
_event_mousemove: !!! 325 240
_event_mousemove: !exlcusive ignored, x,y (325, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 325, y:240, dx:2, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-3, dy:*0 >>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0>>>neg dx<<<
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:2, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:2, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-2, dy:0*>>>neg dx<<<*
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:2, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-1, dy:0>>>neg dx<<<
_event_mousemove: !!! 320 240
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:2, dy:0
_event_mousemove: !!! 324 240
_event_mousemove: !exlcusive ignored, x,y (324, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 324, y:240, dx:2, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:-1, dy:0*>>>neg dx<<<*
_event_mousemove: !!! 325 240
_event_mousemove: !exlcusive ignored, x,y (325, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 325, y:240, dx:2, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:-1, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:2, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 320 240
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:3, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 323 240
_event_mousemove: !exlcusive ignored, x,y (323, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 323, y:240, dx:1, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-2, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 322, y:240, dx:1, dy:0
_event_mousemove: !!! 322 240
_event_mousemove: !exlcusive ignored, x,y (322, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:-1, dy:0 *>>>neg dx<<<*
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 320 240
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
Move x: 321, y:240, dx:1, dy:0
_event_mousemove: !!! 321 240
_event_mousemove: !exlcusive ignored, x,y (321, 240) vs exclusive mouse client (320, 240)
set_mouse_position (617, 453)
_event_mousemove: !!! 320 240




And here the output of py2.7 32bit, moving my mouse to the right only:

...\Pyweek24> py -2 .\pylget_mouse.py
Move x: 320, y:241, dx:0, dy:1
Move x: 321, y:240, dx:1, dy:-1
Move x: 321, y:240, dx:1, dy:0
Move x: 322, y:240, dx:2, dy:0
Move x: 321, y:240, dx:-1, dy:0 *>>>neg dx<<<*
Move x: 321, y:240, dx:1, dy:0
Move x: 321, y:241, dx:0, dy:1
Move x: 322, y:241, dx:1, dy:0
Move x: 322, y:240, dx:0, dy:-1
Move x: 324, y:240, dx:2, dy:0
Move x: 322, y:241, dx:-2, dy:1 >>>neg dx<<<
Move x: 325, y:240, dx:3, dy:-1
Move x: 322, y:240, dx:-3, dy:0 >>>neg dx<<<
Move x: 322, y:240, dx:2, dy:0
Move x: 321, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 323, y:241, dx:2, dy:1
Move x: 323, y:240, dx:0, dy:-1
Move x: 322, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 321, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 322, y:240, dx:1, dy:0
Move x: 324, y:240, dx:2, dy:0
Move x: 322, y:240, dx:-2, dy:0 >>>neg dx<<<
Move x: 321, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 322, y:240, dx:1, dy:0
Move x: 323, y:240, dx:1, dy:0
Move x: 322, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 323, y:240, dx:1, dy:0
Move x: 322, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 321, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 322, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 322, y:240, dx:1, dy:0
Move x: 323, y:240, dx:1, dy:0
Move x: 324, y:240, dx:1, dy:0
Move x: 326, y:240, dx:2, dy:0
Move x: 322, y:240, dx:-4, dy:0 >>>neg dx<<<
Move x: 323, y:240, dx:1, dy:0
Move x: 322, y:239, dx:-1, dy:-1 >>>neg dx<<<
Move x: 324, y:240, dx:2, dy:1
Move x: 324, y:239, dx:0, dy:-1
Move x: 323, y:239, dx:-1, dy:0 >>>neg dx<<<
Move x: 323, y:240, dx:0, dy:1
Move x: 324, y:240, dx:1, dy:0
Move x: 322, y:239, dx:-2, dy:-1 >>>neg dx<<<
Move x: 322, y:240, dx:0, dy:1
Move x: 322, y:239, dx:0, dy:-1
Move x: 321, y:240, dx:-1, dy:1 >>>neg dx<<<
Move x: 322, y:240, dx:1, dy:0
Move x: 323, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 322, y:240, dx:1, dy:0
Move x: 323, y:240, dx:1, dy:0
Move x: 322, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 323, y:240, dx:1, dy:0
Move x: 321, y:240, dx:-2, dy:0 >>>neg dx<<<
Move x: 322, y:240, dx:1, dy:0
Move x: 324, y:240, dx:2, dy:0
Move x: 323, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 324, y:240, dx:1, dy:0
Move x: 322, y:240, dx:-2, dy:0 >>>neg dx<<<
Move x: 324, y:240, dx:2, dy:0
Move x: 323, y:240, dx:-1, dy:0 >>>neg dx<<<
Move x: 324, y:240, dx:1, dy:0
Move x: 321, y:240, dx:-3, dy:0 >>>neg dx<<<
Move x: 321, y:240, dx:1, dy:0
Move x: 324, y:240, dx:3, dy:0
Move x: 322, y:240, dx:-2, dy:0 >>>neg dx<<<
Move x: 324, y:240, dx:2, dy:0
Move x: 321, y:240, dx:-3, dy:0 >>>neg dx<<<
Move x: 321, y:240, dx:1, dy:0
Move x: 322, y:240, dx:2, dy:0
Move x: 321, y:240, dx:1, dy:0
Move x: 321, y:240, dx:1, dy:0




On 06.11.2017 15:26, Daniel Gillet wrote:
Hello,

My config:
Windows 7 Pro 64 bits
python 3.6 64 bits and python 3.4 32 bits
pyglet 1.2.4

I tried the following code:

import pyglet

window = pyglet.window.Window()

@window.event
def on_mouse_motion(x, y, dx, dy):
    print("Move x: {x}, y:{y}, dx:{dx}, dy:{dy}".format(x=x, y=y, dx=dx, dy=dy))

@window.event
def on_mouse_drag(x, y, dx, dy, buttons, modifiers):
    print("Drag x: {x}, y:{y}, dx:{dx}, dy:{dy}".format(x=x, y=y, dx=dx, dy=dy))

window.set_exclusive_mouse(True)
pyglet.app.run()

I don't see the problem you describe. I only get negative dx when I move to the left and positive when moving to the right.
Left movements:
Move x: 319, y:240, dx:-1, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:241, dx:-2, dy:1
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 318, y:241, dx:-2, dy:1
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:241, dx:-1, dy:1
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 317, y:240, dx:-3, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 317, y:240, dx:-3, dy:0
Move x: 318, y:241, dx:-2, dy:1
Move x: 317, y:240, dx:-3, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, *dx:1*, dy:0
Move x: 318, y:241, dx:-2, dy:1
Move x: 318, y:240, dx:-2, dy:0
Move x: 317, y:240, dx:-3, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 319, y:240, dx:-1, dy:0
Move x: 318, y:240, dx:-2, dy:0
Move x: 319, y:240, dx:-1, dy:0

You'll notice one occurence of a right dx but in general I'm getting my movement to the left as expected.

Looking at the code, I can see that in exclusive mode, the WM_MOUSEMOVE is specifically ignored. In pyglet/window/win32/__init__.py line 711

@ViewEventHandler
@Win32EventHandler(WM_MOUSEMOVE)
    def _event_mousemove(self, msg, wParam, lParam):
        x, y = self._get_location(lParam)

if (x, y) == self._exclusive_mouse_client:
            # Ignore the event caused by SetCursorPos
            self._mouse_x = x
            self._mouse_y = y
            return 0

        y = self._height - y

        if self._exclusive_mouse and self._has_focus:
# Reset mouse position (so we don't hit the edge of the screen).
_x, _y = self._exclusive_mouse_screen
self.set_mouse_position(_x, _y, absolute=True)

        dx = x - self._mouse_x
        dy = y - self._mouse_y

        if not self._tracking:
# There is no WM_MOUSEENTER message (!), so fake it from the
# first WM_MOUSEMOVE event after leaving.  Use self._tracking
# to determine when to recreate the tracking structure after
# re-entering (to track the next WM_MOUSELEAVE).
self._mouse_in_window = True
self.set_mouse_platform_visible()
self.dispatch_event('on_mouse_enter', x, y)
self._tracking = True
track = TRACKMOUSEEVENT()
track.cbSize = sizeof(track)
track.dwFlags = TME_LEAVE
track.hwndTrack = self._view_hwnd
_user32.TrackMouseEvent(byref(track))

        # Don't generate motion/drag events when mouse hasn't moved. (Issue
        # 305)
        if self._mouse_x == x and self._mouse_y == y:
return 0

self._mouse_x = x
self._mouse_y = y

buttons = 0
        if wParam & MK_LBUTTON:
buttons |= mouse.LEFT
        if wParam & MK_MBUTTON:
buttons |= mouse.MIDDLE
        if wParam & MK_RBUTTON:
buttons |= mouse.RIGHT

        if buttons:
# Drag event
modifiers = self._get_modifiers()
self.dispatch_event('on_mouse_drag',
    x, y, dx, dy, buttons, modifiers)
else:
# Motion event
self.dispatch_event('on_mouse_motion', x, y, dx, dy)
return 0

I've highlighted in blue the code relevant to ignoring SetCursorPos.

Obviously this does not seem to work on your machine. It would be interesting to add some print statements in that part of the code to check if indeed the SetCursorPos is ignored.

Maybe using my little test code above would prove useful.

Let us know how this goes.

Dan
--
You received this message because you are subscribed to the Google Groups "pyglet-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at https://groups.google.com/group/pyglet-users.
For more options, visit https://groups.google.com/d/optout.


--
You received this message because you are subscribed to the Google Groups 
"pyglet-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/pyglet-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to