internal static extern bool GetPointerType(int pointerID, out POINTER_INPUT_TYPE pointerType);
private static extern bool InjectTouch(int x, int y, POINTER_INPUT_TYPE pt_input, int pressure, int orientation, int id, int rcContactTop, int rcContactBottom, int rcContactLeft, int rcContactRight, POINTER_FLAGS pointerFlags, TOUCH_MASK touchMask);
protected PointerTypeInfo TransformPointer( PointerData pointerData, POINTER_INPUT_TYPE inputType) { var pointerTypeInfo = new PointerTypeInfo(); pointerTypeInfo.type = inputType; var pointerInfo = new PointerInfo(); pointerInfo.pointerType = inputType; pointerInfo.pointerId = pointerData.pointerId; pointerInfo.pointerFlags = pointerData.flags; pointerInfo.pixelLocation = pointerData.location; switch (inputType) { case POINTER_INPUT_TYPE.TOUCH: pointerTypeInfo.data.touchInfo.pointerInfo = pointerInfo; pointerTypeInfo.data.touchInfo.touchMask = TOUCH_MASK.NONE; pointerTypeInfo.data.touchInfo.touchFlags = (TOUCH_FLAGS)pointerData.pressedButton; if (pointerData.width.HasValue && pointerData.height.HasValue) { pointerTypeInfo.data.touchInfo.contact = new Rect { left = pointerTypeInfo.data.touchInfo.pointerInfo.pixelLocation.X - pointerData.width.Value / 2, right = pointerTypeInfo.data.touchInfo.pointerInfo.pixelLocation.X + pointerData.width.Value / 2, top = pointerTypeInfo.data.touchInfo.pointerInfo.pixelLocation.Y - pointerData.height.Value / 2, bottom = pointerTypeInfo.data.touchInfo.pointerInfo.pixelLocation.Y + pointerData.height.Value / 2 }; pointerTypeInfo.data.touchInfo.touchMask |= TOUCH_MASK.CONTACTAREA; } if (pointerData.pressure.HasValue) { pointerTypeInfo.data.touchInfo.pressure = pointerData.pressure.Value; pointerTypeInfo.data.touchInfo.touchMask |= TOUCH_MASK.PRESSURE; } if (pointerData.twist.HasValue) { pointerTypeInfo.data.touchInfo.orientation = pointerData.twist.Value; pointerTypeInfo.data.touchInfo.touchMask |= TOUCH_MASK.ORIENTATION; } break; case POINTER_INPUT_TYPE.PEN: pointerTypeInfo.data.penInfo.pointerInfo = pointerInfo; pointerTypeInfo.data.penInfo.penMask = PEN_MASK.NONE; pointerTypeInfo.data.penInfo.penFlags = (PEN_FLAGS)pointerData.pressedButton; if (pointerData.tiltX.HasValue) { pointerTypeInfo.data.penInfo.tiltX = pointerData.tiltX.Value; pointerTypeInfo.data.penInfo.penMask |= PEN_MASK.TILT_X; } if (pointerData.tiltY.HasValue) { pointerTypeInfo.data.penInfo.tiltY = pointerData.tiltY.Value; pointerTypeInfo.data.penInfo.penMask |= PEN_MASK.TILT_Y; } if (pointerData.pressure.HasValue) { pointerTypeInfo.data.penInfo.pressure = pointerData.pressure.Value; pointerTypeInfo.data.penInfo.penMask |= PEN_MASK.PRESSURE; } if (pointerData.twist.HasValue) { pointerTypeInfo.data.penInfo.rotation = pointerData.twist.Value; pointerTypeInfo.data.penInfo.penMask |= PEN_MASK.ROTATION; } break; default: pointerTypeInfo.data.touchInfo.pointerInfo = pointerInfo; pointerTypeInfo.data.touchInfo.touchMask = TOUCH_MASK.NONE; break; } return(pointerTypeInfo); }
internal static extern bool UnregisterPointerInputTarget(IntPtr hwnd, POINTER_INPUT_TYPE pointerType);
public static extern bool InitializePointerDeviceInjection( [In] POINTER_INPUT_TYPE type, [In] uint contactCount, [In] IntPtr monitor, [In] TOUCH_FEEDBACK visualMode, out IntPtr device);
internal static extern bool RegisterPointerInputTarget(IntPtr handle, POINTER_INPUT_TYPE pointerType);
public static extern bool GetPointerType(uint pPointerID, out POINTER_INPUT_TYPE pPointerType);
public static extern IntPtr CreateSyntheticPointerDevice(POINTER_INPUT_TYPE pointerType, ulong maxCount, POINTER_FEEDBACK_MODE mode);