1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
/* 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
#include <windows.h>
// 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
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.
};
enum {
PT_POINTER = 0x00000001, // Generic pointer
PT_TOUCH = 0x00000002, // Touch
PT_PEN = 0x00000003, // Pen
PT_MOUSE = 0x00000004, // Mouse
PT_TOUCHPAD = 0x00000005, // Touch pad
};
using POINTER_INPUT_TYPE = DWORD;
using POINTER_FLAGS = UINT32;
enum POINTER_BUTTON_CHANGE_TYPE {
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,
};
struct POINTER_INFO {
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;
};
using TOUCH_FLAGS = UINT32;
using TOUCH_MASK = UINT32;
struct POINTER_TOUCH_INFO {
POINTER_INFO pointerInfo;
TOUCH_FLAGS touchFlags;
TOUCH_MASK touchMask;
RECT rcContact;
RECT rcContactRaw;
UINT32 orientation;
UINT32 pressure;
};
# 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;
};
};
# define TOUCH_FLAG_NONE 0x00000000 // Default
# 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
# 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
#endif // TOUCH_FEEDBACK_DEFAULT
#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)
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);
#endif // touchinjection_sdk80_h
|