headers/winuser.h: add missing symbols and defines

Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/winuser.h b/mingw-w64-headers/include/winuser.h
index 505a884..01f2a5b 100644
--- a/mingw-w64-headers/include/winuser.h
+++ b/mingw-w64-headers/include/winuser.h
@@ -262,10 +262,12 @@
 #define VK_KANA 0x15
 #define VK_HANGEUL 0x15
 #define VK_HANGUL 0x15
+#define VK_IME_ON 0x16
 #define VK_JUNJA 0x17
 #define VK_FINAL 0x18
 #define VK_HANJA 0x19
 #define VK_KANJI 0x19
+#define VK_IME_OFF 0x1A
 #define VK_ESCAPE 0x1B
 #define VK_CONVERT 0x1C
 #define VK_NONCONVERT 0x1D
@@ -332,6 +334,16 @@
 #define VK_F22 0x85
 #define VK_F23 0x86
 #define VK_F24 0x87
+#if _WIN32_WINNT >= 0x0604
+#define VK_NAVIGATION_VIEW 0x88
+#define VK_NAVIGATION_MENU 0x89
+#define VK_NAVIGATION_UP 0x8A
+#define VK_NAVIGATION_DOWN 0x8B
+#define VK_NAVIGATION_LEFT 0x8C
+#define VK_NAVIGATION_RIGHT 0x8D
+#define VK_NAVIGATION_ACCEPT 0x8E
+#define VK_NAVIGATION_CANCEL 0x8F
+#endif /* _WIN32_WINNT >= 0x0604 */
 #define VK_NUMLOCK 0x90
 #define VK_SCROLL 0x91
 #define VK_OEM_NEC_EQUAL 0x92
@@ -371,6 +383,32 @@
 #define VK_OEM_PERIOD 0xBE
 #define VK_OEM_2 0xBF
 #define VK_OEM_3 0xC0
+#if _WIN32_WINNT >= 0x0604
+#define VK_GAMEPAD_A 0xC3
+#define VK_GAMEPAD_B 0xC4
+#define VK_GAMEPAD_X 0xC5
+#define VK_GAMEPAD_Y 0xC6
+#define VK_GAMEPAD_RIGHT_SHOULDER 0xC7
+#define VK_GAMEPAD_LEFT_SHOULDER 0xC8
+#define VK_GAMEPAD_LEFT_TRIGGER 0xC9
+#define VK_GAMEPAD_RIGHT_TRIGGER 0xCA
+#define VK_GAMEPAD_DPAD_UP 0xCB
+#define VK_GAMEPAD_DPAD_DOWN 0xCC
+#define VK_GAMEPAD_DPAD_LEFT 0xCD
+#define VK_GAMEPAD_DPAD_RIGHT 0xCE
+#define VK_GAMEPAD_MENU 0xCF
+#define VK_GAMEPAD_VIEW 0xD0
+#define VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON 0xD1
+#define VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON 0xD2
+#define VK_GAMEPAD_LEFT_THUMBSTICK_UP 0xD3
+#define VK_GAMEPAD_LEFT_THUMBSTICK_DOWN 0xD4
+#define VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT 0xD5
+#define VK_GAMEPAD_LEFT_THUMBSTICK_LEFT 0xD6
+#define VK_GAMEPAD_RIGHT_THUMBSTICK_UP 0xD7
+#define VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN 0xD8
+#define VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT 0xD9
+#define VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT 0xDA
+#endif /* _WIN32_WINNT >= 0x0604 */
 #define VK_OEM_4 0xDB
 #define VK_OEM_5 0xDC
 #define VK_OEM_6 0xDD
@@ -629,8 +667,10 @@
 #define LLKHF_INJECTED 0x00000010
 #define LLKHF_ALTDOWN (KF_ALTDOWN >> 8)
 #define LLKHF_UP (KF_UP >> 8)
+#define LLKHF_LOWER_IL_INJECTED 0x00000002
 
 #define LLMHF_INJECTED 0x00000001
