onPointerEvent: handle 4, 5 mouse buttons based on INPUT_EVENT_MOUSEX event
This commit is contained in:
@@ -236,7 +236,7 @@ class MyRDPFactory(rdp.ServerFactory):
|
|||||||
@summary: Event call on mouse event
|
@summary: Event call on mouse event
|
||||||
@param x: x position
|
@param x: x position
|
||||||
@param y: y position
|
@param y: y position
|
||||||
@param button: 1, 2 or 3 button
|
@param button: 1, 2, 3, 4 or 5 button
|
||||||
@param isPressed: True if mouse button is pressed
|
@param isPressed: True if mouse button is pressed
|
||||||
@see: rdp.RDPServerObserver.onPointerEvent
|
@see: rdp.RDPServerObserver.onPointerEvent
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ class ProxyServer(rdp.RDPServerObserver):
|
|||||||
@summary: Event call on mouse event
|
@summary: Event call on mouse event
|
||||||
@param x: {int} x position
|
@param x: {int} x position
|
||||||
@param y: {int} y position
|
@param y: {int} y position
|
||||||
@param button: {int} 1, 2 or 3 button
|
@param button: {int} 1, 2, 3, 4 or 5 button
|
||||||
@param isPressed: {bool} True if mouse button is pressed
|
@param isPressed: {bool} True if mouse button is pressed
|
||||||
@see: rdp.RDPServerObserver.onPointerEvent
|
@see: rdp.RDPServerObserver.onPointerEvent
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -160,7 +160,16 @@ class PointerFlag(object):
|
|||||||
PTRFLAGS_BUTTON1 = 0x1000
|
PTRFLAGS_BUTTON1 = 0x1000
|
||||||
PTRFLAGS_BUTTON2 = 0x2000
|
PTRFLAGS_BUTTON2 = 0x2000
|
||||||
PTRFLAGS_BUTTON3 = 0x4000
|
PTRFLAGS_BUTTON3 = 0x4000
|
||||||
|
|
||||||
|
class PointerExFlag(object):
|
||||||
|
"""
|
||||||
|
@summary: Use in Pointer event
|
||||||
|
@see: https://msdn.microsoft.com/en-us/library/cc240587.aspx
|
||||||
|
"""
|
||||||
|
PTRXFLAGS_DOWN = 0x8000
|
||||||
|
PTRXFLAGS_BUTTON1 = 0x0001
|
||||||
|
PTRXFLAGS_BUTTON2 = 0x0002
|
||||||
|
|
||||||
class KeyboardFlag(object):
|
class KeyboardFlag(object):
|
||||||
"""
|
"""
|
||||||
@summary: Use in scan code key event
|
@summary: Use in scan code key event
|
||||||
|
|||||||
@@ -228,24 +228,35 @@ class RDPClientController(pdu.layer.PDUClientListener):
|
|||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
event = pdu.data.PointerEvent()
|
if button == 4 or button == 5:
|
||||||
if isPressed:
|
event = pdu.data.PointerExEvent()
|
||||||
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_DOWN
|
if isPressed:
|
||||||
|
event.pointerFlags.value |= pdu.data.PointerExFlag.PTRXFLAGS_DOWN
|
||||||
if button == 1:
|
|
||||||
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_BUTTON1
|
if button == 4:
|
||||||
elif button == 2:
|
event.pointerFlags.value |= pdu.data.PointerExFlag.PTRXFLAGS_BUTTON1
|
||||||
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_BUTTON2
|
elif button == 5:
|
||||||
elif button == 3:
|
event.pointerFlags.value |= pdu.data.PointerExFlag.PTRXFLAGS_BUTTON2
|
||||||
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_BUTTON3
|
|
||||||
else:
|
else:
|
||||||
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_MOVE
|
event = pdu.data.PointerEvent()
|
||||||
|
if isPressed:
|
||||||
|
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_DOWN
|
||||||
|
|
||||||
|
if button == 1:
|
||||||
|
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_BUTTON1
|
||||||
|
elif button == 2:
|
||||||
|
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_BUTTON2
|
||||||
|
elif button == 3:
|
||||||
|
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_BUTTON3
|
||||||
|
else:
|
||||||
|
event.pointerFlags.value |= pdu.data.PointerFlag.PTRFLAGS_MOVE
|
||||||
|
|
||||||
#position
|
# position
|
||||||
event.xPos.value = x
|
event.xPos.value = x
|
||||||
event.yPos.value = y
|
event.yPos.value = y
|
||||||
|
|
||||||
#send proper event
|
# send proper event
|
||||||
self._pduLayer.sendInputEvents([event])
|
self._pduLayer.sendInputEvents([event])
|
||||||
|
|
||||||
except InvalidValue:
|
except InvalidValue:
|
||||||
@@ -500,7 +511,7 @@ class RDPServerController(pdu.layer.PDUServerListener):
|
|||||||
#unicode
|
#unicode
|
||||||
elif event.messageType.value == pdu.data.InputMessageType.INPUT_EVENT_UNICODE:
|
elif event.messageType.value == pdu.data.InputMessageType.INPUT_EVENT_UNICODE:
|
||||||
observer.onKeyEventUnicode(event.slowPathInputData.unicode.value, not (event.slowPathInputData.keyboardFlags.value & pdu.data.KeyboardFlag.KBDFLAGS_RELEASE))
|
observer.onKeyEventUnicode(event.slowPathInputData.unicode.value, not (event.slowPathInputData.keyboardFlags.value & pdu.data.KeyboardFlag.KBDFLAGS_RELEASE))
|
||||||
#mouse event
|
#mouse events
|
||||||
elif event.messageType.value == pdu.data.InputMessageType.INPUT_EVENT_MOUSE:
|
elif event.messageType.value == pdu.data.InputMessageType.INPUT_EVENT_MOUSE:
|
||||||
isPressed = event.slowPathInputData.pointerFlags.value & pdu.data.PointerFlag.PTRFLAGS_DOWN
|
isPressed = event.slowPathInputData.pointerFlags.value & pdu.data.PointerFlag.PTRFLAGS_DOWN
|
||||||
button = 0
|
button = 0
|
||||||
@@ -511,6 +522,15 @@ class RDPServerController(pdu.layer.PDUServerListener):
|
|||||||
elif event.slowPathInputData.pointerFlags.value & pdu.data.PointerFlag.PTRFLAGS_BUTTON3:
|
elif event.slowPathInputData.pointerFlags.value & pdu.data.PointerFlag.PTRFLAGS_BUTTON3:
|
||||||
button = 3
|
button = 3
|
||||||
observer.onPointerEvent(event.slowPathInputData.xPos.value, event.slowPathInputData.yPos.value, button, isPressed)
|
observer.onPointerEvent(event.slowPathInputData.xPos.value, event.slowPathInputData.yPos.value, button, isPressed)
|
||||||
|
elif event.messageType.value == pdu.data.InputMessageType.INPUT_EVENT_MOUSEX:
|
||||||
|
isPressed = event.slowPathInputData.pointerFlags.value & pdu.data.PointerExFlag.PTRXFLAGS_DOWN
|
||||||
|
button = 0
|
||||||
|
if event.slowPathInputData.pointerFlags.value & pdu.data.PointerExFlag.PTRXFLAGS_BUTTON1:
|
||||||
|
button = 4
|
||||||
|
elif event.slowPathInputData.pointerFlags.value & pdu.data.PointerExFlag.PTRXFLAGS_BUTTON2:
|
||||||
|
button = 5
|
||||||
|
observer.onPointerEvent(event.slowPathInputData.xPos.value, event.slowPathInputData.yPos.value, button, isPressed)
|
||||||
|
|
||||||
|
|
||||||
def sendUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
|
def sendUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
|
||||||
"""
|
"""
|
||||||
@@ -698,7 +718,7 @@ class RDPServerObserver(object):
|
|||||||
@summary: Event call on mouse event
|
@summary: Event call on mouse event
|
||||||
@param x: x position
|
@param x: x position
|
||||||
@param y: y position
|
@param y: y position
|
||||||
@param button: 1, 2 or 3 button
|
@param button: 1, 2, 3, 4 or 5 button
|
||||||
@param isPressed: True if mouse button is pressed
|
@param isPressed: True if mouse button is pressed
|
||||||
"""
|
"""
|
||||||
raise CallPureVirtualFuntion("%s:%s defined by interface %s"%(self.__class__, "onPointerEvent", "RDPServerObserver"))
|
raise CallPureVirtualFuntion("%s:%s defined by interface %s"%(self.__class__, "onPointerEvent", "RDPServerObserver"))
|
||||||
Reference in New Issue
Block a user