2013-12-15 00:40:56 +04:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef touchinjection_sdk80_h
|
|
|
|
#define touchinjection_sdk80_h
|
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
#include <windows.h>
|
|
|
|
|
2013-12-15 00:40:56 +04:00
|
|
|
// Note, this isn't inclusive of all touch injection header info.
|
|
|
|
// You may need to add more to expand on current apis.
|
|
|
|
|
|
|
|
#ifndef TOUCH_FEEDBACK_DEFAULT
|
|
|
|
|
|
|
|
# define TOUCH_FEEDBACK_DEFAULT 0x1
|
|
|
|
# define TOUCH_FEEDBACK_INDIRECT 0x2
|
|
|
|
# define TOUCH_FEEDBACK_NONE 0x3
|
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
enum POINTER_FEEDBACK_MODE {
|
|
|
|
POINTER_FEEDBACK_DEFAULT =
|
|
|
|
1, // The injected pointer input feedback may get suppressed by the
|
|
|
|
// end-user settings in the Pen and Touch control panel.
|
|
|
|
POINTER_FEEDBACK_INDIRECT =
|
|
|
|
2, // The injected pointer input feedback overrides the end-user settings
|
|
|
|
// in the Pen and Touch control panel.
|
|
|
|
POINTER_FEEDBACK_NONE = 3, // No touch visualizations.
|
|
|
|
};
|
|
|
|
|
2013-12-15 00:40:56 +04:00
|
|
|
enum {
|
2020-05-09 02:19:38 +03:00
|
|
|
PT_POINTER = 0x00000001, // Generic pointer
|
|
|
|
PT_TOUCH = 0x00000002, // Touch
|
|
|
|
PT_PEN = 0x00000003, // Pen
|
|
|
|
PT_MOUSE = 0x00000004, // Mouse
|
|
|
|
PT_TOUCHPAD = 0x00000005, // Touch pad
|
2013-12-15 00:40:56 +04:00
|
|
|
};
|
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
using POINTER_INPUT_TYPE = DWORD;
|
|
|
|
using POINTER_FLAGS = UINT32;
|
2013-12-15 00:40:56 +04:00
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
enum POINTER_BUTTON_CHANGE_TYPE {
|
2013-12-15 00:40:56 +04:00
|
|
|
POINTER_CHANGE_NONE,
|
|
|
|
POINTER_CHANGE_FIRSTBUTTON_DOWN,
|
|
|
|
POINTER_CHANGE_FIRSTBUTTON_UP,
|
|
|
|
POINTER_CHANGE_SECONDBUTTON_DOWN,
|
|
|
|
POINTER_CHANGE_SECONDBUTTON_UP,
|
|
|
|
POINTER_CHANGE_THIRDBUTTON_DOWN,
|
|
|
|
POINTER_CHANGE_THIRDBUTTON_UP,
|
|
|
|
POINTER_CHANGE_FOURTHBUTTON_DOWN,
|
|
|
|
POINTER_CHANGE_FOURTHBUTTON_UP,
|
|
|
|
POINTER_CHANGE_FIFTHBUTTON_DOWN,
|
|
|
|
POINTER_CHANGE_FIFTHBUTTON_UP,
|
2021-03-02 21:29:44 +03:00
|
|
|
};
|
2013-12-15 00:40:56 +04:00
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
struct POINTER_INFO {
|
2013-12-15 00:40:56 +04:00
|
|
|
POINTER_INPUT_TYPE pointerType;
|
|
|
|
UINT32 pointerId;
|
|
|
|
UINT32 frameId;
|
|
|
|
POINTER_FLAGS pointerFlags;
|
|
|
|
HANDLE sourceDevice;
|
|
|
|
HWND hwndTarget;
|
|
|
|
POINT ptPixelLocation;
|
|
|
|
POINT ptHimetricLocation;
|
|
|
|
POINT ptPixelLocationRaw;
|
|
|
|
POINT ptHimetricLocationRaw;
|
|
|
|
DWORD dwTime;
|
|
|
|
UINT32 historyCount;
|
|
|
|
INT32 InputData;
|
|
|
|
DWORD dwKeyStates;
|
|
|
|
UINT64 PerformanceCount;
|
|
|
|
POINTER_BUTTON_CHANGE_TYPE ButtonChangeType;
|
2021-03-02 21:29:44 +03:00
|
|
|
};
|
2013-12-15 00:40:56 +04:00
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
using TOUCH_FLAGS = UINT32;
|
|
|
|
using TOUCH_MASK = UINT32;
|
2013-12-15 00:40:56 +04:00
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
struct POINTER_TOUCH_INFO {
|
2013-12-15 00:40:56 +04:00
|
|
|
POINTER_INFO pointerInfo;
|
|
|
|
TOUCH_FLAGS touchFlags;
|
|
|
|
TOUCH_MASK touchMask;
|
|
|
|
RECT rcContact;
|
|
|
|
RECT rcContactRaw;
|
|
|
|
UINT32 orientation;
|
|
|
|
UINT32 pressure;
|
2021-03-02 21:29:44 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
# define PEN_FLAG_NONE 0x00000000 // Default
|
|
|
|
# define PEN_FLAG_BARREL 0x00000001 // The barrel button is pressed
|
|
|
|
# define PEN_FLAG_INVERTED 0x00000002 // The pen is inverted
|
|
|
|
# define PEN_FLAG_ERASER 0x00000004 // The eraser button is pressed
|
|
|
|
|
|
|
|
# define PEN_MASK_NONE \
|
|
|
|
0x00000000 // Default - none of the optional fields are valid
|
|
|
|
# define PEN_MASK_PRESSURE 0x00000001 // The pressure field is valid
|
|
|
|
# define PEN_MASK_ROTATION 0x00000002 // The rotation field is valid
|
|
|
|
# define PEN_MASK_TILT_X 0x00000004 // The tiltX field is valid
|
|
|
|
# define PEN_MASK_TILT_Y 0x00000008 // The tiltY field is valid
|
|
|
|
|
|
|
|
using PEN_FLAGS = UINT32;
|
|
|
|
using PEN_MASK = UINT32;
|
|
|
|
|
|
|
|
struct POINTER_PEN_INFO {
|
|
|
|
POINTER_INFO pointerInfo;
|
|
|
|
PEN_FLAGS penFlags;
|
|
|
|
PEN_MASK penMask;
|
|
|
|
UINT32 pressure;
|
|
|
|
UINT32 rotation;
|
|
|
|
INT32 tiltX;
|
|
|
|
INT32 tiltY;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct POINTER_TYPE_INFO {
|
|
|
|
POINTER_INPUT_TYPE type;
|
|
|
|
union {
|
|
|
|
POINTER_TOUCH_INFO touchInfo;
|
|
|
|
POINTER_PEN_INFO penInfo;
|
|
|
|
};
|
|
|
|
};
|
2013-12-15 00:40:56 +04:00
|
|
|
|
|
|
|
# define TOUCH_FLAG_NONE 0x00000000 // Default
|
2019-01-18 12:16:18 +03:00
|
|
|
|
2013-12-15 00:40:56 +04:00
|
|
|
# define TOUCH_MASK_NONE \
|
|
|
|
0x00000000 // Default - none of the optional fields are valid
|
|
|
|
# define TOUCH_MASK_CONTACTAREA 0x00000001 // The rcContact field is valid
|
|
|
|
# define TOUCH_MASK_ORIENTATION 0x00000002 // The orientation field is valid
|
|
|
|
# define TOUCH_MASK_PRESSURE 0x00000004 // The pressure field is valid
|
2019-01-18 12:16:18 +03:00
|
|
|
|
2013-12-15 00:40:56 +04:00
|
|
|
# define POINTER_FLAG_NONE 0x00000000 // Default
|
|
|
|
# define POINTER_FLAG_NEW 0x00000001 // New pointer
|
|
|
|
# define POINTER_FLAG_INRANGE 0x00000002 // Pointer has not departed
|
|
|
|
# define POINTER_FLAG_INCONTACT 0x00000004 // Pointer is in contact
|
|
|
|
# define POINTER_FLAG_FIRSTBUTTON 0x00000010 // Primary action
|
|
|
|
# define POINTER_FLAG_SECONDBUTTON 0x00000020 // Secondary action
|
|
|
|
# define POINTER_FLAG_THIRDBUTTON 0x00000040 // Third button
|
|
|
|
# define POINTER_FLAG_FOURTHBUTTON 0x00000080 // Fourth button
|
|
|
|
# define POINTER_FLAG_FIFTHBUTTON 0x00000100 // Fifth button
|
|
|
|
# define POINTER_FLAG_PRIMARY 0x00002000 // Pointer is primary
|
|
|
|
# define POINTER_FLAG_CONFIDENCE \
|
|
|
|
0x00004000 // Pointer is considered unlikely to be accidental
|
|
|
|
# define POINTER_FLAG_CANCELED \
|
|
|
|
0x00008000 // Pointer is departing in an abnormal manner
|
|
|
|
# define POINTER_FLAG_DOWN \
|
|
|
|
0x00010000 // Pointer transitioned to down state (made contact)
|
|
|
|
# define POINTER_FLAG_UPDATE 0x00020000 // Pointer update
|
|
|
|
# define POINTER_FLAG_UP \
|
|
|
|
0x00040000 // Pointer transitioned from down state (broke contact)
|
|
|
|
# define POINTER_FLAG_WHEEL 0x00080000 // Vertical wheel
|
|
|
|
# define POINTER_FLAG_HWHEEL 0x00100000 // Horizontal wheel
|
|
|
|
# define POINTER_FLAG_CAPTURECHANGED 0x00200000 // Lost capture
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2013-12-15 00:40:56 +04:00
|
|
|
#endif // TOUCH_FEEDBACK_DEFAULT
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2013-12-15 00:40:56 +04:00
|
|
|
#define TOUCH_FLAGS_CONTACTUPDATE \
|
|
|
|
(POINTER_FLAG_UPDATE | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT)
|
|
|
|
#define TOUCH_FLAGS_CONTACTDOWN \
|
|
|
|
(POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT)
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2021-03-02 21:29:44 +03:00
|
|
|
using InitializeTouchInjectionPtr = BOOL(WINAPI*)(UINT32, DWORD);
|
|
|
|
using InjectTouchInputPtr = BOOL(WINAPI*)(UINT32, const POINTER_TOUCH_INFO*);
|
|
|
|
|
|
|
|
#if !defined(NTDDI_WIN10_RS5) || (NTDDI_VERSION < NTDDI_WIN10_RS5)
|
|
|
|
# define HSYNTHETICPOINTERDEVICE intptr_t
|
|
|
|
#endif // NTDDI_VERSION < NTDDI_WIN10_RS5
|
|
|
|
|
|
|
|
using CreateSyntheticPointerDevicePtr = HSYNTHETICPOINTERDEVICE(WINAPI*)(
|
|
|
|
POINTER_INPUT_TYPE, ULONG, POINTER_FEEDBACK_MODE);
|
|
|
|
using DestroySyntheticPointerDevicePtr = void(WINAPI*)(HSYNTHETICPOINTERDEVICE);
|
|
|
|
using InjectSyntheticPointerInputPtr = BOOL(WINAPI*)(HSYNTHETICPOINTERDEVICE,
|
|
|
|
const POINTER_TYPE_INFO*,
|
|
|
|
UINT32);
|
2018-11-30 13:46:48 +03:00
|
|
|
|
2021-01-07 11:53:08 +03:00
|
|
|
#endif // touchinjection_sdk80_h
|