+#define LLMHF_LOWER_IL_INJECTED 0x00000002
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct tagKBDLLHOOKSTRUCT {
@@ -820,6 +860,7 @@
 #define UOI_HEAPSIZE 5
 #define UOI_IO 6
 #endif
+#define UOI_TIMERPROC_EXCEPTION_SUPPRESSION 7
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct tagUSEROBJECTFLAGS {
@@ -1139,9 +1180,13 @@
 #define WM_SYSKEYUP 0x0105
 #define WM_SYSCHAR 0x0106
 #define WM_SYSDEADCHAR 0x0107
+#if _WIN32_WINNT >= 0x0501
 #define WM_UNICHAR 0x0109
 #define WM_KEYLAST 0x0109
 #define UNICODE_NOCHAR 0xFFFF
+#else
+#define WM_KEYLAST 0x0108
+#endif
 #define WM_IME_STARTCOMPOSITION 0x010D
 #define WM_IME_ENDCOMPOSITION 0x010E
 #define WM_IME_COMPOSITION 0x010F
@@ -1210,8 +1255,12 @@
 
 #if _WIN32_WINNT >= 0x0600
 #define WM_MOUSELAST 0x020e
-#else
+#elif _WIN32_WINNT >= 0x0500
 #define WM_MOUSELAST 0x020d
+#elif (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
+#define WM_MOUSELAST 0x020a
+#else
+#define WM_MOUSELAST 0x0209
 #endif
 
 #define WHEEL_DELTA 120
@@ -1311,6 +1360,10 @@
 #define WM_TOUCHHITTESTING 0x024d
 #define WM_POINTERWHEEL 0x024e
 #define WM_POINTERHWHEEL 0x024f
+#define DM_POINTERHITTEST 0x0250
+#define WM_POINTERROUTEDTO 0x0251
+#define WM_POINTERROUTEDAWAY 0x0252
+#define WM_POINTERROUTEDRELEASED 0x0253
 #endif
 
 #define WM_IME_SETCONTEXT 0x0281
@@ -1333,6 +1386,11 @@
 #if WINVER >= 0x0601
 #define WM_DPICHANGED 0x02e0
 #endif
+#if WINVER >= 0x0605
+#define WM_DPICHANGED_BEFOREPARENT 0x02e2
+#define WM_DPICHANGED_AFTERPARENT 0x02e3
+#define WM_GETDPISCALEDSIZE 0x02e4
+#endif
 #define WM_CUT 0x0300
 #define WM_COPY 0x0301
 #define WM_PASTE 0x0302
@@ -1728,7 +1786,13 @@
 #define CF_HDROP 15
 #define CF_LOCALE 16
 #define CF_DIBV5 17
+#if WINVER >= 0x0500
 #define CF_MAX 18
+#elif WINVER >= 0x0400
+#define CF_MAX 17
+#else
+#define CF_MAX 15
+#endif
 
 #define CF_OWNERDISPLAY 0x0080
 #define CF_DSPTEXT 0x0081
@@ -1961,6 +2025,8 @@
 #endif
 #define EWX_HYBRID_SHUTDOWN 0x00400000
 #define EWX_BOOTOPTIONS 0x01000000
+#define EWX_ARSO 0x04000000
+#define EWX_CHECK_SAFE_FOR_SERVER 0x08000000
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 #define ExitWindows(dwReserved,Code) ExitWindowsEx(EWX_LOGOFF,0xFFFFFFFF)
@@ -2219,6 +2285,7 @@
 #if _WIN32_WINNT >= 0x0601
 #define WDA_NONE 0x00000000
 #define WDA_MONITOR 0x00000001
+#define WDA_EXCLUDEFROMCAPTURE 0x00000011
 
   WINUSERAPI WINBOOL WINAPI GetWindowDisplayAffinity (HWND hWnd, DWORD *pdwAffinity);
   WINUSERAPI WINBOOL WINAPI SetWindowDisplayAffinity (HWND hWnd, DWORD dwAffinity);
@@ -2370,8 +2437,27 @@
   WINUSERAPI LRESULT WINAPI DefDlgProcW(HWND hDlg,UINT Msg,WPARAM wParam,LPARAM lParam);
 #endif
 
+  typedef enum DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS {
+    DCDC_DEFAULT = 0x0000,
+    DCDC_DISABLE_FONT_UPDATE = 0x0001,
+    DCDC_DISABLE_RELAYOUT = 0x0002
+  } DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS;
+
+WINBOOL WINAPI SetDialogControlDpiChangeBehavior(HWND hWnd, DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS mask, DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS values);
+DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS WINAPI GetDialogControlDpiChangeBehavior(HWND hWnd);
+
+  typedef enum DIALOG_DPI_CHANGE_BEHAVIORS {
+    DDC_DEFAULT = 0x0000,
+    DDC_DISABLE_ALL = 0x0001,
+    DDC_DISABLE_RESIZE = 0x0002,
+    DDC_DISABLE_CONTROL_RELAYOUT = 0x0004
+  } DIALOG_DPI_CHANGE_BEHAVIORS;
+
+WINBOOL WINAPI SetDialogDpiChangeBehavior(HWND hDlg, DIALOG_DPI_CHANGE_BEHAVIORS mask, DIALOG_DPI_CHANGE_BEHAVIORS values);
+DIALOG_DPI_CHANGE_BEHAVIORS WINAPI GetDialogDpiChangeBehavior(HWND hDlg);
+
 #define DLGWINDOWEXTRA 30
-#endif
+#endif /* !NOCTLMGR */
 
 #ifndef NOMSG
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
@@ -2573,6 +2659,7 @@
 #define POINTER_FLAG_WHEEL 0x00080000
 #define POINTER_FLAG_HWHEEL 0x00100000
 #define POINTER_FLAG_CAPTURECHANGED 0x00200000
+#define POINTER_FLAG_HASTRANSFORM 0x00400000
 
 #define POINTER_MOD_SHIFT (0x0004)
 #define POINTER_MOD_CTRL (0x0008)
@@ -2714,7 +2801,10 @@
     PT_POINTER = 0x00000001,
     PT_TOUCH = 0x00000002,
     PT_PEN = 0x00000003,
-    PT_MOUSE = 0x00000004,
+    PT_MOUSE = 0x00000004
+#if WINVER >= 0x0603
+    ,PT_TOUCHPAD = 0x00000005
+#endif
   };
 
   typedef enum tagFEEDBACK_TYPE {
@@ -2785,6 +2875,40 @@
     INT32 tiltY;
   } POINTER_PEN_INFO;
 
+  typedef enum {
+    POINTER_FEEDBACK_DEFAULT = 1,
+    POINTER_FEEDBACK_INDIRECT = 2,
+    POINTER_FEEDBACK_NONE = 3
+  } POINTER_FEEDBACK_MODE;
+
+  typedef struct tagUSAGE_PROPERTIES {
+    USHORT level;
+    USHORT page;
+    USHORT usage;
+    INT32 logicalMinimum;
+    INT32 logicalMaximum;
+    USHORT unit;
+    USHORT exponent;
+    BYTE count;
+    INT32 physicalMinimum;
+    INT32 physicalMaximum;
+  } USAGE_PROPERTIES, *PUSAGE_PROPERTIES;
+
+  typedef struct tagPOINTER_TYPE_INFO {
+    POINTER_INPUT_TYPE  type;
+    __C89_NAMELESS union {
+        POINTER_TOUCH_INFO touchInfo;
+        POINTER_PEN_INFO penInfo;
+    };
+  } POINTER_TYPE_INFO, *PPOINTER_TYPE_INFO;
+
+  typedef struct tagINPUT_INJECTION_VALUE {
+    USHORT page;
+    USHORT usage;
+    INT32 value;
+    USHORT index;
+  } INPUT_INJECTION_VALUE, *PINPUT_INJECTION_VALUE;
+
   typedef struct tagTOUCH_HIT_TESTING_PROXIMITY_EVALUATION {
     UINT16 score;
     POINT adjustedPoint;
@@ -2816,7 +2940,9 @@
   WINUSERAPI WINBOOL WINAPI GetPointerFramePenInfoHistory (UINT32 pointerId, UINT32 *entriesCount, UINT32 *pointerCount, POINTER_PEN_INFO *penInfo);
   WINUSERAPI WINBOOL WINAPI SkipPointerFrameMessages (UINT32 pointerId);
   WINUSERAPI WINBOOL WINAPI RegisterPointerInputTarget (HWND hwnd, POINTER_INPUT_TYPE pointerType);
+  WINUSERAPI WINBOOL WINAPI RegisterPointerInputTargetEx(HWND hwnd, POINTER_INPUT_TYPE pointerType, WINBOOL fObserve);
   WINUSERAPI WINBOOL WINAPI UnregisterPointerInputTarget (HWND hwnd, POINTER_INPUT_TYPE pointerType);
+  WINUSERAPI WINBOOL WINAPI UnregisterPointerInputTargetEx(HWND hwnd, POINTER_INPUT_TYPE pointerType);
   WINUSERAPI WINBOOL WINAPI EnableMouseInPointer (WINBOOL fEnable);
   WINUSERAPI WINBOOL WINAPI IsMouseInPointerEnabled (VOID);
   WINUSERAPI WINBOOL WINAPI RegisterTouchHitTestingWindow (HWND hwnd, ULONG value);
@@ -2827,6 +2953,17 @@
   WINUSERAPI WINBOOL WINAPI SetWindowFeedbackSetting (HWND hwnd, FEEDBACK_TYPE feedback, DWORD dwFlags, UINT32 size, CONST VOID *configuration);
 #endif
 
+#if WDK_NTDDI_VERSION >= NTDDI_WIN10_RS3
+WINUSERAPI WINBOOL WINAPI EnableMouseInPointerForThread(VOID);
+#endif
+
+#if NTDDI_VERSION >= NTDDI_WIN10_RS5
+DECLARE_HANDLE(HSYNTHETICPOINTERDEVICE);
+WINUSERAPI HSYNTHETICPOINTERDEVICE WINAPI CreateSyntheticPointerDevice(POINTER_INPUT_TYPE pointerType, ULONG maxCount, POINTER_FEEDBACK_MODE mode);
+WINUSERAPI WINBOOL WINAPI InjectSyntheticPointerInput(HSYNTHETICPOINTERDEVICE device, CONST POINTER_TYPE_INFO* pointerInfo, UINT32 count);
+WINUSERAPI VOID WINAPI DestroySyntheticPointerDevice(HSYNTHETICPOINTERDEVICE device);
+#endif /* NTDDI_VERSION >= NTDDI_WIN10_RS5 */
+
   typedef struct tagLASTINPUTINFO {
     UINT cbSize;
     DWORD dwTime;
@@ -3049,8 +3186,12 @@
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   WINUSERAPI int WINAPI GetSystemMetrics(int nIndex);
 #endif
+#if WINVER >= 0x0605
+WINUSERAPI int WINAPI GetSystemMetricsForDpi(int nIndex, UINT dpi);
 #endif
 
+#endif /* !NOSYSMETRICS */
+
 #ifndef NOMENUS
 
 #define PMB_ACTIVE 0x00000001
@@ -3498,6 +3639,10 @@
   WINUSERAPI WINBOOL WINAPI GetWindowRect(HWND hWnd,LPRECT lpRect);
   WINUSERAPI WINBOOL WINAPI AdjustWindowRect(LPRECT lpRect,DWORD dwStyle,WINBOOL bMenu);
   WINUSERAPI WINBOOL WINAPI AdjustWindowRectEx(LPRECT lpRect,DWORD dwStyle,WINBOOL bMenu,DWORD dwExStyle);
+#if WINVER >= 0x0605
+WINUSERAPI WINBOOL WINAPI AdjustWindowRectExForDpi(LPRECT lpRect, DWORD dwStyle, WINBOOL bMenu, DWORD dwExStyle, UINT dpi);
+#endif
+
 #endif
 
 #define HELPINFO_WINDOW 0x0001
@@ -3823,8 +3968,12 @@
 #define GW_HWNDPREV 3
 #define GW_OWNER 4
 #define GW_CHILD 5
+#if WINVER <= 0x0400
+#define GW_MAX 5
+#else
 #define GW_ENABLEDPOPUP 6
 #define GW_MAX 6
+#endif
 
   WINUSERAPI HWND WINAPI GetWindow(HWND hWnd,UINT uCmd);
 
@@ -3984,6 +4133,10 @@
 #define IDC_HAND MAKEINTRESOURCE(32649)
 #define IDC_APPSTARTING MAKEINTRESOURCE(32650)
 #define IDC_HELP MAKEINTRESOURCE(32651)
+#if WINVER >= 0x0606
+#define IDC_PIN MAKEINTRESOURCE(32671)
+#define IDC_PERSON MAKEINTRESOURCE(32672)
+#endif
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct _ICONINFO {
@@ -4248,12 +4401,19 @@
 #define EN_MAXTEXT 0x0501
 #define EN_HSCROLL 0x0601
 #define EN_VSCROLL 0x0602
+#if _WIN32_WINNT >= 0x0500
 #define EN_ALIGN_LTR_EC 0x0700
 #define EN_ALIGN_RTL_EC 0x0701
-
+#endif
+#if WINVER >= 0x0604
+#define EN_BEFORE_PASTE 0x0800
+#define EN_AFTER_PASTE 0x0801
+#endif
+#if WINVER >= 0x0400
 #define EC_LEFTMARGIN 0x0001
 #define EC_RIGHTMARGIN 0x0002
 #define EC_USEFONTINFO 0xffff
+#endif
 
 #define EMSIS_COMPOSITIONSTRING 0x0001
 
@@ -4302,7 +4462,10 @@
 #define EM_CHARFROMPOS 0x00D7
 #define EM_SETIMESTATUS 0x00D8
 #define EM_GETIMESTATUS 0x00D9
+#if WINVER >= 0x0604
+#define EM_ENABLEFEATURE 0x00DA
 #endif
+#endif /* !NOWINMESSAGES */
 
 #define WB_LEFT 0
 #define WB_RIGHT 1
@@ -4565,9 +4728,18 @@
 #define LB_MULTIPLEADDSTRING 0x01B1
 #endif
 #define LB_GETLISTBOXINFO 0x01B2
+#if _WIN32_WINNT >= 0x0501
 #define LB_MSGMAX 0x01B3
+#elif defined(_WIN32_WCE) && (_WIN32_WCE >= 0x0400)
+#define LB_MSGMAX 0x01B1
+#elif WINVER >= 0x0400
+#define LB_MSGMAX 0x01B0
+#else
+#define LB_MSGMAX 0x01A8
 #endif
 
+#endif /* !NOWINMESSAGES */
+
 #ifndef NOWINSTYLES
 
 #define LBS_NOTIFY __MSABI_LONG(0x0001)
@@ -4662,9 +4834,18 @@
 #define CB_MULTIPLEADDSTRING 0x0163
 #endif
 #define CB_GETCOMBOBOXINFO 0x0164
+#if _WIN32_WINNT >= 0x0501
 #define CB_MSGMAX 0x0165
+#elif defined(_WIN32_WCE) && (_WIN32_WCE >= 0x0400)
+#define CB_MSGMAX 0x0163
+#elif WINVER >= 0x0400
+#define CB_MSGMAX 0x0162
+#else
+#define CB_MSGMAX 0x015B
 #endif
 
+#endif /* !NOWINMESSAGES */
+
 #ifndef NOWINSTYLES
 
 #define SBS_HORZ __MSABI_LONG(0x0000)
@@ -5131,6 +5312,50 @@
 #define SPI_GETGESTUREVISUALIZATION 0x201a
 #define SPI_SETGESTUREVISUALIZATION 0x201b
 #endif
+#if WINVER >= 0x0602
+#define SPI_GETMOUSEWHEELROUTING 0x201C
+#define SPI_SETMOUSEWHEELROUTING 0x201D
+#define MOUSEWHEEL_ROUTING_FOCUS 0
+#define MOUSEWHEEL_ROUTING_HYBRID 1
+#endif
+#if WINVER >= 0x0603
+#define MOUSEWHEEL_ROUTING_MOUSE_POS 2
+#endif
+
+#if WINVER >= 0x0604
+#define SPI_GETPENVISUALIZATION 0x201E
+#define SPI_SETPENVISUALIZATION 0x201F
+
+#define PENVISUALIZATION_ON 0x0023
+#define PENVISUALIZATION_OFF 0x0000
+#define PENVISUALIZATION_TAP 0x0001
+#define PENVISUALIZATION_DOUBLETAP 0x0002
+#define PENVISUALIZATION_CURSOR 0x0020
+
+#define SPI_GETPENARBITRATIONTYPE 0x2020
+#define SPI_SETPENARBITRATIONTYPE 0x2021
+
+#define PENARBITRATIONTYPE_NONE 0x0000
+#define PENARBITRATIONTYPE_WIN8 0x0001
+#define PENARBITRATIONTYPE_FIS 0x0002
+#define PENARBITRATIONTYPE_SPT 0x0003
+#define PENARBITRATIONTYPE_MAX 0x0004
+#endif /* WINVER >= 0x0604 */
+
+#if NTDDI_VERSION >= NTDDI_WIN10_RS3
+#define SPI_GETCARETTIMEOUT 0x2022
+#define SPI_SETCARETTIMEOUT 0x2023
+#endif
+
+#if NTDDI_VERSION >= NTDDI_WIN10_RS4
+#define SPI_GETHANDEDNESS 0x2024
+#define SPI_SETHANDEDNESS 0x2025
+
+  typedef enum tagHANDEDNESS {
+    HANDEDNESS_LEFT = 0,
+    HANDEDNESS_RIGHT
+  } HANDEDNESS, *PHANDEDNESS;
+#endif
 
 #if WINVER >= 0x0602
 #define CONTACTVISUALIZATION_OFF 0x0000
@@ -5333,6 +5558,7 @@
 #define HCF_HOTKEYAVAILABLE 0x00000040
 #define HCF_LOGONDESKTOP 0x00000100
 #define HCF_DEFAULTDESKTOP 0x00000200
+#define HCF_OPTION_NOTHEMECHANGE 0x00001000
 
 #define CDS_UPDATEREGISTRY 0x00000001
 #define CDS_TEST 0x00000002
@@ -5382,6 +5608,7 @@
   WINUSERAPI WINBOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName,DWORD iModeNum,LPDEVMODEW lpDevMode,DWORD dwFlags);
 
 #define EDS_RAWMODE 0x00000002
+#define EDS_ROTATEDMODE 0x00000004
 
   WINUSERAPI WINBOOL WINAPI EnumDisplayDevicesA(LPCSTR lpDevice,DWORD iDevNum,PDISPLAY_DEVICEA lpDisplayDevice,DWORD dwFlags);
   WINUSERAPI WINBOOL WINAPI EnumDisplayDevicesW(LPCWSTR lpDevice,DWORD iDevNum,PDISPLAY_DEVICEW lpDisplayDevice,DWORD dwFlags);
@@ -5402,8 +5629,13 @@
 
   WINUSERAPI WINBOOL WINAPI SystemParametersInfoA(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinIni);
   WINUSERAPI WINBOOL WINAPI SystemParametersInfoW(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinIni);
+
+#if WINVER >= 0x0605
+WINUSERAPI WINBOOL WINAPI SystemParametersInfoForDpi(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni, UINT dpi);
 #endif
+
 #endif
+#endif /* !NOSYSPARAMSINFO */
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct tagFILTERKEYS {
@@ -5864,8 +6096,35 @@
   WINUSERAPI WINBOOL WINAPI SetProcessDPIAware (VOID);
   WINUSERAPI WINBOOL WINAPI IsProcessDPIAware (VOID);
 #endif
+
+#if WINVER >= 0x0605
+WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT dpiContext);
+WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetThreadDpiAwarenessContext(VOID);
+WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetWindowDpiAwarenessContext(HWND hwnd);
+WINUSERAPI DPI_AWARENESS WINAPI GetAwarenessFromDpiAwarenessContext(DPI_AWARENESS_CONTEXT value);
+WINUSERAPI UINT WINAPI GetDpiFromDpiAwarenessContext(DPI_AWARENESS_CONTEXT value);
+WINUSERAPI WINBOOL WINAPI AreDpiAwarenessContextsEqual(DPI_AWARENESS_CONTEXT dpiContextA, DPI_AWARENESS_CONTEXT dpiContextB);
+WINUSERAPI WINBOOL WINAPI IsValidDpiAwarenessContext(DPI_AWARENESS_CONTEXT value);
+WINUSERAPI UINT WINAPI GetDpiForWindow(HWND hwnd);
+WINUSERAPI UINT WINAPI GetDpiForSystem(VOID);
+WINUSERAPI UINT WINAPI GetSystemDpiForProcess(HANDLE hProcess);
+WINUSERAPI WINBOOL WINAPI EnableNonClientDpiScaling(HWND hwnd);
+WINUSERAPI WINBOOL WINAPI InheritWindowMonitor(HWND hwnd, HWND hwndInherit);
+WINUSERAPI WINBOOL WINAPI SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT value);
+#endif /* WINVER >= 0x0605 */
+
+#if WINVER >= 0x0606
+WINUSERAPI DPI_HOSTING_BEHAVIOR WINAPI SetThreadDpiHostingBehavior(DPI_HOSTING_BEHAVIOR value);
+WINUSERAPI DPI_HOSTING_BEHAVIOR WINAPI GetThreadDpiHostingBehavior(VOID);
+WINUSERAPI DPI_HOSTING_BEHAVIOR WINAPI GetWindowDpiHostingBehavior(HWND hwnd);
+#endif /* WINVER >= 0x0606 */
+
+#if NTDDI_VERSION >= NTDDI_WIN10_19H1
+WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetDpiAwarenessContextForProcess(HANDLE hProcess);
 #endif
 
+#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
+
 #ifndef NO_STATE_FLAGS
 #define STATE_SYSTEM_UNAVAILABLE 0x00000001
 #define STATE_SYSTEM_SELECTED 0x00000002
@@ -6045,6 +6304,7 @@
 #define RIM_TYPEMOUSE 0
 #define RIM_TYPEKEYBOARD 1
 #define RIM_TYPEHID 2
+#define RIM_TYPEMAX 2
 
 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
   typedef struct tagRAWMOUSE {
@@ -6074,6 +6334,9 @@
 #define RI_MOUSE_BUTTON_5_DOWN 0x0100
 #define RI_MOUSE_BUTTON_5_UP 0x0200
 #define RI_MOUSE_WHEEL 0x0400
+#if WINVER >= 0x0600
+#define RI_MOUSE_HWHEEL 0x0800
+#endif
 
 #define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN
 #define RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP
@@ -6251,8 +6514,11 @@
   typedef enum tagPOINTER_DEVICE_TYPE {
     POINTER_DEVICE_TYPE_INTEGRATED_PEN = 0x00000001,
     POINTER_DEVICE_TYPE_EXTERNAL_PEN = 0x00000002,
-    POINTER_DEVICE_TYPE_TOUCH = 0x00000003,
-    POINTER_DEVICE_TYPE_MAX = 0xffffffff
+    POINTER_DEVICE_TYPE_TOUCH = 0x00000003
+#if WINVER >= 0x0603
+    ,POINTER_DEVICE_TYPE_TOUCH_PAD = 0x00000004
+#endif
+    ,POINTER_DEVICE_TYPE_MAX = 0xffffffff
   } POINTER_DEVICE_TYPE;
 
   typedef struct tagPOINTER_DEVICE_INFO {
@@ -6425,7 +6691,10 @@
     IMDT_KEYBOARD = 0x00000001,
     IMDT_MOUSE = 0x00000002,
     IMDT_TOUCH = 0x00000004,
-    IMDT_PEN = 0x00000008,
+    IMDT_PEN = 0x00000008
+#if WINVER >= 0x0603
+    ,IMDT_TOUCHPAD = 0x00000010
+#endif
   } INPUT_MESSAGE_DEVICE_TYPE;
 
   typedef enum tagINPUT_MESSAGE_ORIGIN_ID {