From 660b895787fae7bb82ded295893a45aaecd63e6e Mon Sep 17 00:00:00 2001 From: David Hall Date: Mon, 25 Feb 2019 14:08:14 -0700 Subject: [PATCH] Added Pointer Input Messages and Notifications from WinUser.h --- PInvoke/User32/CorrelationReport.md | 164 +-- PInvoke/User32/Vanara.PInvoke.User32.csproj | 4 +- PInvoke/User32/WinUser.Pointer.cs | 1754 +++++++++++++++++++++++++++ README.md | 6 +- 4 files changed, 1850 insertions(+), 78 deletions(-) create mode 100644 PInvoke/User32/WinUser.Pointer.cs diff --git a/PInvoke/User32/CorrelationReport.md b/PInvoke/User32/CorrelationReport.md index 57098293..7044c1fc 100644 --- a/PInvoke/User32/CorrelationReport.md +++ b/PInvoke/User32/CorrelationReport.md @@ -1,8 +1,8 @@ ## Correlation report for user32.dll -### Methods (64% complete) +### Methods (75% complete) Native Method | Native DLL | Header | Managed Method --- | --- | --- | --- -[ActivateKeyboardLayout](https://www.google.com/search?num=5&q=ActivateKeyboardLayout+site%3Amicrosoft.com) | user32.dll | | +[ActivateKeyboardLayout](https://www.google.com/search?num=5&q=ActivateKeyboardLayout+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.ActivateKeyboardLayout [AddClipboardFormatListener](http://msdn2.microsoft.com/en-us/library/addclipboardformatlistener) | user32.dll | winuser.h | Vanara.PInvoke.User32.AddClipboardFormatListener [AdjustWindowRect](http://msdn2.microsoft.com/en-us/library/adjustwindowrect) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.AdjustWindowRect [AdjustWindowRectEx](http://msdn2.microsoft.com/en-us/library/adjustwindowrectex) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.AdjustWindowRectEx @@ -17,7 +17,7 @@ Native Method | Native DLL | Header | Managed Method [AttachThreadInput](https://www.google.com/search?num=5&q=AttachThreadInput+site%3Amicrosoft.com) | user32.dll | | [BeginDeferWindowPos](http://msdn2.microsoft.com/en-us/library/begindeferwindowpos) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.BeginDeferWindowPos [BeginPaint](http://msdn2.microsoft.com/en-us/library/513341d7-bed8-469c-a067-ee71dc8860f9) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.BeginPaint -[BlockInput](https://www.google.com/search?num=5&q=BlockInput+site%3Amicrosoft.com) | user32.dll | | +[BlockInput](https://www.google.com/search?num=5&q=BlockInput+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.BlockInput [BringWindowToTop](http://msdn2.microsoft.com/en-us/library/bringwindowtotop) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.BringWindowToTop [BroadcastSystemMessage](https://www.google.com/search?num=5&q=BroadcastSystemMessage+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.BroadcastSystemMessage [BroadcastSystemMessageEx](https://www.google.com/search?num=5&q=BroadcastSystemMessageExA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.BroadcastSystemMessageEx @@ -76,7 +76,7 @@ Native Method | Native DLL | Header | Managed Method [DeferWindowPos](http://msdn2.microsoft.com/en-us/library/deferwindowpos) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DeferWindowPos [DefFrameProc](https://www.google.com/search?num=5&q=DefFrameProcA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DefFrameProc [DefMDIChildProc](https://www.google.com/search?num=5&q=DefMDIChildProcA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DefMDIChildProc -[DefRawInputProc](https://www.google.com/search?num=5&q=DefRawInputProc+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DefRawInputProc +[DefRawInputProc](https://www.google.com/search?num=5&q=DefRawInputProc+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.DefRawInputProc [DefWindowProc](https://www.google.com/search?num=5&q=DefWindowProcA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DefWindowProc [DeleteMenu](http://msdn2.microsoft.com/en-us/library/deletemenu.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DeleteMenu [DeregisterShellHookWindow](http://msdn2.microsoft.com/en-us/library/deregistershellhookwindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DeregisterShellHookWindow @@ -94,7 +94,7 @@ Native Method | Native DLL | Header | Managed Method [DisplayConfigSetDeviceInfo](http://msdn2.microsoft.com/en-us/library/4050b1f0-a588-427c-a0df-eefdc488fc20) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DisplayConfigSetDeviceInfo [DlgDirSelectComboBoxEx](https://www.google.com/search?num=5&q=DlgDirSelectComboBoxExA+site%3Amicrosoft.com) | user32.dll | | [DlgDirSelectEx](https://www.google.com/search?num=5&q=DlgDirSelectExA+site%3Amicrosoft.com) | user32.dll | | -[DragDetect](https://www.google.com/search?num=5&q=DragDetect+site%3Amicrosoft.com) | user32.dll | | +[DragDetect](https://www.google.com/search?num=5&q=DragDetect+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DragDetect [DrawAnimatedRects](http://msdn2.microsoft.com/en-us/library/54a9234a-0056-4cfe-9158-86635dc31bc6) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DrawAnimatedRects [DrawCaption](http://msdn2.microsoft.com/en-us/library/9348e29f-ce56-4664-8862-f5810c797622) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.DrawCaption [DrawEdge](http://msdn2.microsoft.com/en-us/library/dd162477) | user32.dll | Winuser.h | Vanara.PInvoke.User32_Gdi.DrawEdge @@ -108,11 +108,11 @@ Native Method | Native DLL | Header | Managed Method [DrawTextEx](https://www.google.com/search?num=5&q=DrawTextExA+site%3Amicrosoft.com) | user32.dll | | [EmptyClipboard](http://msdn2.microsoft.com/en-us/library/emptyclipboard) | user32.dll | winuser.h | Vanara.PInvoke.User32.EmptyClipboard [EnableMenuItem](http://msdn2.microsoft.com/en-us/library/enablemenuitem.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.EnableMenuItem -[EnableMouseInPointer](https://www.google.com/search?num=5&q=EnableMouseInPointer+site%3Amicrosoft.com) | user32.dll | | +[EnableMouseInPointer](http://msdn2.microsoft.com/en-us/library/66D9BF17-164F-455F-803F-36CDF88C34FF) | user32.dll | winuser.h | Vanara.PInvoke.User32.EnableMouseInPointer [EnableNonClientDpiScaling](https://www.google.com/search?num=5&q=EnableNonClientDpiScaling+site%3Amicrosoft.com) | user32.dll | | [EnableOneCoreTransformMode](https://www.google.com/search?num=5&q=EnableOneCoreTransformMode+site%3Amicrosoft.com) | user32.dll | | [EnableScrollBar](https://www.google.com/search?num=5&q=EnableScrollBar+site%3Amicrosoft.com) | user32.dll | | -[EnableWindow](https://www.google.com/search?num=5&q=EnableWindow+site%3Amicrosoft.com) | user32.dll | | +[EnableWindow](https://www.google.com/search?num=5&q=EnableWindow+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.EnableWindow [EndDeferWindowPos](http://msdn2.microsoft.com/en-us/library/enddeferwindowpos) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.EndDeferWindowPos [EndDialog](http://msdn2.microsoft.com/en-us/library/enddialog) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.EndDialog [EndMenu](http://msdn2.microsoft.com/en-us/library/endmenu.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.EndMenu @@ -147,10 +147,10 @@ Native Method | Native DLL | Header | Managed Method [GetActiveWindow](http://msdn2.microsoft.com/en-us/library/getactivewindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetActiveWindow [GetAltTabInfo](https://www.google.com/search?num=5&q=GetAltTabInfo+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetAltTabInfo [GetAncestor](http://msdn2.microsoft.com/en-us/library/getancestor) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetAncestor -[GetAsyncKeyState](https://www.google.com/search?num=5&q=GetAsyncKeyState+site%3Amicrosoft.com) | user32.dll | | +[GetAsyncKeyState](https://www.google.com/search?num=5&q=GetAsyncKeyState+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetAsyncKeyState [GetAutoRotationState](https://www.google.com/search?num=5&q=GetAutoRotationState+site%3Amicrosoft.com) | user32.dll | | [GetAwarenessFromDpiAwarenessContext](https://www.google.com/search?num=5&q=GetAwarenessFromDpiAwarenessContext+site%3Amicrosoft.com) | user32.dll | | -[GetCapture](https://www.google.com/search?num=5&q=GetCapture+site%3Amicrosoft.com) | user32.dll | | +[GetCapture](https://www.google.com/search?num=5&q=GetCapture+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetCapture [GetCaretBlinkTime](https://www.google.com/search?num=5&q=GetCaretBlinkTime+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetCaretBlinkTime [GetCaretPos](https://www.google.com/search?num=5&q=GetCaretPos+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetCaretPos [GetCIMSSM](https://www.google.com/search?num=5&q=GetCIMSSM+site%3Amicrosoft.com) | user32.dll | | @@ -185,11 +185,11 @@ Native Method | Native DLL | Header | Managed Method [GetDlgItem](http://msdn2.microsoft.com/en-us/library/getdlgitem) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetDlgItem [GetDlgItemInt](http://msdn2.microsoft.com/en-us/library/getdlgitemint) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetDlgItemInt [GetDlgItemText](http://msdn2.microsoft.com/en-us/library/getdlgitemtext) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetDlgItemText -[GetDoubleClickTime](https://www.google.com/search?num=5&q=GetDoubleClickTime+site%3Amicrosoft.com) | user32.dll | | +[GetDoubleClickTime](https://www.google.com/search?num=5&q=GetDoubleClickTime+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetDoubleClickTime [GetDpiForSystem](https://www.google.com/search?num=5&q=GetDpiForSystem+site%3Amicrosoft.com) | user32.dll | | [GetDpiForWindow](https://www.google.com/search?num=5&q=GetDpiForWindow+site%3Amicrosoft.com) | user32.dll | | [GetDpiFromDpiAwarenessContext](https://www.google.com/search?num=5&q=GetDpiFromDpiAwarenessContext+site%3Amicrosoft.com) | user32.dll | | -[GetFocus](https://www.google.com/search?num=5&q=GetFocus+site%3Amicrosoft.com) | user32.dll | | +[GetFocus](https://www.google.com/search?num=5&q=GetFocus+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetFocus [GetForegroundWindow](http://msdn2.microsoft.com/en-us/library/getforegroundwindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetForegroundWindow [GetGestureConfig](http://msdn2.microsoft.com/en-us/library/8b7a594c-e9e4-4215-8946-da170c957a2b) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetGestureConfig [GetGestureExtraArgs](http://msdn2.microsoft.com/en-us/library/f7775d88-6a5b-4283-ab40-65c2da218f81) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetGestureExtraArgs @@ -199,16 +199,16 @@ Native Method | Native DLL | Header | Managed Method [GetIconInfo](http://msdn2.microsoft.com/en-us/library/geticoninfo) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetIconInfo [GetIconInfoEx](http://msdn2.microsoft.com/en-us/library/geticoninfoex) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetIconInfoEx [GetInputState](https://www.google.com/search?num=5&q=GetInputState+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetInputState -[GetKBCodePage](https://www.google.com/search?num=5&q=GetKBCodePage+site%3Amicrosoft.com) | user32.dll | | -[GetKeyboardLayout](https://www.google.com/search?num=5&q=GetKeyboardLayout+site%3Amicrosoft.com) | user32.dll | | -[GetKeyboardLayoutList](https://www.google.com/search?num=5&q=GetKeyboardLayoutList+site%3Amicrosoft.com) | user32.dll | | -[GetKeyboardLayoutName](https://www.google.com/search?num=5&q=GetKeyboardLayoutNameA+site%3Amicrosoft.com) | user32.dll | | -[GetKeyboardState](https://www.google.com/search?num=5&q=GetKeyboardState+site%3Amicrosoft.com) | user32.dll | | -[GetKeyboardType](https://www.google.com/search?num=5&q=GetKeyboardType+site%3Amicrosoft.com) | user32.dll | | -[GetKeyNameText](https://www.google.com/search?num=5&q=GetKeyNameTextA+site%3Amicrosoft.com) | user32.dll | | -[GetKeyState](https://www.google.com/search?num=5&q=GetKeyState+site%3Amicrosoft.com) | user32.dll | | +[GetKBCodePage](https://www.google.com/search?num=5&q=GetKBCodePage+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKBCodePage +[GetKeyboardLayout](https://www.google.com/search?num=5&q=GetKeyboardLayout+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyboardLayout +[GetKeyboardLayoutList](https://www.google.com/search?num=5&q=GetKeyboardLayoutList+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyboardLayoutList +[GetKeyboardLayoutName](https://www.google.com/search?num=5&q=GetKeyboardLayoutNameA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyboardLayoutName +[GetKeyboardState](https://www.google.com/search?num=5&q=GetKeyboardState+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyboardState +[GetKeyboardType](http://msdn2.microsoft.com/en-us/library/39b9ba8b-0cab-465c-9a58-2b69eea7de76) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyboardType +[GetKeyNameText](https://www.google.com/search?num=5&q=GetKeyNameTextA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyNameText +[GetKeyState](https://www.google.com/search?num=5&q=GetKeyState+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetKeyState [GetLastActivePopup](http://msdn2.microsoft.com/en-us/library/getlastactivepopup) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetLastActivePopup -[GetLastInputInfo](https://www.google.com/search?num=5&q=GetLastInputInfo+site%3Amicrosoft.com) | user32.dll | | +[GetLastInputInfo](https://www.google.com/search?num=5&q=GetLastInputInfo+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetLastInputInfo [GetLayeredWindowAttributes](http://msdn2.microsoft.com/en-us/library/getlayeredwindowattributes) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetLayeredWindowAttributes [GetListBoxInfo](https://www.google.com/search?num=5&q=GetListBoxInfo+site%3Amicrosoft.com) | user32.dll | | [GetMagnificationDesktopSamplingMode](https://www.google.com/search?num=5&q=GetMagnificationDesktopSamplingMode+site%3Amicrosoft.com) | user32.dll | | @@ -230,43 +230,43 @@ Native Method | Native DLL | Header | Managed Method [GetMessagePos](https://www.google.com/search?num=5&q=GetMessagePos+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetMessagePos [GetMessageTime](https://www.google.com/search?num=5&q=GetMessageTime+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetMessageTime [GetMonitorInfo](http://msdn2.microsoft.com/en-us/library/025a89c2-4bbd-4c8b-8367-3735fb5b872a) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetMonitorInfo -[GetMouseMovePointsEx](https://www.google.com/search?num=5&q=GetMouseMovePointsEx+site%3Amicrosoft.com) | user32.dll | | +[GetMouseMovePointsEx](https://www.google.com/search?num=5&q=GetMouseMovePointsEx+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetMouseMovePointsEx [GetNextDlgGroupItem](http://msdn2.microsoft.com/en-us/library/getnextdlggroupitem) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetNextDlgGroupItem [GetNextDlgTabItem](http://msdn2.microsoft.com/en-us/library/getnextdlgtabitem) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetNextDlgTabItem [GetOpenClipboardWindow](http://msdn2.microsoft.com/en-us/library/getopenclipboardwindow) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetOpenClipboardWindow [GetParent](http://msdn2.microsoft.com/en-us/library/getparent) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetParent [GetPhysicalCursorPos](http://msdn2.microsoft.com/en-us/library/getphysicalcursorpos) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetPhysicalCursorPos -[GetPointerCursorId](https://www.google.com/search?num=5&q=GetPointerCursorId+site%3Amicrosoft.com) | user32.dll | | +[GetPointerCursorId](http://msdn2.microsoft.com/en-us/library/43211600-ee82-416f-860f-423c581eda75) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerCursorId [GetPointerDevice](https://www.google.com/search?num=5&q=GetPointerDevice+site%3Amicrosoft.com) | user32.dll | | [GetPointerDeviceCursors](https://www.google.com/search?num=5&q=GetPointerDeviceCursors+site%3Amicrosoft.com) | user32.dll | | [GetPointerDeviceProperties](https://www.google.com/search?num=5&q=GetPointerDeviceProperties+site%3Amicrosoft.com) | user32.dll | | [GetPointerDeviceRects](https://www.google.com/search?num=5&q=GetPointerDeviceRects+site%3Amicrosoft.com) | user32.dll | | [GetPointerDevices](https://www.google.com/search?num=5&q=GetPointerDevices+site%3Amicrosoft.com) | user32.dll | | -[GetPointerFrameInfo](https://www.google.com/search?num=5&q=GetPointerFrameInfo+site%3Amicrosoft.com) | user32.dll | | -[GetPointerFrameInfoHistory](https://www.google.com/search?num=5&q=GetPointerFrameInfoHistory+site%3Amicrosoft.com) | user32.dll | | -[GetPointerFramePenInfo](https://www.google.com/search?num=5&q=GetPointerFramePenInfo+site%3Amicrosoft.com) | user32.dll | | -[GetPointerFramePenInfoHistory](https://www.google.com/search?num=5&q=GetPointerFramePenInfoHistory+site%3Amicrosoft.com) | user32.dll | | -[GetPointerFrameTouchInfo](https://www.google.com/search?num=5&q=GetPointerFrameTouchInfo+site%3Amicrosoft.com) | user32.dll | | -[GetPointerFrameTouchInfoHistory](https://www.google.com/search?num=5&q=GetPointerFrameTouchInfoHistory+site%3Amicrosoft.com) | user32.dll | | -[GetPointerInfo](https://www.google.com/search?num=5&q=GetPointerInfo+site%3Amicrosoft.com) | user32.dll | | -[GetPointerInfoHistory](https://www.google.com/search?num=5&q=GetPointerInfoHistory+site%3Amicrosoft.com) | user32.dll | | -[GetPointerInputTransform](https://www.google.com/search?num=5&q=GetPointerInputTransform+site%3Amicrosoft.com) | user32.dll | | -[GetPointerPenInfo](https://www.google.com/search?num=5&q=GetPointerPenInfo+site%3Amicrosoft.com) | user32.dll | | -[GetPointerPenInfoHistory](https://www.google.com/search?num=5&q=GetPointerPenInfoHistory+site%3Amicrosoft.com) | user32.dll | | -[GetPointerTouchInfo](https://www.google.com/search?num=5&q=GetPointerTouchInfo+site%3Amicrosoft.com) | user32.dll | | -[GetPointerTouchInfoHistory](https://www.google.com/search?num=5&q=GetPointerTouchInfoHistory+site%3Amicrosoft.com) | user32.dll | | -[GetPointerType](https://www.google.com/search?num=5&q=GetPointerType+site%3Amicrosoft.com) | user32.dll | | +[GetPointerFrameInfo](http://msdn2.microsoft.com/en-us/library/6b7f450d-6ab1-4991-b2f9-a1db3f065711) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerFrameInfo +[GetPointerFrameInfoHistory](http://msdn2.microsoft.com/en-us/library/1ae035d6-a375-4421-82a6-50be4a2341f6) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerFrameInfoHistory +[GetPointerFramePenInfo](http://msdn2.microsoft.com/en-us/library/52db9b96-7f9e-41d7-88f7-b9c7691a6511) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerFramePenInfo +[GetPointerFramePenInfoHistory](http://msdn2.microsoft.com/en-us/library/a4f6a9f3-dfbd-4413-aae7-f58e1521ef1d) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerFramePenInfoHistory +[GetPointerFrameTouchInfo](http://msdn2.microsoft.com/en-us/library/a100cc7a-62fc-4ace-8d35-e77aff98d944) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerFrameTouchInfo +[GetPointerFrameTouchInfoHistory](http://msdn2.microsoft.com/en-us/library/f2521a67-9850-46e9-bc8b-75bf5b6cc263) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerFrameTouchInfoHistory +[GetPointerInfo](http://msdn2.microsoft.com/en-us/library/75faea24-91cd-448b-b67a-19fe530f1800) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerInfo +[GetPointerInfoHistory](http://msdn2.microsoft.com/en-us/library/92173197-45e8-4ee7-8959-2f14f90c2d21) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerInfoHistory +[GetPointerInputTransform](http://msdn2.microsoft.com/en-us/library/9F10ED61-90E3-441B-8F4D-E33DA54D473C) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerInputTransform +[GetPointerPenInfo](http://msdn2.microsoft.com/en-us/library/5f1f7252-a4aa-4b06-94c9-2aa365cf0100) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerPenInfo +[GetPointerPenInfoHistory](http://msdn2.microsoft.com/en-us/library/90082327-b242-4f5d-8cd7-fd8ef9340395) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerPenInfoHistory +[GetPointerTouchInfo](http://msdn2.microsoft.com/en-us/library/97d93754-fc7e-4400-a6ee-6bab53e421cf) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerTouchInfo +[GetPointerTouchInfoHistory](http://msdn2.microsoft.com/en-us/library/9fdfbde7-4126-4c1b-b870-479f846e1aa9) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerTouchInfoHistory +[GetPointerType](http://msdn2.microsoft.com/en-us/library/63bfc340-9691-463c-96ca-0a5b80b8fe40) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPointerType [GetPriorityClipboardFormat](http://msdn2.microsoft.com/en-us/library/getpriorityclipboardformat) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetPriorityClipboardFormat [GetProcessDefaultLayout](http://msdn2.microsoft.com/en-us/library/getprocessdefaultlayout) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetProcessDefaultLayout [GetProcessWindowStation](http://msdn2.microsoft.com/en-us/library/f8929122-d277-4260-b2a7-5e76eb3ca876) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetProcessWindowStation [GetProp](http://msdn2.microsoft.com/en-us/library/getprop) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetProp [GetQueueStatus](https://www.google.com/search?num=5&q=GetQueueStatus+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetQueueStatus -[GetRawInputBuffer](https://www.google.com/search?num=5&q=GetRawInputBuffer+site%3Amicrosoft.com) | user32.dll | | -[GetRawInputData](https://www.google.com/search?num=5&q=GetRawInputData+site%3Amicrosoft.com) | user32.dll | | -[GetRawInputDeviceInfo](https://www.google.com/search?num=5&q=GetRawInputDeviceInfoA+site%3Amicrosoft.com) | user32.dll | | -[GetRawInputDeviceList](https://www.google.com/search?num=5&q=GetRawInputDeviceList+site%3Amicrosoft.com) | user32.dll | | +[GetRawInputBuffer](https://www.google.com/search?num=5&q=GetRawInputBuffer+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetRawInputBuffer +[GetRawInputData](https://www.google.com/search?num=5&q=GetRawInputData+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetRawInputData +[GetRawInputDeviceInfo](https://www.google.com/search?num=5&q=GetRawInputDeviceInfoA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetRawInputDeviceInfo +[GetRawInputDeviceList](https://www.google.com/search?num=5&q=GetRawInputDeviceList+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetRawInputDeviceList [GetRawPointerDeviceData](https://www.google.com/search?num=5&q=GetRawPointerDeviceData+site%3Amicrosoft.com) | user32.dll | | -[GetRegisteredRawInputDevices](https://www.google.com/search?num=5&q=GetRegisteredRawInputDevices+site%3Amicrosoft.com) | user32.dll | | +[GetRegisteredRawInputDevices](https://www.google.com/search?num=5&q=GetRegisteredRawInputDevices+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetRegisteredRawInputDevices [GetScrollBarInfo](https://www.google.com/search?num=5&q=GetScrollBarInfo+site%3Amicrosoft.com) | user32.dll | | [GetScrollInfo](https://www.google.com/search?num=5&q=GetScrollInfo+site%3Amicrosoft.com) | user32.dll | | [GetScrollPos](https://www.google.com/search?num=5&q=GetScrollPos+site%3Amicrosoft.com) | user32.dll | | @@ -286,7 +286,7 @@ Native Method | Native DLL | Header | Managed Method [GetTitleBarInfo](http://msdn2.microsoft.com/en-us/library/gettitlebarinfo) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetTitleBarInfo [GetTopWindow](http://msdn2.microsoft.com/en-us/library/gettopwindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetTopWindow [GetTouchInputInfo](http://msdn2.microsoft.com/en-us/library/18caab11-9c22-46ac-b89f-dd3e662bea1e) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetTouchInputInfo -[GetUnpredictedMessagePos](https://www.google.com/search?num=5&q=GetUnpredictedMessagePos+site%3Amicrosoft.com) | user32.dll | | +[GetUnpredictedMessagePos](http://msdn2.microsoft.com/en-us/library/5BE2748B-0124-4647-A77E-EA2937C7B1AD) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetUnpredictedMessagePos [GetUpdatedClipboardFormats](http://msdn2.microsoft.com/en-us/library/getupdatedclipboardformats) | user32.dll | winuser.h | Vanara.PInvoke.User32.GetUpdatedClipboardFormats [GetUpdateRect](http://msdn2.microsoft.com/en-us/library/e54483a1-8738-4b22-a24e-c0b31f6ca9d6) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetUpdateRect [GetUpdateRgn](http://msdn2.microsoft.com/en-us/library/d80c4b44-3f50-46f9-bf5a-fff7868d91ba) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.GetUpdateRgn @@ -337,7 +337,7 @@ Native Method | Native DLL | Header | Managed Method [IsIconic](http://msdn2.microsoft.com/en-us/library/isiconic) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsIconic [IsImmersiveProcess](https://www.google.com/search?num=5&q=IsImmersiveProcess+site%3Amicrosoft.com) | user32.dll | | [IsMenu](http://msdn2.microsoft.com/en-us/library/ismenu.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsMenu -[IsMouseInPointerEnabled](https://www.google.com/search?num=5&q=IsMouseInPointerEnabled+site%3Amicrosoft.com) | user32.dll | | +[IsMouseInPointerEnabled](http://msdn2.microsoft.com/en-us/library/5D493066-2425-4610-8489-575BF25C8C16) | user32.dll | winuser.h | Vanara.PInvoke.User32.IsMouseInPointerEnabled [IsOneCoreTransformMode](https://www.google.com/search?num=5&q=IsOneCoreTransformMode+site%3Amicrosoft.com) | user32.dll | | [IsProcessDPIAware](http://msdn2.microsoft.com/en-us/library/isprocessdpiaware) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsProcessDPIAware [IsRectEmpty](http://msdn2.microsoft.com/en-us/library/9deeed4f-304e-47a3-8259-ed7bc3815fd7) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsRectEmpty @@ -345,14 +345,14 @@ Native Method | Native DLL | Header | Managed Method [IsTouchWindow](http://msdn2.microsoft.com/en-us/library/080b9d18-5975-4d38-ae3b-151f74120bb3) | user32.dll | winuser.h | Vanara.PInvoke.User32.IsTouchWindow [IsValidDpiAwarenessContext](https://www.google.com/search?num=5&q=IsValidDpiAwarenessContext+site%3Amicrosoft.com) | user32.dll | | [IsWindow](http://msdn2.microsoft.com/en-us/library/iswindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsWindow -[IsWindowEnabled](https://www.google.com/search?num=5&q=IsWindowEnabled+site%3Amicrosoft.com) | user32.dll | | +[IsWindowEnabled](https://www.google.com/search?num=5&q=IsWindowEnabled+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsWindowEnabled [IsWindowRedirectedForPrint](https://www.google.com/search?num=5&q=IsWindowRedirectedForPrint+site%3Amicrosoft.com) | user32.dll | | [IsWindowUnicode](http://msdn2.microsoft.com/en-us/library/iswindowunicode) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsWindowUnicode [IsWindowVisible](http://msdn2.microsoft.com/en-us/library/iswindowvisible) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsWindowVisible [IsWinEventHookInstalled](https://www.google.com/search?num=5&q=IsWinEventHookInstalled+site%3Amicrosoft.com) | user32.dll | | [IsWow64Message](https://www.google.com/search?num=5&q=IsWow64Message+site%3Amicrosoft.com) | user32.dll | | [IsZoomed](http://msdn2.microsoft.com/en-us/library/iszoomed) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.IsZoomed -[keybd_event](https://www.google.com/search?num=5&q=keybd_event+site%3Amicrosoft.com) | user32.dll | | +[keybd_event](https://www.google.com/search?num=5&q=keybd_event+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.keybd_event [KillTimer](https://www.google.com/search?num=5&q=KillTimer+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.KillTimer [LoadAcceleratorsA](https://www.google.com/search?num=5&q=LoadAcceleratorsA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LoadAccelerators [LoadAcceleratorsW](https://www.google.com/search?num=5&q=LoadAcceleratorsW+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LoadAccelerators @@ -362,7 +362,7 @@ Native Method | Native DLL | Header | Managed Method [LoadCursorFromFileW](http://msdn2.microsoft.com/en-us/library/loadcursorfromfile) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LoadCursorFromFile [LoadIcon](http://msdn2.microsoft.com/en-us/library/loadicon) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LoadIcon [LoadImage](http://msdn2.microsoft.com/en-us/library/ms648045) | user32.dll | WinUser.h | Vanara.PInvoke.User32_Gdi.LoadImage -[LoadKeyboardLayout](https://www.google.com/search?num=5&q=LoadKeyboardLayoutA+site%3Amicrosoft.com) | user32.dll | | +[LoadKeyboardLayout](https://www.google.com/search?num=5&q=LoadKeyboardLayoutA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.LoadKeyboardLayout [LoadMenu](http://msdn2.microsoft.com/en-us/library/loadmenu.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LoadMenu [LoadMenuIndirect](http://msdn2.microsoft.com/en-us/library/loadmenuindirect.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LoadMenuIndirect [LoadString](http://msdn2.microsoft.com/en-us/library/ms647486) | user32.dll | WinUser.h | Vanara.PInvoke.User32_Gdi.LoadString @@ -375,8 +375,8 @@ Native Method | Native DLL | Header | Managed Method [LookupIconIdFromDirectoryEx](http://msdn2.microsoft.com/en-us/library/lookupiconidfromdirectoryex) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.LookupIconIdFromDirectoryEx [MakeThreadTSFEventAware](https://www.google.com/search?num=5&q=MakeThreadTSFEventAware+site%3Amicrosoft.com) | user32.dll | | [MapDialogRect](http://msdn2.microsoft.com/en-us/library/mapdialogrect) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.MapDialogRect -[MapVirtualKey](https://www.google.com/search?num=5&q=MapVirtualKeyA+site%3Amicrosoft.com) | user32.dll | | -[MapVirtualKeyEx](https://www.google.com/search?num=5&q=MapVirtualKeyExA+site%3Amicrosoft.com) | user32.dll | | +[MapVirtualKey](https://www.google.com/search?num=5&q=MapVirtualKeyA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.MapVirtualKey +[MapVirtualKeyEx](https://www.google.com/search?num=5&q=MapVirtualKeyExA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.MapVirtualKeyEx [MapVisualRelativePoints](https://www.google.com/search?num=5&q=MapVisualRelativePoints+site%3Amicrosoft.com) | user32.dll | | [MapWindowPoints](https://www.google.com/search?num=5&q=MapWindowPoints+site%3Amicrosoft.com) | user32.dll | WinUser.h | Vanara.PInvoke.User32_Gdi.MapWindowPoints [MB_GetString](https://www.google.com/search?num=5&q=MB_GetString+site%3Amicrosoft.com) | user32.dll | | @@ -393,12 +393,12 @@ Native Method | Native DLL | Header | Managed Method [MonitorFromPoint](http://msdn2.microsoft.com/en-us/library/c46281bf-7e45-4628-be92-736850225a9e) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.MonitorFromPoint [MonitorFromRect](http://msdn2.microsoft.com/en-us/library/81c3fffb-bbc9-4adb-bb6b-edd59f7a77b4) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.MonitorFromRect [MonitorFromWindow](http://msdn2.microsoft.com/en-us/library/fe6505c9-b481-4fec-ae9d-995943234a3a) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.MonitorFromWindow -[mouse_event](https://www.google.com/search?num=5&q=mouse_event+site%3Amicrosoft.com) | user32.dll | | +[mouse_event](https://www.google.com/search?num=5&q=mouse_event+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.mouse_event [MoveWindow](http://msdn2.microsoft.com/en-us/library/movewindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.MoveWindow [MsgWaitForMultipleObjects](https://www.google.com/search?num=5&q=MsgWaitForMultipleObjects+site%3Amicrosoft.com) | user32.dll | | [MsgWaitForMultipleObjectsEx](https://www.google.com/search?num=5&q=MsgWaitForMultipleObjectsEx+site%3Amicrosoft.com) | user32.dll | | [NotifyWinEvent](https://www.google.com/search?num=5&q=NotifyWinEvent+site%3Amicrosoft.com) | user32.dll | | -[OemKeyScan](https://www.google.com/search?num=5&q=OemKeyScan+site%3Amicrosoft.com) | user32.dll | | +[OemKeyScan](https://www.google.com/search?num=5&q=OemKeyScan+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.OemKeyScan [OemToChar](https://www.google.com/search?num=5&q=OemToCharA+site%3Amicrosoft.com) | user32.dll | | [OemToCharBuff](https://www.google.com/search?num=5&q=OemToCharBuffA+site%3Amicrosoft.com) | user32.dll | | [OffsetRect](http://msdn2.microsoft.com/en-us/library/14101ad3-8c6e-459a-974a-1a8a4d8d7906) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.OffsetRect @@ -433,13 +433,13 @@ Native Method | Native DLL | Header | Managed Method [RegisterPointerInputTarget](https://www.google.com/search?num=5&q=RegisterPointerInputTarget+site%3Amicrosoft.com) | user32.dll | | [RegisterPointerInputTargetEx](https://www.google.com/search?num=5&q=RegisterPointerInputTargetEx+site%3Amicrosoft.com) | user32.dll | | [RegisterPowerSettingNotification](https://www.google.com/search?num=5&q=RegisterPowerSettingNotification+site%3Amicrosoft.com) | user32.dll | | -[RegisterRawInputDevices](https://www.google.com/search?num=5&q=RegisterRawInputDevices+site%3Amicrosoft.com) | user32.dll | | +[RegisterRawInputDevices](https://www.google.com/search?num=5&q=RegisterRawInputDevices+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.RegisterRawInputDevices [RegisterShellHookWindow](http://msdn2.microsoft.com/en-us/library/registershellhookwindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.RegisterShellHookWindow [RegisterSuspendResumeNotification](https://www.google.com/search?num=5&q=RegisterSuspendResumeNotification+site%3Amicrosoft.com) | user32.dll | | [RegisterTouchHitTestingWindow](https://www.google.com/search?num=5&q=RegisterTouchHitTestingWindow+site%3Amicrosoft.com) | user32.dll | | [RegisterTouchWindow](http://msdn2.microsoft.com/en-us/library/a70a7418-f79d-40c8-9219-3ce38a74da9f) | user32.dll | winuser.h | Vanara.PInvoke.User32.RegisterTouchWindow [RegisterWindowMessage](https://www.google.com/search?num=5&q=RegisterWindowMessageA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.RegisterWindowMessage -[ReleaseCapture](https://www.google.com/search?num=5&q=ReleaseCapture+site%3Amicrosoft.com) | user32.dll | | +[ReleaseCapture](https://www.google.com/search?num=5&q=ReleaseCapture+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.ReleaseCapture [ReleaseDC](http://msdn2.microsoft.com/en-us/library/c4f48f1e-4a37-4330-908e-2ac5c65e1a1d) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.ReleaseDC [RemoveClipboardFormatListener](http://msdn2.microsoft.com/en-us/library/removeclipboardformatlistener) | user32.dll | winuser.h | Vanara.PInvoke.User32.RemoveClipboardFormatListener [RemoveMenu](http://msdn2.microsoft.com/en-us/library/removemenu.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.RemoveMenu @@ -453,15 +453,15 @@ Native Method | Native DLL | Header | Managed Method [ScrollWindow](https://www.google.com/search?num=5&q=ScrollWindow+site%3Amicrosoft.com) | user32.dll | | [ScrollWindowEx](https://www.google.com/search?num=5&q=ScrollWindowEx+site%3Amicrosoft.com) | user32.dll | | [SendDlgItemMessage](http://msdn2.microsoft.com/en-us/library/senddlgitemmessage) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SendDlgItemMessage -[SendInput](https://www.google.com/search?num=5&q=SendInput+site%3Amicrosoft.com) | user32.dll | | +[SendInput](https://www.google.com/search?num=5&q=SendInput+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.SendInput [SendMessage](http://msdn2.microsoft.com/en-us/library/ms644950) | user32.dll | Winuser.h | Vanara.PInvoke.User32_Gdi.SendMessage [SendMessage](http://msdn2.microsoft.com/en-us/library/ms644950) | user32.dll | Winuser.h | Vanara.PInvoke.User32_Gdi.SendMessageUnsafe [SendMessageCallbackA](https://www.google.com/search?num=5&q=SendMessageCallbackA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SendMessageCallback [SendMessageCallbackW](https://www.google.com/search?num=5&q=SendMessageCallbackW+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SendMessageCallback [SendMessageTimeout](https://www.google.com/search?num=5&q=SendMessageTimeoutA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SendMessageTimeout [SendNotifyMessage](https://www.google.com/search?num=5&q=SendNotifyMessageA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SendNotifyMessage -[SetActiveWindow](https://www.google.com/search?num=5&q=SetActiveWindow+site%3Amicrosoft.com) | user32.dll | | -[SetCapture](https://www.google.com/search?num=5&q=SetCapture+site%3Amicrosoft.com) | user32.dll | | +[SetActiveWindow](https://www.google.com/search?num=5&q=SetActiveWindow+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetActiveWindow +[SetCapture](https://www.google.com/search?num=5&q=SetCapture+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetCapture [SetCaretBlinkTime](https://www.google.com/search?num=5&q=SetCaretBlinkTime+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetCaretBlinkTime [SetCaretPos](https://www.google.com/search?num=5&q=SetCaretPos+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetCaretPos [SetClassLong](https://www.google.com/search?num=5&q=SetClassLongA+site%3Amicrosoft.com) | user32.dll | | @@ -479,11 +479,11 @@ Native Method | Native DLL | Header | Managed Method [SetDisplayConfig](http://msdn2.microsoft.com/en-us/library/9f649fa0-ffb2-44c6-9a66-049f888e3b04) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetDisplayConfig [SetDlgItemInt](http://msdn2.microsoft.com/en-us/library/setdlgitemint) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetDlgItemInt [SetDlgItemText](http://msdn2.microsoft.com/en-us/library/setdlgitemtext) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetDlgItemText -[SetDoubleClickTime](https://www.google.com/search?num=5&q=SetDoubleClickTime+site%3Amicrosoft.com) | user32.dll | | -[SetFocus](https://www.google.com/search?num=5&q=SetFocus+site%3Amicrosoft.com) | user32.dll | | +[SetDoubleClickTime](https://www.google.com/search?num=5&q=SetDoubleClickTime+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.SetDoubleClickTime +[SetFocus](https://www.google.com/search?num=5&q=SetFocus+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetFocus [SetForegroundWindow](http://msdn2.microsoft.com/en-us/library/setforegroundwindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetForegroundWindow [SetGestureConfig](http://msdn2.microsoft.com/en-us/library/7df5a18e-5e65-4dd5-a59d-853a91ead710) | user32.dll | winuser.h | Vanara.PInvoke.User32.SetGestureConfig -[SetKeyboardState](https://www.google.com/search?num=5&q=SetKeyboardState+site%3Amicrosoft.com) | user32.dll | | +[SetKeyboardState](https://www.google.com/search?num=5&q=SetKeyboardState+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.SetKeyboardState [SetLastErrorEx](https://www.google.com/search?num=5&q=SetLastErrorEx+site%3Amicrosoft.com) | user32.dll | | [SetLayeredWindowAttributes](http://msdn2.microsoft.com/en-us/library/setlayeredwindowattributes) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SetLayeredWindowAttributes [SetMagnificationDesktopSamplingMode](https://www.google.com/search?num=5&q=SetMagnificationDesktopSamplingMode+site%3Amicrosoft.com) | user32.dll | | @@ -537,20 +537,20 @@ Native Method | Native DLL | Header | Managed Method [ShutdownBlockReasonCreate](https://www.google.com/search?num=5&q=ShutdownBlockReasonCreate+site%3Amicrosoft.com) | user32.dll | Winuser.h | Vanara.PInvoke.User32.ShutdownBlockReasonCreate [ShutdownBlockReasonDestroy](https://www.google.com/search?num=5&q=ShutdownBlockReasonDestroy+site%3Amicrosoft.com) | user32.dll | Winuser.h | Vanara.PInvoke.User32.ShutdownBlockReasonDestroy [ShutdownBlockReasonQuery](https://www.google.com/search?num=5&q=ShutdownBlockReasonQuery+site%3Amicrosoft.com) | user32.dll | Winuser.h | Vanara.PInvoke.User32.ShutdownBlockReasonQuery -[SkipPointerFrameMessages](https://www.google.com/search?num=5&q=SkipPointerFrameMessages+site%3Amicrosoft.com) | user32.dll | | +[SkipPointerFrameMessages](http://msdn2.microsoft.com/en-us/library/d67f8d44-3e19-4523-a0f3-38f09f5df91f) | user32.dll | winuser.h | Vanara.PInvoke.User32.SkipPointerFrameMessages [SoundSentry](http://msdn2.microsoft.com/en-us/library/soundsentry) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SoundSentry [SubtractRect](http://msdn2.microsoft.com/en-us/library/85c8edae-af2b-4c6c-af37-2631e8b4edcd) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SubtractRect -[SwapMouseButton](https://www.google.com/search?num=5&q=SwapMouseButton+site%3Amicrosoft.com) | user32.dll | | +[SwapMouseButton](https://www.google.com/search?num=5&q=SwapMouseButton+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.SwapMouseButton [SwitchDesktop](http://msdn2.microsoft.com/en-us/library/401be515-ada9-42be-b8e8-4e86f513bb8d) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SwitchDesktop [SwitchToThisWindow](http://msdn2.microsoft.com/en-us/library/switchtothiswindow) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.SwitchToThisWindow [SystemParametersInfo](http://msdn2.microsoft.com/en-us/library/ms724947) | user32.dll | Winuser.h | Vanara.PInvoke.User32.SystemParametersInfo [SystemParametersInfoForDpi](https://www.google.com/search?num=5&q=SystemParametersInfoForDpi+site%3Amicrosoft.com) | user32.dll | | [TabbedTextOut](http://msdn2.microsoft.com/en-us/library/1cb78a75-752d-4e06-afdf-cd797f209114) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.TabbedTextOut [TileWindows](http://msdn2.microsoft.com/en-us/library/tilewindows) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.TileWindows -[ToAscii](https://www.google.com/search?num=5&q=ToAscii+site%3Amicrosoft.com) | user32.dll | | -[ToAsciiEx](https://www.google.com/search?num=5&q=ToAsciiEx+site%3Amicrosoft.com) | user32.dll | | -[ToUnicode](https://www.google.com/search?num=5&q=ToUnicode+site%3Amicrosoft.com) | user32.dll | | -[ToUnicodeEx](https://www.google.com/search?num=5&q=ToUnicodeEx+site%3Amicrosoft.com) | user32.dll | | +[ToAscii](https://www.google.com/search?num=5&q=ToAscii+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.ToAscii +[ToAsciiEx](https://www.google.com/search?num=5&q=ToAsciiEx+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.ToAsciiEx +[ToUnicode](https://www.google.com/search?num=5&q=ToUnicode+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.ToUnicode +[ToUnicodeEx](https://www.google.com/search?num=5&q=ToUnicodeEx+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.ToUnicodeEx [TrackMouseEvent](http://msdn2.microsoft.com/en-us/library/ms646265) | user32.dll | Winuser.h | Vanara.PInvoke.User32.TrackMouseEvent [TrackPopupMenu](http://msdn2.microsoft.com/en-us/library/trackpopupmenu.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.TrackPopupMenu [TrackPopupMenuEx](http://msdn2.microsoft.com/en-us/library/trackpopupmenuex.htm) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.TrackPopupMenuEx @@ -561,7 +561,7 @@ Native Method | Native DLL | Header | Managed Method [UnhookWindowsHookEx](http://msdn2.microsoft.com/en-us/library/unhookwindowshookex) | user32.dll | winuser.h | Vanara.PInvoke.User32.UnhookWindowsHookEx [UnhookWinEvent](https://www.google.com/search?num=5&q=UnhookWinEvent+site%3Amicrosoft.com) | user32.dll | | [UnionRect](http://msdn2.microsoft.com/en-us/library/f2da2df4-3f09-4c54-afd1-c728805f0f64) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.UnionRect -[UnloadKeyboardLayout](https://www.google.com/search?num=5&q=UnloadKeyboardLayout+site%3Amicrosoft.com) | user32.dll | | +[UnloadKeyboardLayout](https://www.google.com/search?num=5&q=UnloadKeyboardLayout+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.UnloadKeyboardLayout [UnpackDDElParam](https://www.google.com/search?num=5&q=UnpackDDElParam+site%3Amicrosoft.com) | user32.dll | | [UnregisterClass](https://www.google.com/search?num=5&q=UnregisterClassA+site%3Amicrosoft.com) | user32.dll | | [UnregisterDeviceNotification](http://msdn2.microsoft.com/en-us/library/bcc0cf87-f996-47b5-937c-14a6332d00d9) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.UnregisterDeviceNotification @@ -576,8 +576,8 @@ Native Method | Native DLL | Header | Managed Method [UserHandleGrantAccess](https://www.google.com/search?num=5&q=UserHandleGrantAccess+site%3Amicrosoft.com) | user32.dll | | [ValidateRect](http://msdn2.microsoft.com/en-us/library/961dd768-1849-44df-bc7f-480881ed6477) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.ValidateRect [ValidateRgn](http://msdn2.microsoft.com/en-us/library/80fb1d4a-d9b1-4e67-b585-eee81893ed34) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.ValidateRgn -[VkKeyScan](https://www.google.com/search?num=5&q=VkKeyScanA+site%3Amicrosoft.com) | user32.dll | | -[VkKeyScanEx](https://www.google.com/search?num=5&q=VkKeyScanExA+site%3Amicrosoft.com) | user32.dll | | +[VkKeyScan](https://www.google.com/search?num=5&q=VkKeyScanA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.VkKeyScanA +[VkKeyScanEx](https://www.google.com/search?num=5&q=VkKeyScanExA+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32.VkKeyScanExA [WaitForInputIdle](https://www.google.com/search?num=5&q=WaitForInputIdle+site%3Amicrosoft.com) | user32.dll | | [WaitMessage](https://www.google.com/search?num=5&q=WaitMessage+site%3Amicrosoft.com) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.WaitMessage [WindowFromDC](http://msdn2.microsoft.com/en-us/library/57ecec82-03be-4d1a-84cf-6b64131af19d) | user32.dll | winuser.h | Vanara.PInvoke.User32_Gdi.WindowFromDC @@ -602,7 +602,7 @@ Native Structure | Header | Managed Structure [CURSORINFO](http://msdn2.microsoft.com/en-us/library/cursorinfo) | winuser.h | Vanara.PInvoke.User32_Gdi+CURSORINFO [CWPRETSTRUCT](http://msdn2.microsoft.com/en-us/library/cwpretstruct.htm) | winuser.h | Vanara.PInvoke.User32+CWPRETSTRUCT [CWPSTRUCT](http://msdn2.microsoft.com/en-us/library/cwpstruct.htm) | winuser.h | Vanara.PInvoke.User32+CWPSTRUCT -[DATA](https://www.google.com/search?num=5&q=DATA+site%3Amicrosoft.com) | | Vanara.PInvoke.User32_Gdi+RAWINPUT+DATA +[DATA](https://www.google.com/search?num=5&q=DATA+site%3Amicrosoft.com) | | Vanara.PInvoke.User32+RAWINPUT+DATA [DEBUGHOOKINFO](http://msdn2.microsoft.com/en-us/library/debughookinfo.htm) | winuser.h | Vanara.PInvoke.User32+DEBUGHOOKINFO [DEV_BROADCAST_DEVICEINTERFACE](http://msdn2.microsoft.com/en-us/library/23e6b2b9-2053-4dfa-9c0a-283279f086b8) | dbt.h | Vanara.PInvoke.User32_Gdi+DEV_BROADCAST_DEVICEINTERFACE [DEV_BROADCAST_DEVNODE](https://www.google.com/search?num=5&q=DEV_BROADCAST_DEVNODE+site%3Amicrosoft.com) | dbt.h | Vanara.PInvoke.User32_Gdi+DEV_BROADCAST_DEVNODE @@ -623,16 +623,23 @@ Native Structure | Header | Managed Structure [GRPICONDIR](https://www.google.com/search?num=5&q=GRPICONDIR+site%3Amicrosoft.com) | | Vanara.PInvoke.User32_Gdi+GRPICONDIR [GRPICONDIRENTRY](https://www.google.com/search?num=5&q=GRPICONDIRENTRY+site%3Amicrosoft.com) | | Vanara.PInvoke.User32_Gdi+GRPICONDIRENTRY [GUITHREADINFO](http://msdn2.microsoft.com/en-us/library/guithreadinfo) | winuser.h | Vanara.PInvoke.User32_Gdi+GUITHREADINFO +[HARDWAREINPUT](https://www.google.com/search?num=5&q=HARDWAREINPUT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+HARDWAREINPUT [HDEVNOTIFY](https://www.google.com/search?num=5&q=HDEVNOTIFY+site%3Amicrosoft.com) | dbt.h | Vanara.PInvoke.User32_Gdi+HDEVNOTIFY [HELPINFO](https://www.google.com/search?num=5&q=HELPINFO+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+HELPINFO [HGESTUREINFO](https://www.google.com/search?num=5&q=HGESTUREINFO+site%3Amicrosoft.com) | | Vanara.PInvoke.User32+HGESTUREINFO [HHOOK](https://www.google.com/search?num=5&q=HHOOK+site%3Amicrosoft.com) | | Vanara.PInvoke.User32+HHOOK [HIGHCONTRAST](https://www.google.com/search?num=5&q=HIGHCONTRAST+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+HIGHCONTRAST +[HKL](https://www.google.com/search?num=5&q=HKL+site%3Amicrosoft.com) | | Vanara.PInvoke.User32+HKL +[HRAWINPUT](https://www.google.com/search?num=5&q=HRAWINPUT+site%3Amicrosoft.com) | | Vanara.PInvoke.User32+HRAWINPUT [HTOUCHINPUT](https://www.google.com/search?num=5&q=HTOUCHINPUT+site%3Amicrosoft.com) | | Vanara.PInvoke.User32+HTOUCHINPUT [ICONINFO](https://www.google.com/search?num=5&q=ICONINFO+site%3Amicrosoft.com) | | Vanara.PInvoke.User32_Gdi+ICONINFO [ICONINFOEX](http://msdn2.microsoft.com/en-us/library/iconinfoex) | winuser.h | Vanara.PInvoke.User32_Gdi+ICONINFOEX [ICONMETRICS](https://www.google.com/search?num=5&q=ICONMETRICS+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+ICONMETRICS +[INPUT](https://www.google.com/search?num=5&q=INPUT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+INPUT +[INPUT_TRANSFORM](http://msdn2.microsoft.com/en-us/library/DE6854F0-17D8-4E4B-97CB-A135910A300C) | winuser.h | Vanara.PInvoke.User32+INPUT_TRANSFORM [KBDLLHOOKSTRUCT](http://msdn2.microsoft.com/en-us/library/kbdllhookstruct.htm) | winuser.h | Vanara.PInvoke.User32+KBDLLHOOKSTRUCT +[KEYBDINPUT](https://www.google.com/search?num=5&q=KEYBDINPUT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+KEYBDINPUT +[LASTINPUTINFO](https://www.google.com/search?num=5&q=LASTINPUTINFO+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+LASTINPUTINFO [MDINEXTMENU](http://msdn2.microsoft.com/en-us/library/mdinextmenu.htm) | winuser.h | Vanara.PInvoke.User32_Gdi+MDINEXTMENU [MENUBARINFO](http://msdn2.microsoft.com/en-us/library/menubarinfo.htm) | winuser.h | Vanara.PInvoke.User32_Gdi+MENUBARINFO [MENUEX_TEMPLATE_HEADER](http://msdn2.microsoft.com/en-us/library/df763349-7127-482e-8613-74e68addde5d) | winuser.h | Vanara.PInvoke.User32_Gdi+MENUEX_TEMPLATE_HEADER @@ -649,17 +656,28 @@ Native Structure | Header | Managed Structure [MONITORINFOEX](http://msdn2.microsoft.com/en-us/library/f296ce29-3fc8-41c9-a201-56e222aa2219) | winuser.h | Vanara.PInvoke.User32_Gdi+MONITORINFOEX [MOUSEHOOKSTRUCT](http://msdn2.microsoft.com/en-us/library/mousehookstruct.htm) | winuser.h | Vanara.PInvoke.User32+MOUSEHOOKSTRUCT [MOUSEHOOKSTRUCTEX](http://msdn2.microsoft.com/en-us/library/mousehookstructex.htm) | winuser.h | Vanara.PInvoke.User32+MOUSEHOOKSTRUCTEX +[MOUSEINPUT](https://www.google.com/search?num=5&q=MOUSEINPUT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+MOUSEINPUT [MOUSEKEYS](https://www.google.com/search?num=5&q=MOUSEKEYS+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+MOUSEKEYS +[MOUSEMOVEPOINT](https://www.google.com/search?num=5&q=MOUSEMOVEPOINT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+MOUSEMOVEPOINT [MSGBOXPARAMS](https://www.google.com/search?num=5&q=MSGBOXPARAMS+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+MSGBOXPARAMS [MSLLHOOKSTRUCT](http://msdn2.microsoft.com/en-us/library/msllhookstruct.htm) | winuser.h | Vanara.PInvoke.User32+MSLLHOOKSTRUCT [NMHDR](https://www.google.com/search?num=5&q=NMHDR+site%3Amicrosoft.com) | | Vanara.PInvoke.User32_Gdi+NMHDR [NONCLIENTMETRICS](http://msdn2.microsoft.com/en-us/library/ff729175) | Winuser.h | Vanara.PInvoke.User32+NONCLIENTMETRICS [PAINTSTRUCT](http://msdn2.microsoft.com/en-us/library/1f8c6dd2-e511-48f2-8ab0-d2fadb1ce433) | winuser.h | Vanara.PInvoke.User32_Gdi+PAINTSTRUCT -[RAWHID](https://www.google.com/search?num=5&q=RAWHID+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32_Gdi+RAWHID -[RAWINPUT](https://www.google.com/search?num=5&q=RAWINPUT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32_Gdi+RAWINPUT -[RAWINPUTHEADER](https://www.google.com/search?num=5&q=RAWINPUTHEADER+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32_Gdi+RAWINPUTHEADER -[RAWKEYBOARD](https://www.google.com/search?num=5&q=RAWKEYBOARD+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32_Gdi+RAWKEYBOARD -[RAWMOUSE](https://www.google.com/search?num=5&q=RAWMOUSE+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32_Gdi+RAWMOUSE +[POINTER_INFO](http://msdn2.microsoft.com/en-us/library/fee176ba-ad07-4145-0b4d-1b8c335fd102) | winuser.h | Vanara.PInvoke.User32+POINTER_INFO +[POINTER_PEN_INFO](http://msdn2.microsoft.com/en-us/library/fee176ba-ad07-4141-ab4d-1b8c335fd111) | winuser.h | Vanara.PInvoke.User32+POINTER_PEN_INFO +[POINTER_TOUCH_INFO](http://msdn2.microsoft.com/en-us/library/fee176ba-ad07-3141-ab4d-1b8c335fd102) | winuser.h | Vanara.PInvoke.User32+POINTER_TOUCH_INFO +[RAWHID](https://www.google.com/search?num=5&q=RAWHID+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWHID +[RAWINPUT](https://www.google.com/search?num=5&q=RAWINPUT+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWINPUT +[RAWINPUTDEVICE](https://www.google.com/search?num=5&q=RAWINPUTDEVICE+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWINPUTDEVICE +[RAWINPUTDEVICELIST](https://www.google.com/search?num=5&q=RAWINPUTDEVICELIST+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWINPUTDEVICELIST +[RAWINPUTHEADER](https://www.google.com/search?num=5&q=RAWINPUTHEADER+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWINPUTHEADER +[RAWKEYBOARD](https://www.google.com/search?num=5&q=RAWKEYBOARD+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWKEYBOARD +[RAWMOUSE](https://www.google.com/search?num=5&q=RAWMOUSE+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RAWMOUSE +[RID_DEVICE_INFO](https://www.google.com/search?num=5&q=RID_DEVICE_INFO+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RID_DEVICE_INFO +[RID_DEVICE_INFO_HID](https://www.google.com/search?num=5&q=RID_DEVICE_INFO_HID+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RID_DEVICE_INFO_HID +[RID_DEVICE_INFO_KEYBOARD](https://www.google.com/search?num=5&q=RID_DEVICE_INFO_KEYBOARD+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RID_DEVICE_INFO_KEYBOARD +[RID_DEVICE_INFO_MOUSE](https://www.google.com/search?num=5&q=RID_DEVICE_INFO_MOUSE+site%3Amicrosoft.com) | winuser.h | Vanara.PInvoke.User32+RID_DEVICE_INFO_MOUSE [SERIALKEYS](https://www.google.com/search?num=5&q=SERIALKEYS+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+SERIALKEYS [SOUNDSENTRY](https://www.google.com/search?num=5&q=SOUNDSENTRY+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+SOUNDSENTRY [STICKYKEYS](https://www.google.com/search?num=5&q=STICKYKEYS+site%3Amicrosoft.com) | Winuser.h | Vanara.PInvoke.User32+STICKYKEYS diff --git a/PInvoke/User32/Vanara.PInvoke.User32.csproj b/PInvoke/User32/Vanara.PInvoke.User32.csproj index 7abaa5ca..23d067e5 100644 --- a/PInvoke/User32/Vanara.PInvoke.User32.csproj +++ b/PInvoke/User32/Vanara.PInvoke.User32.csproj @@ -25,10 +25,10 @@ Currently implements: Functions -AddClipboardFormatListener, AdjustWindowRect, AdjustWindowRectEx, AllowSetForegroundWindow, AnimateWindow, AnyPopup, AppendMenuA, AppendMenuW, ArrangeIconicWindows, BeginDeferWindowPos, BeginPaint, BringWindowToTop, BroadcastSystemMessage, BroadcastSystemMessageExA, BroadcastSystemMessageExW, CalculatePopupWindowPosition, CallMsgFilterA, CallMsgFilterW, CallNextHookEx, CascadeWindows, ChangeClipboardChain, ChangeDisplaySettingsA, ChangeDisplaySettingsExA, ChangeDisplaySettingsExW, ChangeDisplaySettingsW, ChangeWindowMessageFilter, ChangeWindowMessageFilterEx, CheckDlgButton, CheckMenuItem, CheckMenuRadioItem, CheckRadioButton, ChildWindowFromPoint, ChildWindowFromPointEx, ClientToScreen, ClipCursor, CloseClipboard, CloseDesktop, CloseGestureInfoHandle, CloseTouchInputHandle, CloseWindow, CloseWindowStation, CopyAcceleratorTableA, CopyAcceleratorTableW, CopyIcon, CopyImage, CopyRect, CountClipboardFormats, CreateAcceleratorTableA, CreateAcceleratorTableW, CreateCaret, CreateCursor, CreateDesktopA, CreateDesktopExA, CreateDesktopExW, CreateDesktopW, CreateDialogIndirectParamA, CreateDialogIndirectParamW, CreateDialogParamA, CreateDialogParamW, CreateIcon, CreateIconFromResource, CreateIconFromResourceEx, CreateIconIndirect, CreateMenu, CreatePopupMenu, CreateWindowExA, CreateWindowExW, CreateWindowStationA, CreateWindowStationW, DefDlgProc, DeferWindowPos, DefFrameProcA, DefFrameProcW, DefMDIChildProcA, DefMDIChildProcW, DefRawInputProc, DefWindowProcA, DefWindowProcW, DeleteMenu, DeregisterShellHookWindow, DestroyAcceleratorTable, DestroyCaret, DestroyCursor, DestroyIcon, DestroyMenu, DestroyWindow, DialogBoxIndirectParamA, DialogBoxIndirectParamW, DialogBoxParamA, DialogBoxParamW, DispatchMessageA, DispatchMessageW, DisplayConfigGetDeviceInfo, DisplayConfigSetDeviceInfo, DrawAnimatedRects, DrawCaption, DrawEdge, DrawFocusRect, DrawFrameControl, DrawIcon, DrawIconEx, DrawMenuBar, DrawStateA, DrawStateW, DrawTextA, DrawTextW, EmptyClipboard, EnableMenuItem, EndDeferWindowPos, EndDialog, EndMenu, EndPaint, EndTask, EnumChildWindows, EnumClipboardFormats, EnumDesktopsA, EnumDesktopsW, EnumDesktopWindows, EnumDisplayDevicesA, EnumDisplayDevicesW, EnumDisplayMonitors, EnumDisplaySettingsA, EnumDisplaySettingsExA, EnumDisplaySettingsExW, EnumDisplaySettingsW, EnumPropsA, EnumPropsExA, EnumPropsExW, EnumPropsW, EnumThreadWindows, EnumWindows, EnumWindowStationsA, EnumWindowStationsW, EqualRect, ExcludeUpdateRgn, ExitWindowsEx, FillRect, FindWindowA, FindWindowExA, FindWindowExW, FindWindowW, FrameRect, GetActiveWindow, GetAltTabInfoA, GetAltTabInfoW, GetAncestor, GetCaretBlinkTime, GetCaretPos, GetClientRect, GetClipboardData, GetClipboardFormatNameA, GetClipboardFormatNameW, GetClipboardOwner, GetClipboardSequenceNumber, GetClipboardViewer, GetClipCursor, GetCursor, GetCursorInfo, GetCursorPos, GetDC, GetDCEx, GetDesktopWindow, GetDialogBaseUnits, GetDisplayAutoRotationPreferences, GetDisplayConfigBufferSizes, GetDlgCtrlID, GetDlgItem, GetDlgItemInt, GetDlgItemTextA, GetDlgItemTextW, GetForegroundWindow, GetGestureConfig, GetGestureExtraArgs, GetGestureInfo, GetGUIThreadInfo, GetIconInfo, GetIconInfoExA, GetIconInfoExW, GetInputState, GetLastActivePopup, GetLayeredWindowAttributes, GetMenu, GetMenuBarInfo, GetMenuCheckMarkDimensions, GetMenuDefaultItem, GetMenuInfo, GetMenuItemCount, GetMenuItemID, GetMenuItemInfoA, GetMenuItemInfoW, GetMenuItemRect, GetMenuState, GetMenuStringA, GetMenuStringW, GetMessageA, GetMessageExtraInfo, GetMessagePos, GetMessageTime, GetMessageW, GetMonitorInfoA, GetMonitorInfoW, GetNextDlgGroupItem, GetNextDlgTabItem, GetOpenClipboardWindow, GetParent, GetPhysicalCursorPos, GetPriorityClipboardFormat, GetProcessDefaultLayout, GetProcessWindowStation, GetPropA, GetPropW, GetQueueStatus, GetShellWindow, GetSubMenu, GetSysColor, GetSysColorBrush, GetSystemMenu, GetSystemMetrics, GetTabbedTextExtentA, GetTabbedTextExtentW, GetThreadDesktop, GetTitleBarInfo, GetTopWindow, GetTouchInputInfo, GetUpdatedClipboardFormats, GetUpdateRect, GetUpdateRgn, GetUserObjectInformationA, GetUserObjectInformationW, GetWindow, GetWindowDC, GetWindowDisplayAffinity, GetWindowInfo, GetWindowLongA, GetWindowLongPtrA, GetWindowLongPtrW, GetWindowLongW, GetWindowModuleFileNameA, GetWindowModuleFileNameW, GetWindowPlacement, GetWindowRect, GetWindowRgn, GetWindowRgnBox, GetWindowTextA, GetWindowTextLengthA, GetWindowTextLengthW, GetWindowTextW, GetWindowThreadProcessId, GrayStringA, GrayStringW, HideCaret, HiliteMenuItem, InflateRect, InSendMessage, InSendMessageEx, InsertMenuA, InsertMenuItemA, InsertMenuItemW, InsertMenuW, InternalGetWindowText, IntersectRect, InvalidateRect, InvalidateRgn, IsChild, IsClipboardFormatAvailable, IsDialogMessageA, IsDialogMessageW, IsDlgButtonChecked, IsGUIThread, IsHungAppWindow, IsIconic, IsMenu, IsProcessDPIAware, IsRectEmpty, IsTouchWindow, IsWindow, IsWindowUnicode, IsWindowVisible, IsZoomed, KillTimer, LoadAcceleratorsA, LoadAcceleratorsW, LoadBitmapA, LoadBitmapW, LoadCursorA, LoadCursorFromFileA, LoadCursorFromFileW, LoadCursorW, LoadIconA, LoadIconW, LoadImageA, LoadImageW, LoadMenuA, LoadMenuIndirectA, LoadMenuIndirectW, LoadMenuW, LoadStringA, LoadStringW, LockSetForegroundWindow, LockWindowUpdate, LockWorkStation, LogicalToPhysicalPoint, LookupIconIdFromDirectory, LookupIconIdFromDirectoryEx, MapDialogRect, MapWindowPoints, MenuItemFromPoint, MessageBeep, MessageBoxA, MessageBoxIndirectA, MessageBoxIndirectW, MessageBoxW, ModifyMenuA, ModifyMenuW, MonitorFromPoint, MonitorFromRect, MonitorFromWindow, MoveWindow, OffsetRect, OpenClipboard, OpenDesktopA, OpenDesktopW, OpenIcon, OpenInputDesktop, OpenWindowStationA, OpenWindowStationW, PaintDesktop, PeekMessageA, PeekMessageW, PhysicalToLogicalPoint, PostMessageA, PostMessageW, PostQuitMessage, PostThreadMessageA, PostThreadMessageW, PrivateExtractIconsA, PrivateExtractIconsW, PtInRect, QueryDisplayConfig, RealChildWindowFromPoint, RealGetWindowClassA, RealGetWindowClassW, RedrawWindow, RegisterClipboardFormatA, RegisterClipboardFormatW, RegisterDeviceNotificationA, RegisterDeviceNotificationW, RegisterHotKey, RegisterShellHookWindow, RegisterTouchWindow, RegisterWindowMessageA, RegisterWindowMessageW, ReleaseDC, RemoveClipboardFormatListener, RemoveMenu, RemovePropA, RemovePropW, ReplyMessage, ScreenToClient, SendDlgItemMessageA, SendDlgItemMessageW, SendMessage, SendMessageA, SendMessageCallbackA, SendMessageCallbackW, SendMessageTimeoutA, SendMessageTimeoutW, SendMessageW, SendNotifyMessageA, SendNotifyMessageW, SetCaretBlinkTime, SetCaretPos, SetClipboardData, SetClipboardViewer, SetCursor, SetCursorPos, SetDisplayAutoRotationPreferences, SetDisplayConfig, SetDlgItemInt, SetDlgItemTextA, SetDlgItemTextW, SetForegroundWindow, SetGestureConfig, SetLayeredWindowAttributes, SetMenu, SetMenuDefaultItem, SetMenuInfo, SetMenuItemBitmaps, SetMenuItemInfoA, SetMenuItemInfoW, SetMessageExtraInfo, SetParent, SetPhysicalCursorPos, SetProcessDefaultLayout, SetProcessDPIAware, SetProcessWindowStation, SetPropA, SetPropW, SetRect, SetRectEmpty, SetSysColors, SetSystemCursor, SetThreadDesktop, SetTimer, SetUserObjectInformationA, SetUserObjectInformationW, SetWindowDisplayAffinity, SetWindowLong, SetWindowLongPtr, SetWindowPlacement, SetWindowPos, SetWindowRgn, SetWindowsHookExA, SetWindowsHookExW, SetWindowTextA, SetWindowTextW, ShowCaret, ShowCursor, ShowOwnedPopups, ShowWindow, ShowWindowAsync, ShutdownBlockReasonCreate, ShutdownBlockReasonDestroy, ShutdownBlockReasonQuery, SoundSentry, SubtractRect, SwitchDesktop, SwitchToThisWindow, SystemParametersInfoA, SystemParametersInfoW, TabbedTextOutA, TabbedTextOutW, TileWindows, TrackMouseEvent, TrackPopupMenu, TrackPopupMenuEx, TranslateAcceleratorA, TranslateAcceleratorW, TranslateMessage, UnhookWindowsHookEx, UnionRect, UnregisterDeviceNotification, UnregisterHotKey, UnregisterTouchWindow, UpdateLayeredWindow, UpdateLayeredWindowIndirect, UpdateWindow, ValidateRect, ValidateRgn, WaitMessage, WindowFromDC, WindowFromPhysicalPoint, WindowFromPoint +ActivateKeyboardLayout, AddClipboardFormatListener, AdjustWindowRect, AdjustWindowRectEx, AllowSetForegroundWindow, AnimateWindow, AnyPopup, AppendMenuA, AppendMenuW, ArrangeIconicWindows, BeginDeferWindowPos, BeginPaint, BlockInput, BringWindowToTop, BroadcastSystemMessage, BroadcastSystemMessageExA, BroadcastSystemMessageExW, CalculatePopupWindowPosition, CallMsgFilterA, CallMsgFilterW, CallNextHookEx, CascadeWindows, ChangeClipboardChain, ChangeDisplaySettingsA, ChangeDisplaySettingsExA, ChangeDisplaySettingsExW, ChangeDisplaySettingsW, ChangeWindowMessageFilter, ChangeWindowMessageFilterEx, CheckDlgButton, CheckMenuItem, CheckMenuRadioItem, CheckRadioButton, ChildWindowFromPoint, ChildWindowFromPointEx, ClientToScreen, ClipCursor, CloseClipboard, CloseDesktop, CloseGestureInfoHandle, CloseTouchInputHandle, CloseWindow, CloseWindowStation, CopyAcceleratorTableA, CopyAcceleratorTableW, CopyIcon, CopyImage, CopyRect, CountClipboardFormats, CreateAcceleratorTableA, CreateAcceleratorTableW, CreateCaret, CreateCursor, CreateDesktopA, CreateDesktopExA, CreateDesktopExW, CreateDesktopW, CreateDialogIndirectParamA, CreateDialogIndirectParamW, CreateDialogParamA, CreateDialogParamW, CreateIcon, CreateIconFromResource, CreateIconFromResourceEx, CreateIconIndirect, CreateMenu, CreatePopupMenu, CreateWindowExA, CreateWindowExW, CreateWindowStationA, CreateWindowStationW, DefDlgProc, DeferWindowPos, DefFrameProcA, DefFrameProcW, DefMDIChildProcA, DefMDIChildProcW, DefRawInputProc, DefWindowProcA, DefWindowProcW, DeleteMenu, DeregisterShellHookWindow, DestroyAcceleratorTable, DestroyCaret, DestroyCursor, DestroyIcon, DestroyMenu, DestroyWindow, DialogBoxIndirectParamA, DialogBoxIndirectParamW, DialogBoxParamA, DialogBoxParamW, DispatchMessageA, DispatchMessageW, DisplayConfigGetDeviceInfo, DisplayConfigSetDeviceInfo, DragDetect, DrawAnimatedRects, DrawCaption, DrawEdge, DrawFocusRect, DrawFrameControl, DrawIcon, DrawIconEx, DrawMenuBar, DrawStateA, DrawStateW, DrawTextA, DrawTextW, EmptyClipboard, EnableMenuItem, EnableMouseInPointer, EnableWindow, EndDeferWindowPos, EndDialog, EndMenu, EndPaint, EndTask, EnumChildWindows, EnumClipboardFormats, EnumDesktopsA, EnumDesktopsW, EnumDesktopWindows, EnumDisplayDevicesA, EnumDisplayDevicesW, EnumDisplayMonitors, EnumDisplaySettingsA, EnumDisplaySettingsExA, EnumDisplaySettingsExW, EnumDisplaySettingsW, EnumPropsA, EnumPropsExA, EnumPropsExW, EnumPropsW, EnumThreadWindows, EnumWindows, EnumWindowStationsA, EnumWindowStationsW, EqualRect, ExcludeUpdateRgn, ExitWindowsEx, FillRect, FindWindowA, FindWindowExA, FindWindowExW, FindWindowW, FrameRect, GetActiveWindow, GetAltTabInfoA, GetAltTabInfoW, GetAncestor, GetAsyncKeyState, GetCapture, GetCaretBlinkTime, GetCaretPos, GetClientRect, GetClipboardData, GetClipboardFormatNameA, GetClipboardFormatNameW, GetClipboardOwner, GetClipboardSequenceNumber, GetClipboardViewer, GetClipCursor, GetCursor, GetCursorInfo, GetCursorPos, GetDC, GetDCEx, GetDesktopWindow, GetDialogBaseUnits, GetDisplayAutoRotationPreferences, GetDisplayConfigBufferSizes, GetDlgCtrlID, GetDlgItem, GetDlgItemInt, GetDlgItemTextA, GetDlgItemTextW, GetDoubleClickTime, GetFocus, GetForegroundWindow, GetGestureConfig, GetGestureExtraArgs, GetGestureInfo, GetGUIThreadInfo, GetIconInfo, GetIconInfoExA, GetIconInfoExW, GetInputState, GetKBCodePage, GetKeyboardLayout, GetKeyboardLayoutList, GetKeyboardLayoutNameA, GetKeyboardLayoutNameW, GetKeyboardState, GetKeyboardType, GetKeyNameTextA, GetKeyNameTextW, GetKeyState, GetLastActivePopup, GetLastInputInfo, GetLayeredWindowAttributes, GetMenu, GetMenuBarInfo, GetMenuCheckMarkDimensions, GetMenuDefaultItem, GetMenuInfo, GetMenuItemCount, GetMenuItemID, GetMenuItemInfoA, GetMenuItemInfoW, GetMenuItemRect, GetMenuState, GetMenuStringA, GetMenuStringW, GetMessageA, GetMessageExtraInfo, GetMessagePos, GetMessageTime, GetMessageW, GetMonitorInfoA, GetMonitorInfoW, GetMouseMovePointsEx, GetNextDlgGroupItem, GetNextDlgTabItem, GetOpenClipboardWindow, GetParent, GetPhysicalCursorPos, GetPointerCursorId, GetPointerFrameInfo, GetPointerFrameInfoHistory, GetPointerFramePenInfo, GetPointerFramePenInfoHistory, GetPointerFrameTouchInfo, GetPointerFrameTouchInfoHistory, GetPointerInfo, GetPointerInfoHistory, GetPointerInputTransform, GetPointerPenInfo, GetPointerPenInfoHistory, GetPointerTouchInfo, GetPointerTouchInfoHistory, GetPointerType, GetPriorityClipboardFormat, GetProcessDefaultLayout, GetProcessWindowStation, GetPropA, GetPropW, GetQueueStatus, GetRawInputBuffer, GetRawInputData, GetRawInputDeviceInfoA, GetRawInputDeviceInfoW, GetRawInputDeviceList, GetRegisteredRawInputDevices, GetShellWindow, GetSubMenu, GetSysColor, GetSysColorBrush, GetSystemMenu, GetSystemMetrics, GetTabbedTextExtentA, GetTabbedTextExtentW, GetThreadDesktop, GetTitleBarInfo, GetTopWindow, GetTouchInputInfo, GetUnpredictedMessagePos, GetUpdatedClipboardFormats, GetUpdateRect, GetUpdateRgn, GetUserObjectInformationA, GetUserObjectInformationW, GetWindow, GetWindowDC, GetWindowDisplayAffinity, GetWindowInfo, GetWindowLongA, GetWindowLongPtrA, GetWindowLongPtrW, GetWindowLongW, GetWindowModuleFileNameA, GetWindowModuleFileNameW, GetWindowPlacement, GetWindowRect, GetWindowRgn, GetWindowRgnBox, GetWindowTextA, GetWindowTextLengthA, GetWindowTextLengthW, GetWindowTextW, GetWindowThreadProcessId, GrayStringA, GrayStringW, HideCaret, HiliteMenuItem, InflateRect, InSendMessage, InSendMessageEx, InsertMenuA, InsertMenuItemA, InsertMenuItemW, InsertMenuW, InternalGetWindowText, IntersectRect, InvalidateRect, InvalidateRgn, IsChild, IsClipboardFormatAvailable, IsDialogMessageA, IsDialogMessageW, IsDlgButtonChecked, IsGUIThread, IsHungAppWindow, IsIconic, IsMenu, IsMouseInPointerEnabled, IsProcessDPIAware, IsRectEmpty, IsTouchWindow, IsWindow, IsWindowEnabled, IsWindowUnicode, IsWindowVisible, IsZoomed, keybd_event, KillTimer, LoadAcceleratorsA, LoadAcceleratorsW, LoadBitmapA, LoadBitmapW, LoadCursorA, LoadCursorFromFileA, LoadCursorFromFileW, LoadCursorW, LoadIconA, LoadIconW, LoadImageA, LoadImageW, LoadKeyboardLayoutA, LoadKeyboardLayoutW, LoadMenuA, LoadMenuIndirectA, LoadMenuIndirectW, LoadMenuW, LoadStringA, LoadStringW, LockSetForegroundWindow, LockWindowUpdate, LockWorkStation, LogicalToPhysicalPoint, LookupIconIdFromDirectory, LookupIconIdFromDirectoryEx, MapDialogRect, MapVirtualKeyA, MapVirtualKeyExA, MapVirtualKeyExW, MapVirtualKeyW, MapWindowPoints, MenuItemFromPoint, MessageBeep, MessageBoxA, MessageBoxIndirectA, MessageBoxIndirectW, MessageBoxW, ModifyMenuA, ModifyMenuW, MonitorFromPoint, MonitorFromRect, MonitorFromWindow, mouse_event, MoveWindow, OemKeyScan, OffsetRect, OpenClipboard, OpenDesktopA, OpenDesktopW, OpenIcon, OpenInputDesktop, OpenWindowStationA, OpenWindowStationW, PaintDesktop, PeekMessageA, PeekMessageW, PhysicalToLogicalPoint, PostMessageA, PostMessageW, PostQuitMessage, PostThreadMessageA, PostThreadMessageW, PrivateExtractIconsA, PrivateExtractIconsW, PtInRect, QueryDisplayConfig, RealChildWindowFromPoint, RealGetWindowClassA, RealGetWindowClassW, RedrawWindow, RegisterClipboardFormatA, RegisterClipboardFormatW, RegisterDeviceNotificationA, RegisterDeviceNotificationW, RegisterHotKey, RegisterRawInputDevices, RegisterShellHookWindow, RegisterTouchWindow, RegisterWindowMessageA, RegisterWindowMessageW, ReleaseCapture, ReleaseDC, RemoveClipboardFormatListener, RemoveMenu, RemovePropA, RemovePropW, ReplyMessage, ScreenToClient, SendDlgItemMessageA, SendDlgItemMessageW, SendInput, SendMessage, SendMessageA, SendMessageCallbackA, SendMessageCallbackW, SendMessageTimeoutA, SendMessageTimeoutW, SendMessageW, SendNotifyMessageA, SendNotifyMessageW, SetActiveWindow, SetCapture, SetCaretBlinkTime, SetCaretPos, SetClipboardData, SetClipboardViewer, SetCursor, SetCursorPos, SetDisplayAutoRotationPreferences, SetDisplayConfig, SetDlgItemInt, SetDlgItemTextA, SetDlgItemTextW, SetDoubleClickTime, SetFocus, SetForegroundWindow, SetGestureConfig, SetKeyboardState, SetLayeredWindowAttributes, SetMenu, SetMenuDefaultItem, SetMenuInfo, SetMenuItemBitmaps, SetMenuItemInfoA, SetMenuItemInfoW, SetMessageExtraInfo, SetParent, SetPhysicalCursorPos, SetProcessDefaultLayout, SetProcessDPIAware, SetProcessWindowStation, SetPropA, SetPropW, SetRect, SetRectEmpty, SetSysColors, SetSystemCursor, SetThreadDesktop, SetTimer, SetUserObjectInformationA, SetUserObjectInformationW, SetWindowDisplayAffinity, SetWindowLong, SetWindowLongPtr, SetWindowPlacement, SetWindowPos, SetWindowRgn, SetWindowsHookExA, SetWindowsHookExW, SetWindowTextA, SetWindowTextW, ShowCaret, ShowCursor, ShowOwnedPopups, ShowWindow, ShowWindowAsync, ShutdownBlockReasonCreate, ShutdownBlockReasonDestroy, ShutdownBlockReasonQuery, SkipPointerFrameMessages, SoundSentry, SubtractRect, SwapMouseButton, SwitchDesktop, SwitchToThisWindow, SystemParametersInfoA, SystemParametersInfoW, TabbedTextOutA, TabbedTextOutW, TileWindows, ToAscii, ToAsciiEx, ToUnicode, ToUnicodeEx, TrackMouseEvent, TrackPopupMenu, TrackPopupMenuEx, TranslateAcceleratorA, TranslateAcceleratorW, TranslateMessage, UnhookWindowsHookEx, UnionRect, UnloadKeyboardLayout, UnregisterDeviceNotification, UnregisterHotKey, UnregisterTouchWindow, UpdateLayeredWindow, UpdateLayeredWindowIndirect, UpdateWindow, ValidateRect, ValidateRgn, VkKeyScanA, VkKeyScanExA, VkKeyScanExW, VkKeyScanW, WaitMessage, WindowFromDC, WindowFromPhysicalPoint, WindowFromPoint Structures -METAFILEPICT, CBT_CREATEWND, CBTACTIVATESTRUCT, CWPRETSTRUCT, CWPSTRUCT, DEBUGHOOKINFO, EVENTMSG, HHOOK, KBDLLHOOKSTRUCT, MOUSEHOOKSTRUCT, MOUSEHOOKSTRUCTEX, MSLLHOOKSTRUCT, TRACKMOUSEEVENT, ACCESSTIMEOUT, ANIMATIONINFO, AUDIODESCRIPTION, FILTERKEYS, HELPINFO, HIGHCONTRAST, ICONMETRICS, MINIMIZEDMETRICS, MOUSEKEYS, MSGBOXPARAMS, NONCLIENTMETRICS, SERIALKEYS, SOUNDSENTRY, STICKYKEYS, TOGGLEKEYS, TOUCHPREDICTIONPARAMETERS, GESTURECONFIG, GESTUREINFO, GESTURENOTIFYSTRUCT, HGESTUREINFO, HTOUCHINPUT, TOUCHINPUT, ICONINFO, VIDEOPARAMETERS, NMHDR, ACCEL, CURSORINFO, DEV_BROADCAST_DEVICEINTERFACE, DEV_BROADCAST_DEVNODE, DEV_BROADCAST_HANDLE, DEV_BROADCAST_HDR, DEV_BROADCAST_NET, DEV_BROADCAST_OEM, DEV_BROADCAST_PORT, DEV_BROADCAST_USERDEFINED, DEV_BROADCAST_VOLUME, HDEVNOTIFY, VolLockBroadcast, USEROBJECTFLAGS, DLGITEMTEMPLATE, DLGTEMPLATE, MINMAXINFO, WINDOWPOS, ICONINFOEX, MDINEXTMENU, MENUBARINFO, MENUEX_TEMPLATE_HEADER, MENUEX_TEMPLATE_ITEM, MENUGETOBJECTINFO, MENUINFO, MENUITEMINFO, MENUITEMTEMPLATE, MENUITEMTEMPLATEHEADER, TPMPARAMS, BSMINFO, MONITORINFO, MONITORINFOEX, PAINTSTRUCT, GRPICONDIR, GRPICONDIRENTRY, ALTTABINFO, CHANGEFILTERSTRUCT, GUITHREADINFO, RAWHID, RAWINPUT, RAWINPUTHEADER, RAWKEYBOARD, RAWMOUSE, TITLEBARINFO, UPDATELAYEREDWINDOWINFO, WINDOWINFO, WINDOWPLACEMENT, DATA +METAFILEPICT, CBT_CREATEWND, CBTACTIVATESTRUCT, CWPRETSTRUCT, CWPSTRUCT, DEBUGHOOKINFO, EVENTMSG, HHOOK, KBDLLHOOKSTRUCT, MOUSEHOOKSTRUCT, MOUSEHOOKSTRUCTEX, MSLLHOOKSTRUCT, HARDWAREINPUT, HRAWINPUT, INPUT, LASTINPUTINFO, MOUSEINPUT, RAWHID, RAWINPUT, RAWINPUTDEVICE, RAWINPUTDEVICELIST, RAWINPUTHEADER, RAWKEYBOARD, RAWMOUSE, RID_DEVICE_INFO, RID_DEVICE_INFO_HID, RID_DEVICE_INFO_KEYBOARD, RID_DEVICE_INFO_MOUSE, HKL, KEYBDINPUT, MOUSEMOVEPOINT, TRACKMOUSEEVENT, INPUT_TRANSFORM, POINTER_INFO, POINTER_PEN_INFO, POINTER_TOUCH_INFO, ACCESSTIMEOUT, ANIMATIONINFO, AUDIODESCRIPTION, FILTERKEYS, HELPINFO, HIGHCONTRAST, ICONMETRICS, MINIMIZEDMETRICS, MOUSEKEYS, MSGBOXPARAMS, NONCLIENTMETRICS, SERIALKEYS, SOUNDSENTRY, STICKYKEYS, TOGGLEKEYS, TOUCHPREDICTIONPARAMETERS, GESTURECONFIG, GESTUREINFO, GESTURENOTIFYSTRUCT, HGESTUREINFO, HTOUCHINPUT, TOUCHINPUT, DATA, ICONINFO, VIDEOPARAMETERS, NMHDR, ACCEL, CURSORINFO, DEV_BROADCAST_DEVICEINTERFACE, DEV_BROADCAST_DEVNODE, DEV_BROADCAST_HANDLE, DEV_BROADCAST_HDR, DEV_BROADCAST_NET, DEV_BROADCAST_OEM, DEV_BROADCAST_PORT, DEV_BROADCAST_USERDEFINED, DEV_BROADCAST_VOLUME, HDEVNOTIFY, VolLockBroadcast, USEROBJECTFLAGS, DLGITEMTEMPLATE, DLGTEMPLATE, MINMAXINFO, WINDOWPOS, ICONINFOEX, MDINEXTMENU, MENUBARINFO, MENUEX_TEMPLATE_HEADER, MENUEX_TEMPLATE_ITEM, MENUGETOBJECTINFO, MENUINFO, MENUITEMINFO, MENUITEMTEMPLATE, MENUITEMTEMPLATEHEADER, TPMPARAMS, BSMINFO, MONITORINFO, MONITORINFOEX, PAINTSTRUCT, GRPICONDIR, GRPICONDIRENTRY, ALTTABINFO, CHANGEFILTERSTRUCT, GUITHREADINFO, TITLEBARINFO, UPDATELAYEREDWINDOWINFO, WINDOWINFO, WINDOWPLACEMENT latest diff --git a/PInvoke/User32/WinUser.Pointer.cs b/PInvoke/User32/WinUser.Pointer.cs new file mode 100644 index 00000000..0f9720b5 --- /dev/null +++ b/PInvoke/User32/WinUser.Pointer.cs @@ -0,0 +1,1754 @@ +using System; +using System.Runtime.InteropServices; + +namespace Vanara.PInvoke +{ + public static partial class User32 + { + /// Lists the flags that may appear in the penFlags field of the POINTER_PEN_INFO structure. + // https://docs.microsoft.com/en-us/previous-versions/hh454905(v%3dvs.85) typedef enum tagPEN_FLAGS { PEN_FLAGS_NONE = 0x00000000, + // PEN_FLAGS_BARREL = 0x00000001, PEN_FLAGS_INVERTED = 0x00000002, PEN_FLAGS_ERASER = 0x00000004 } PEN_FLAGS; + [PInvokeData("Winuser.h", MSDNShortId = "")] + [Flags] + public enum PEN_FLAGS + { + /// There is no pen flag. This is the default. + PEN_FLAG_NONE = 0x00000000, + + /// The barrel button is pressed. + PEN_FLAG_BARREL = 0x00000001, + + /// The pen is inverted. + PEN_FLAG_INVERTED = 0x00000002, + + /// The eraser button is pressed. + PEN_FLAG_ERASER = 0x00000004, + } + + /// Values that can appear in the penMask field of the POINTER_PEN_INFO structure. + [PInvokeData("Winuser.h", MSDNShortId = "")] + [Flags] + public enum PEN_MASK + { + /// Default. None of the optional fields are valid. + PEN_MASK_NONE = 0x00000000, + + /// pressure of the POINTER_PEN_INFO structure is valid. + PEN_MASK_PRESSURE = 0x00000001, + + /// rotation of the POINTER_PEN_INFO structure is valid. + PEN_MASK_ROTATION = 0x00000002, + + /// tiltX of the POINTER_PEN_INFO structure is valid. + PEN_MASK_TILT_X = 0x00000004, + + /// tiltY of the POINTER_PEN_INFO structure is valid. + PEN_MASK_TILT_Y = 0x00000008, + } + + /// Identifies a change in the state of a button associated with a pointer. + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ne-winuser-tagpointer_button_change_type typedef enum + // tagPOINTER_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 } POINTER_BUTTON_CHANGE_TYPE; + [PInvokeData("winuser.h", MSDNShortId = "DF5F60F6-8FD9-41EB-AF2A-09A17513659C")] + public enum POINTER_BUTTON_CHANGE_TYPE + { + /// No change in button state. + POINTER_CHANGE_NONE, + + /// The first button (see POINTER_FLAG_FIRSTBUTTON) transitioned to a pressed state. + POINTER_CHANGE_FIRSTBUTTON_DOWN, + + /// The first button (see POINTER_FLAG_FIRSTBUTTON) transitioned to a released state. + POINTER_CHANGE_FIRSTBUTTON_UP, + + /// The second button (see POINTER_FLAG_SECONDBUTTON) transitioned to a pressed state. + POINTER_CHANGE_SECONDBUTTON_DOWN, + + /// The second button (see POINTER_FLAG_SECONDBUTTON) transitioned to a released state. + POINTER_CHANGE_SECONDBUTTON_UP, + + /// The third button (see POINTER_FLAG_THIRDBUTTON) transitioned to a pressed state. + POINTER_CHANGE_THIRDBUTTON_DOWN, + + /// The third button (see POINTER_FLAG_THIRDBUTTON) transitioned to a released state. + POINTER_CHANGE_THIRDBUTTON_UP, + + /// The fourth button (see POINTER_FLAG_FOURTHBUTTON) transitioned to a pressed state. + POINTER_CHANGE_FOURTHBUTTON_DOWN, + + /// The fourth button (see POINTER_FLAG_FOURTHBUTTON) transitioned to a released state. + POINTER_CHANGE_FOURTHBUTTON_UP, + + /// The fifth button (see POINTER_FLAG_FIFTHBUTTON) transitioned to a pressed state. + POINTER_CHANGE_FIFTHBUTTON_DOWN, + + /// The fifth button (see POINTER_FLAG_FIFTHBUTTON) transitioned to a released state. + POINTER_CHANGE_FIFTHBUTTON_UP, + } + + /// Values that can appear in the pointerFlags field of the POINTER_INFO structure. + /// + /// XBUTTON1 and XBUTTON2 are additional buttons used on many mouse devices. They return the same data as standard mouse buttons. + /// + // https://docs.microsoft.com/en-us/previous-versions/windows/desktop/inputmsg/pointer-flags-contants + [PInvokeData("winuser.h", MSDNShortId = "CC3F8E21-F4FF-495C-922E-A3708D3F2093")] + public enum POINTER_FLAGS + { + /// Default + POINTER_FLAG_NONE = 0x00000000, + + /// Indicates the arrival of a new pointer. + POINTER_FLAG_NEW = 0x00000001, + + /// + /// Indicates that this pointer continues to exist. When this flag is not set, it indicates the pointer has left detection range. + /// + /// This flag is typically not set only when a hovering pointer leaves detection range (POINTER_FLAG_UPDATE is set) or when a + /// pointer in contact with a window surface leaves detection range(POINTER_FLAG_UP is set). + /// + /// + POINTER_FLAG_INRANGE = 0x00000002, + + /// + /// Indicates that this pointer is in contact with the digitizer surface. When this flag is not set, it indicates a hovering pointer. + /// + POINTER_FLAG_INCONTACT = 0x00000004, + + /// + /// Indicates a primary action, analogous to a left mouse button down. + /// A touch pointer has this flag set when it is in contact with the digitizer surface. + /// A pen pointer has this flag set when it is in contact with the digitizer surface with no buttons pressed. + /// A mouse pointer has this flag set when the left mouse button is down. + /// + POINTER_FLAG_FIRSTBUTTON = 0x00000010, + + /// + /// Indicates a secondary action, analogous to a right mouse button down. + /// A touch pointer does not use this flag. + /// A pen pointer has this flag set when it is in contact with the digitizer surface with the pen barrel button pressed. + /// A mouse pointer has this flag set when the right mouse button is down. + /// + POINTER_FLAG_SECONDBUTTON = 0x00000020, + + /// + /// Analogous to a mouse wheel button down. + /// A touch pointer does not use this flag. + /// A pen pointer does not use this flag. + /// A mouse pointer has this flag set when the mouse wheel button is down. + /// + POINTER_FLAG_THIRDBUTTON = 0x00000040, + + /// + /// Analogous to a first extended mouse (XButton1) button down. + /// A touch pointer does not use this flag. + /// A pen pointer does not use this flag. + /// A mouse pointer has this flag set when the first extended mouse(XBUTTON1) button is down. + /// + POINTER_FLAG_FOURTHBUTTON = 0x00000080, + + /// + /// Analogous to a second extended mouse (XButton2) button down. + /// A touch pointer does not use this flag. + /// A pen pointer does not use this flag. + /// A mouse pointer has this flag set when the second extended mouse(XBUTTON2) button is down. + /// + POINTER_FLAG_FIFTHBUTTON = 0x00000100, + + /// + /// Indicates that this pointer has been designated as the primary pointer. A primary pointer is a single pointer that can + /// perform actions beyond those available to non-primary pointers. For example, when a primary pointer makes contact with a + /// window s surface, it may provide the window an opportunity to activate by sending it a WM_POINTERACTIVATE message. + /// + /// The primary pointer is identified from all current user interactions on the system(mouse, touch, pen, and so on). As such, + /// the primary pointer might not be associated with your app.The first contact in a multi-touch interaction is set as the + /// primary pointer.Once a primary pointer is identified, all contacts must be lifted before a new contact can be identified as a + /// primary pointer.For apps that don't process pointer input, only the primary pointer's events are promoted to mouse events. + /// + /// + POINTER_FLAG_PRIMARY = 0x00002000, + + /// + /// Confidence is a suggestion from the source device about whether the pointer represents an intended or accidental interaction, + /// which is especially relevant for PT_TOUCH pointers where an accidental interaction (such as with the palm of the hand) can + /// trigger input. The presence of this flag indicates that the source device has high confidence that this input is part of an + /// intended interaction. + /// + POINTER_FLAG_CONFIDENCE = 0x000004000, + + /// + /// Indicates that the pointer is departing in an abnormal manner, such as when the system receives invalid input for the pointer + /// or when a device with active pointers departs abruptly. If the application receiving the input is in a position to do so, it + /// should treat the interaction as not completed and reverse any effects of the concerned pointer. + /// + POINTER_FLAG_CANCELED = 0x000008000, + + /// Indicates that this pointer transitioned to a down state; that is, it made contact with the digitizer surface. + POINTER_FLAG_DOWN = 0x00010000, + + /// Indicates that this is a simple update that does not include pointer state changes. + POINTER_FLAG_UPDATE = 0x00020000, + + /// Indicates that this pointer transitioned to an up state; that is, contact with the digitizer surface ended. + POINTER_FLAG_UP = 0x00040000, + + /// + /// Indicates input associated with a pointer wheel. For mouse pointers, this is equivalent to the action of the mouse scroll + /// wheel (WM_MOUSEHWHEEL). + /// + POINTER_FLAG_WHEEL = 0x00080000, + + /// + /// Indicates input associated with a pointer h-wheel. For mouse pointers, this is equivalent to the action of the mouse + /// horizontal scroll wheel (WM_MOUSEHWHEEL). + /// + POINTER_FLAG_HWHEEL = 0x00100000, + + /// + /// Indicates that this pointer was captured by (associated with) another element and the original element has lost capture (see WM_POINTERCAPTURECHANGED). + /// + POINTER_FLAG_CAPTURECHANGED = 0x00200000, + + /// Indicates that this pointer has an associated transform. + POINTER_FLAG_HASTRANSFORM = 0x00400000, + } + + /// Identifies the pointer input types. + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ne-winuser-tagpointer_input_type typedef enum tagPOINTER_INPUT_TYPE { + // PT_POINTER, PT_TOUCH, PT_PEN, PT_MOUSE, PT_TOUCHPAD } ; + [PInvokeData("winuser.h", MSDNShortId = "3334DCD0-DAE1-4AC2-AB36-23D114803100")] + public enum POINTER_INPUT_TYPE + { + /// + /// Generic pointer type. This type never appears in pointer messages or pointer data. Some data query functions allow the caller + /// to restrict the query to specific pointer type. The PT_POINTER type can be used in these functions to specify that the query + /// is to include pointers of all types + /// + PT_POINTER, + + /// Touch pointer type. + PT_TOUCH, + + /// Pen pointer type. + PT_PEN, + + /// Mouse pointer type. + PT_MOUSE, + + /// Touchpad pointer type (Windows 8.1 and later). + PT_TOUCHPAD, + } + + /// Values that can appear in the touchFlags field of the POINTER_TOUCH_INFO structure. + // https://docs.microsoft.com/en-us/previous-versions/hh454914(v%3dvs.85) typedef enum tagTOUCH_FLAGS { TOUCH_FLAGS_NONE = 0x00000000 + // } TOUCH_FLAGS; + [PInvokeData("Winuser.h", MSDNShortId = "")] + public enum TOUCH_FLAGS + { + /// Indicates that no flags are set. + TOUCH_FLAGS_NONE = 0x00000000 + } + + /// Values that can appear in the touchMask field of the POINTER_TOUCH_INFO structure. + [PInvokeData("Winuser.h", MSDNShortId = "")] + [Flags] + public enum TOUCH_MASK + { + /// Default. None of the optional fields are valid. + TOUCH_MASK_NONE = 0x00000000, + + /// rcContact of the POINTER_TOUCH_INFO structure is valid. + TOUCH_MASK_CONTACTAREA = 0x00000001, + + /// orientation of the POINTER_TOUCH_INFO structure is valid. + TOUCH_MASK_ORIENTATION = 0x00000002, + + /// pressure of the POINTER_TOUCH_INFO structure is valid. + TOUCH_MASK_PRESSURE = 0x00000004, + } + + /// Enables the mouse to act as a pointer input device and send WM_POINTER messages. + /// TRUE to turn on mouse input support in WM_POINTER. + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// This function can be called only once in the context of a process lifetime. Prior to the first call, Windows Store apps run with + /// mouse-in-pointer enabled, as do any desktop applications that consume mshtml.dll. All other desktop applications run with + /// mouse-in-pointer disabled. + /// + /// On the first call in the process lifetime, the state is changed as specified and the call succeeds. + /// On subsequent calls, the state will not change. If the current state is not equal to the specified state, the call fails. + /// Call IsMouseInPointerEnabled to verify the mouse-in-pointer state. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-enablemouseinpointer BOOL EnableMouseInPointer( BOOL + // fEnable ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "66D9BF17-164F-455F-803F-36CDF88C34FF")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool EnableMouseInPointer([MarshalAs(UnmanagedType.Bool)] bool fEnable); + + /// Retrieves the cursor identifier associated with the specified pointer. + /// An identifier of the pointer for which to retrieve the cursor identifier. + /// + /// An address of a UINT32 to receive the tablet cursor identifier, if any, associated with the specified pointer. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Cursor objects represent pointing and selecting devices used with digitizer devices, most commonly tactile contacts on touch + /// digitizers and tablet pens on pen digitizers. Physical pens may have multiple tips (such as normal and eraser ends), with each + /// pen tip representing a different cursor object. Each cursor object has an associated cursor identifier. + /// + /// + /// For pointer types that derive from these cursor objects, an application can use the GetPointerCursorId function to + /// retrieve the cursor identifier associated with a pointer. + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointercursorid BOOL GetPointerCursorId( UINT32 + // pointerId, UINT32 *cursorId ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "43211600-ee82-416f-860f-423c581eda75")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerCursorId(uint pointerId, out uint cursorId); + + /// Gets the entire frame of information for the specified pointers associated with the current message. + /// An identifier of the pointer for which to retrieve frame information. + /// + /// A pointer to a variable that specifies the count of structures in the buffer to which pointerInfo points. If + /// GetPointerFrameInfo succeeds, pointerCount is updated with the total count of pointers in the frame. + /// + /// + /// Address of an array of POINTER_INFO structures to receive the pointer information. This parameter can be NULL if + /// *pointerCount is zero. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// GetPointerFrameInfo retrieves the entire pointer input frame associated with a pointer message. Use GetPointerInfo to + /// retrieve information for a single pointer associated with a pointer message. + /// + /// The frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// The information returned by GetPointerFrameInfo is associated with the most recent pointer message retrieved by the + /// calling thread. When the next message is retrieved by the calling thread, the information associated with the previous message + /// may no longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerFrameInfoHistory to retrieve the message history from the most recent + /// WM_POINTERUPDATE message. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to skip + /// remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. However, the SkipPointerFrameMessages function should be used + /// with care and only when the caller can be sure that no other entity on the caller’s thread is expecting to see the remaining + /// pointer messages one by one as they are retrieved. + /// + /// + /// Note that the information retrieved is associated with the pointer frame most recently retrieved by the calling thread. Once the + /// calling thread retrieves its next message, the information associated with the previous pointer frame may no longer be available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// + /// For apps that have both client and non-client areas, the input frame can include both client and non-client data. To + /// differentiate between client and non-client data, you must perform hit testing on the target window. + /// + /// We recommend the following if you want to filter data from the input frame: + /// + /// + /// + /// For each update that does not include a pointer contact (a POINTER_FLAG_UPDATE without POINTER_FLAG_INCONTACT), hit test + /// to determine if the input is client or non-client. + /// + /// + /// + /// For each new contact (POINTER_FLAG_DOWN), hit test to determine if the input is client or non-client and track this info. + /// + /// + /// + /// For each update that includes a pointer contact (a POINTER_FLAG_UPDATE with POINTER_FLAG_INCONTACT), use the tracking info + /// to determine whether the input is client or non-client. + /// + /// + /// + /// + /// For each POINTER_FLAG_UP, use the tracking info to determine whether the input is client or non-client and then clear this + /// pointer from the tracking data. + /// + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerframeinfo BOOL GetPointerFrameInfo( UINT32 + // pointerId, UINT32 *pointerCount, POINTER_INFO *pointerInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "6b7f450d-6ab1-4991-b2f9-a1db3f065711")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerFrameInfo(uint pointerId, ref uint pointerCount, [In, Out, MarshalAs(UnmanagedType.LPArray)] POINTER_INFO[] pointerInfo); + + /// + /// Gets the entire frame of information (including coalesced input frames) for the specified pointers associated with the current message. + /// + /// An identifier of the pointer for which to retrieve frame information. + /// + /// A pointer to a variable that specifies the count of rows in the two-dimensional array to which pointerInfo points. If + /// GetPointerFrameInfoHistory succeeds, entriesCount is updated with the total count of frames available in the history. + /// + /// + /// A pointer to a variable that specifies the count of columns in the two-dimensional array to which pointerInfo points. If + /// GetPointerFrameInfoHistory succeeds, pointerCount is updated with the total count of pointers in each frame. + /// + /// + /// + /// Address of a two-dimensional array of POINTER_INFO structures to receive the pointer information. This parameter can be NULL if + /// *entriesCount and *pointerCount are both zero. + /// + /// This array is interpreted as . + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// The information returned by GetPointerFrameInfo is associated with the most recent pointer message retrieved by the calling + /// thread. When the next message is retrieved by the calling thread, the information associated with the previous message may no + /// longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerFrameInfoHistory to retrieve the message history (including coalesced input + /// frames) from the most recent WM_POINTERUPDATE message. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to skip + /// remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. However, the SkipPointerFrameMessages function should be used + /// with care and only when the caller can be sure that no other entity on the caller’s thread is expecting to see the remaining + /// pointer messages one by one as they are retrieved. + /// + /// The frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// The information retrieved represents a two-dimensional array with one row for each history entry and one column for each pointer + /// in the frame. + /// + /// + /// The information retrieved appears in reverse chronological order, with the most recent entry in the first row of the returned + /// array. The most recent entry is the same as that returned by the GetPointerFrameInfo function. + /// + /// + /// If the count of rows in the buffer provided is insufficient to hold all available history entries, this function succeeds with + /// the buffer containing the most recent entries and *entriesCount containing the total count of entries available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// + /// For apps that have both client and non-client areas, the input frame can include both client and non-client data. To + /// differentiate between client and non-client data, you must perform hit testing on the target window. + /// + /// We recommend the following if you want to filter data from the input frame: + /// + /// + /// + /// For each update that does not include a pointer contact (a POINTER_FLAG_UPDATE without POINTER_FLAG_INCONTACT), hit test + /// to determine if the input is client or non-client. + /// + /// + /// + /// For each new contact (POINTER_FLAG_DOWN), hit test to determine if the input is client or non-client and track this info. + /// + /// + /// + /// For each update that includes a pointer contact (a POINTER_FLAG_UPDATE with POINTER_FLAG_INCONTACT), use the tracking info + /// to determine whether the input is client or non-client. + /// + /// + /// + /// + /// For each POINTER_FLAG_UP, use the tracking info to determine whether the input is client or non-client and then clear this + /// pointer from the tracking data. + /// + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerframeinfohistory BOOL + // GetPointerFrameInfoHistory( UINT32 pointerId, UINT32 *entriesCount, UINT32 *pointerCount, POINTER_INFO *pointerInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "1ae035d6-a375-4421-82a6-50be4a2341f6")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerFrameInfoHistory(uint pointerId, ref uint entriesCount, ref uint pointerCount, [In, Out] POINTER_INFO[,] pointerInfo); + + /// + /// Gets the entire frame of pen-based information for the specified pointers (of type PT_PEN) associated with the current message. + /// + /// An identifier of the pointer for which to retrieve frame information. + /// + /// A pointer to a variable that specifies the count of structures in the buffer to which penInfo points. If + /// GetPointerFramePenInfo succeeds, pointerCount is updated with the total count of pointers in the frame. + /// + /// + /// Address of an array of POINTER_PEN_INFO structures to receive the pointer information. This parameter can be NULL if + /// *pointerCount is zero. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// GetPointerFramePenInfo retrieves the entire pointer input frame associated with a pointer (of type PT_PEN) message. Use + /// GetPointerPenInfo to retrieve information for a single pointer associated with a pointer message. + /// + /// The frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// The information returned by GetPointerFrameInfo is associated with the most recent pointer message retrieved by the calling + /// thread. When the next message is retrieved by the calling thread, the information associated with the previous message may no + /// longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerFramePenInfoHistory to retrieve the message history from the most recent + /// WM_POINTERUPDATE message. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to skip + /// remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. However, the SkipPointerFrameMessages function should be used + /// with care and only when the caller can be sure that no other entity on the caller’s thread is expecting to see the remaining + /// pointer messages one by one as they are retrieved. + /// + /// + /// Note that the information retrieved is associated with the pointer frame most recently retrieved by the calling thread. Once the + /// calling thread retrieves its next message, the information associated with the previous pointer frame may no longer be available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window to which the pointer message has been delivered, this function fails with the last + /// error set to ERROR_ACCESS_DENIED. + /// + /// If the specified pointer is not of type PT_PEN, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + /// For apps that have both client and non-client areas, the input frame can include both client and non-client data. To + /// differentiate between client and non-client data, you must perform hit testing on the target window. + /// + /// We recommend the following if you want to filter data from the input frame: + /// + /// + /// + /// For each update that does not include a pointer contact (a POINTER_FLAG_UPDATE without POINTER_FLAG_INCONTACT), hit test + /// to determine if the input is client or non-client. + /// + /// + /// + /// For each new contact (POINTER_FLAG_DOWN), hit test to determine if the input is client or non-client and track this info. + /// + /// + /// + /// For each update that includes a pointer contact (a POINTER_FLAG_UPDATE with POINTER_FLAG_INCONTACT), use the tracking info + /// to determine whether the input is client or non-client. + /// + /// + /// + /// + /// For each POINTER_FLAG_UP, use the tracking info to determine whether the input is client or non-client and then clear this + /// pointer from the tracking data. + /// + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerframepeninfo BOOL GetPointerFramePenInfo( UINT32 + // pointerId, UINT32 *pointerCount, POINTER_PEN_INFO *penInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "52db9b96-7f9e-41d7-88f7-b9c7691a6511")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerFramePenInfo(uint pointerId, ref uint pointerCount, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] POINTER_PEN_INFO[] penInfo); + + /// + /// Gets the entire frame of pen-based information (including coalesced input frames) for the specified pointers (of type PT_PEN) + /// associated with the current message. + /// + /// The identifier of the pointer for which to retrieve frame information. + /// + /// A pointer to a variable that specifies the count of rows in the two-dimensional array to which penInfo points. If + /// GetPointerFramePenInfoHistory succeeds, entriesCount is updated with the total count of frames available in the history. + /// + /// + /// A pointer to a variaable that specifies the count of columns in the two-dimensional array to which penInfo points. If + /// GetPointerFramePenInfoHistory succeeds, pointerCount is updated with the total count of pointers in each frame. + /// + /// + /// + /// Address of a two-dimensional array of POINTER_PEN_INFO structures to receive the pointer information. This parameter can be NULL + /// if *entriesCount and *pointerCount are both zero. + /// + /// This array is interpreted as POINTER_PEN_INFO[*entriesCount][*pointerCount]. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// The information returned by GetPointerFramePenInfo is associated with the most recent pointer (PT_PEN) message retrieved by the + /// calling thread. When the next message is retrieved by the calling thread, the information associated with the previous message + /// may no longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerFramePenInfoHistory to retrieve the message history (including coalesced input + /// frames) from the most recent WM_POINTERUPDATE message. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to skip + /// remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. However, the SkipPointerFrameMessages function should be used + /// with care and only when the caller can be sure that no other entity on the caller’s thread is expecting to see the remaining + /// pointer messages one by one as they are retrieved. + /// + /// The frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// The information retrieved represents a two-dimensional array with one row for each history entry and one column for each pointer + /// in the frame. + /// + /// + /// The information retrieved appears in reverse chronological order, with the most recent entry in the first row of the returned + /// array. The most recent entry is the same as that returned by the GetPointerFramePenInfo function. + /// + /// + /// If the count of rows in the buffer provided is insufficient to hold all available history entries, this function succeeds with + /// the buffer containing the most recent entries and *entriesCount containing the total count of entries available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// If the specified pointer is not of type PT_PEN, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + /// For apps that have both client and non-client areas, the input frame can include both client and non-client data. To + /// differentiate between client and non-client data, you must perform hit testing on the target window. + /// + /// We recommend the following if you want to filter data from the input frame: + /// + /// + /// + /// For each update that does not include a pointer contact (a POINTER_FLAG_UPDATE without POINTER_FLAG_INCONTACT), hit test + /// to determine if the input is client or non-client. + /// + /// + /// + /// For each new contact (POINTER_FLAG_DOWN), hit test to determine if the input is client or non-client and track this info. + /// + /// + /// + /// For each update that includes a pointer contact (a POINTER_FLAG_UPDATE with POINTER_FLAG_INCONTACT), use the tracking info + /// to determine whether the input is client or non-client. + /// + /// + /// + /// + /// For each POINTER_FLAG_UP, use the tracking info to determine whether the input is client or non-client and then clear this + /// pointer from the tracking data. + /// + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerframepeninfohistory BOOL + // GetPointerFramePenInfoHistory( UINT32 pointerId, UINT32 *entriesCount, UINT32 *pointerCount, POINTER_PEN_INFO *penInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "a4f6a9f3-dfbd-4413-aae7-f58e1521ef1d")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerFramePenInfoHistory(uint pointerId, ref uint entriesCount, ref uint pointerCount, [In, Out] POINTER_PEN_INFO[,] penInfo); + + /// + /// Gets the entire frame of touch-based information for the specified pointers (of type PT_TOUCH) associated with the current message. + /// + /// An identifier of the pointer for which to retrieve frame information. + /// + /// A pointer to a variable that specifies the count of structures in the buffer to which touchInfo points. If + /// GetPointerFrameTouchInfo succeeds, pointerCount is updated with the total count of pointers in the frame. + /// + /// + /// Address of an array of POINTER_TOUCH_INFO structures to receive the pointer information. This parameter can be NULL if + /// *pointerCount is zero. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// GetPointerFrameTouchInfo retrieves the entire pointer input frame associated with a pointer (of type PT_TOUCH) message. + /// Use GetPointerTouchInfo to retrieve information for a single pointer associated with a pointer message. + /// + /// The frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// The information returned by GetPointerFrameTouchInfo is associated with the most recent pointer message retrieved by the + /// calling thread. When the next message is retrieved by the calling thread, the information associated with the previous message + /// may no longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerFrameTouchInfoHistory to retrieve the message history from the most recent + /// WM_POINTERUPDATE message. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to skip + /// remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. However, the SkipPointerFrameMessages function should be used + /// with care and only when the caller can be sure that no other entity on the caller’s thread is expecting to see the remaining + /// pointer messages one by one as they are retrieved. + /// + /// + /// Note that the information retrieved is associated with the pointer frame most recently retrieved by the calling thread. Once the + /// calling thread retrieves its next message, the information associated with the previous pointer frame may no longer be available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window to which the pointer message has been delivered, this function fails with the last + /// error set to ERROR_ACCESS_DENIED. + /// + /// If the specified pointer is not of type PT_TOUCH, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + /// For apps that have both client and non-client areas, the input frame can include both client and non-client data. To + /// differentiate between client and non-client data, you must perform hit testing on the target window. + /// + /// We recommend the following if you want to filter data from the input frame: + /// + /// + /// + /// For each update that does not include a pointer contact (a POINTER_FLAG_UPDATE without POINTER_FLAG_INCONTACT), hit test + /// to determine if the input is client or non-client. + /// + /// + /// + /// For each new contact (POINTER_FLAG_DOWN), hit test to determine if the input is client or non-client and track this info. + /// + /// + /// + /// For each update that includes a pointer contact (a POINTER_FLAG_UPDATE with POINTER_FLAG_INCONTACT), use the tracking info + /// to determine whether the input is client or non-client. + /// + /// + /// + /// + /// For each POINTER_FLAG_UP, use the tracking info to determine whether the input is client or non-client and then clear this + /// pointer from the tracking data. + /// + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerframetouchinfo BOOL GetPointerFrameTouchInfo( + // UINT32 pointerId, UINT32 *pointerCount, POINTER_TOUCH_INFO *touchInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "a100cc7a-62fc-4ace-8d35-e77aff98d944")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerFrameTouchInfo(uint pointerId, ref uint pointerCount, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] POINTER_TOUCH_INFO[] touchInfo); + + /// + /// Gets the entire frame of touch-based information (including coalesced input frames) for the specified pointers (of type PT_TOUCH) + /// associated with the current message. + /// + /// An identifier of the pointer for which to retrieve frame information. + /// + /// A pointer to variable that specifies the count of rows in the two-dimensional array to which touchInfo points. If + /// GetPointerFrameTouchInfoHistory succeeds, entriesCount is updated with the total count of frames available in the history. + /// + /// + /// A pointer to a variable that specifies the count of columns in the two-dimensional array to which touchInfo points. If + /// GetPointerFrameTouchInfoHistory succeeds, pointerCount is updated with the total count of pointers in each frame. + /// + /// + /// + /// Address of a two-dimensional array of POINTER_TOUCH_INFO structures to receive the pointer information. This parameter can be + /// NULL if *entriesCount and *pointerCount are both zero. + /// + /// This array is interpreted as . + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// The information returned by GetPointerFrameTouchInfo is associated with the most recent pointer (PT_TOUCH) message retrieved by + /// the calling thread. When the next message is retrieved by the calling thread, the information associated with the previous + /// message may no longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerFrameTouchInfoHistory to retrieve the message history (including coalesced input + /// frames) from the most recent WM_POINTERUPDATE message. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to skip + /// remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. However, the SkipPointerFrameMessages function should be used + /// with care and only when the caller can be sure that no other entity on the caller’s thread is expecting to see the remaining + /// pointer messages one by one as they are retrieved. + /// + /// The frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// The information retrieved represents a two-dimensional array with one row for each history entry and one column for each pointer + /// in the frame. + /// + /// + /// The information retrieved appears in reverse chronological order, with the most recent entry in the first row of the returned + /// array. The most recent entry is the same as that returned by the GetPointerFrameTouchInfo function. + /// + /// + /// If the count of rows in the buffer provided is insufficient to hold all available history entries, this function succeeds with + /// the buffer containing the most recent entries and *entriesCount containing the total count of entries available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// If the specified pointer is not of type PT_TOUCH, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + /// For apps that have both client and non-client areas, the input frame can include both client and non-client data. To + /// differentiate between client and non-client data, you must perform hit testing on the target window. + /// + /// We recommend the following if you want to filter data from the input frame: + /// + /// + /// + /// For each update that does not include a pointer contact (a POINTER_FLAG_UPDATE without POINTER_FLAG_INCONTACT), hit test + /// to determine if the input is client or non-client. + /// + /// + /// + /// For each new contact (POINTER_FLAG_DOWN), hit test to determine if the input is client or non-client and track this info. + /// + /// + /// + /// For each update that includes a pointer contact (a POINTER_FLAG_UPDATE with POINTER_FLAG_INCONTACT), use the tracking info + /// to determine whether the input is client or non-client. + /// + /// + /// + /// + /// For each POINTER_FLAG_UP, use the tracking info to determine whether the input is client or non-client and then clear this + /// pointer from the tracking data. + /// + /// + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerframetouchinfohistory BOOL + // GetPointerFrameTouchInfoHistory( UINT32 pointerId, UINT32 *entriesCount, UINT32 *pointerCount, POINTER_TOUCH_INFO *touchInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "f2521a67-9850-46e9-bc8b-75bf5b6cc263")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerFrameTouchInfoHistory(uint pointerId, ref uint entriesCount, ref uint pointerCount, [In, Out] POINTER_TOUCH_INFO[,] touchInfo); + + /// + /// Gets the information for the specified pointer associated with the current message. + /// Note Use GetPointerType if you don't need the additional information exposed by GetPointerInfo. + /// + /// The pointer identifier. + /// Address of a POINTER_INFO structure that receives the pointer information. + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// GetPointerInfo retrieves information for a single pointer associated with a pointer message. + /// Use GetPointerFrameInfo to retrieve frame information associated with a message for a set of pointers. + /// + /// The information returned by GetPointerInfo is associated with the most recent pointer message retrieved by the calling + /// thread. When the next message is retrieved by the calling thread, the information associated with the previous message may no + /// longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerInfoHistory to retrieve the message history from the most recent WM_POINTERUPDATE message. + /// + /// + /// If the information associated with the message is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window to which the pointer message has been delivered, this function fails with the last + /// error set to ERROR_ACCESS_DENIED. Note that this may be the window to which the input was originally delivered or it may + /// be a window to which the message was forwarded. + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerinfo BOOL GetPointerInfo( UINT32 pointerId, + // POINTER_INFO *pointerInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "75faea24-91cd-448b-b67a-19fe530f1800")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerInfo(uint pointerId, ref POINTER_INFO pointerInfo); + + /// + /// Gets the information associated with the individual inputs, if any, that were coalesced into the current message for the + /// specified pointer. The most recent input is included in the returned history and is the same as the most recent input returned by + /// the GetPointerInfo function. + /// + /// An identifier of the pointer for which to retrieve information. + /// + /// A pointer to a variable that specifies the count of structures in the buffer to which pointerInfo points. If + /// GetPointerInfoHistory succceeds, entriesCount is updated with the total count of structures available. The total count of + /// structures available is the same as the historyCount field of the POINTER_INFO structure returned by a call to GetPointerInfo. + /// + /// + /// Address of an array of POINTER_INFO structures to receive the pointer information. This parameter can be NULL if *entriesCount is zero. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some moves may be coalesced. When an + /// application receives a coalescable pointer message, it can use the GetPointerInfoHistory function to retrieve information + /// for all the individual inputs, if any, that were coalesced into the message. Note that the information retrieved is associated + /// with the pointer message most recently retrieved by the calling thread. Once the calling thread retrieves its next message, the + /// information associated with the previous message may no longer be available. + /// + /// + /// The information retrieved appears in reverse chronological order, with the most recent entry in the first row of the returned + /// array. The most recent entry is the same as that returned by the GetPointerInfo function. + /// + /// + /// If the count of rows in the buffer provided is insufficient to hold all available history entries, this function succeeds with + /// the buffer containing the most recent entries and *entriesCount containing the total count of entries available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerinfohistory BOOL GetPointerInfoHistory( UINT32 + // pointerId, UINT32 *entriesCount, POINTER_INFO *pointerInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "92173197-45e8-4ee7-8959-2f14f90c2d21")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerInfoHistory(uint pointerId, ref uint entriesCount, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] POINTER_INFO[] pointerInfo); + + /// Gets one or more transforms for the pointer information coordinates associated with the current message. + /// An identifier of the pointer for which to retrieve information. + /// + /// The number of INPUT_TRANSFORM structures that inputTransform can point to. + /// + /// This value must be no less than 1 and no greater than the value specified in historyCount of the POINTER_INFO structure + /// returned by GetPointerInfo, GetPointerTouchInfo, or GetPointerPenInfo (for a single input transform) or GetPointerInfoHistory, + /// GetPointerTouchInfoHistory, or GetPointerPenInfoHistory (for an array of input transforms). + /// + /// + /// If GetPointerInputTransform succeeds, inputTransform is updated with the total count of structures available. The total + /// count of structures available is the same as the historyCount field of the POINTER_INFO structure. + /// + /// + /// + /// Address of an array of INPUT_TRANSFORM structures to receive the transform information. This parameter cannot be NULL. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// A consumer of pointer input messages typically uses ScreenToClient or MapWindowPoints to convert screen coordinates to client coordinates. + /// + /// + /// If a transform is applied on the message consumer, use GetPointerInputTransform to retrieve the transform on the message + /// consumer at the time the input occurred. The inverse of this transform can then be used to convert pointer input coordinates from + /// screen coordinates to the client coordinates of the message consumer. + /// + /// + /// If an input transform is not associated with the input, the GetPointerInputTransform function fails with the last error + /// set to ERROR_NO_DATA. Use ScreenToClient or MapWindowPoints instead. + /// + /// + /// The input transform does not respect any right-to-left layout setting on the input target. An application that requires adjusted + /// coordinates for right-to-left layout must perform the right-to-left mirroring or combine an appropriate mirroring transform with + /// the input transform. + /// + /// + /// The information returned by GetPointerInputTransform is associated with the most recent pointer message retrieved by the + /// calling thread. When the next message is retrieved by the calling thread, the information associated with the previous message + /// might no longer be available. + /// + /// + /// If an application calls GetPointerInfo, it can call GetPointerInputTransform with the same pointer Id and a single + /// INPUT_TRANSFORM output buffer to get the input transform associated with the data. + /// + /// + /// If an application calls GetPointerFrameInfo, it can call GetPointerInputTransform with the same pointer Id and a single + /// INPUT_TRANSFORM output buffer to get the input transform associated with the data. The same input transform applies to the entire frame. + /// + /// + /// If an application calls GetPointerInfoHistory, it can call GetPointerInputTransform with the same pointer Id and an output + /// buffer to hold the entries retrieved using GetPointerInfoHistory. Each input transform in the returned array can be used + /// with the corresponding entry in the array returned by GetPointerInfoHistory. + /// + /// + /// If an application calls GetPointerFrameInfoHistory, it can call GetPointerInputTransform with the same pointer Id and an + /// output buffer to hold the entries retrieved using GetPointerInfoHistory. Each input transform in the returned array can be used + /// with the corresponding frame in the array returned by GetPointerFrameInfoHistory, with the same input transform being + /// applied to the entire frame. + /// + /// + /// If the information associated with the message is no longer available, this function fails with the last error set to ERROR_INVALID_PARAMETER. + /// + /// + /// If historyCount contains a value larger than the historyCount field of the POINTER_INFO structure returned by + /// GetPointerInfo (or the first POINTER_INFO structure in the array returned by GetPointerInfoHistory), the function fails + /// with the last error set to ERROR_INVALID_PARAMETER. + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerinputtransform BOOL GetPointerInputTransform( + // UINT32 pointerId, UINT32 historyCount, INPUT_TRANSFORM *inputTransform ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "9F10ED61-90E3-441B-8F4D-E33DA54D473C")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerInputTransform(uint pointerId, uint historyCount, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] INPUT_TRANSFORM[] inputTransform); + + /// Gets the pen-based information for the specified pointer (of type PT_PEN) associated with the current message. + /// An identifier of the pointer for which to retrieve information. + /// Address of a POINTER_PEN_INFO structure to receive the pen-specific pointer information. + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// GetPointerPenInfo retrieves information for a single pointer (of type PT_PEN) associated with a pointer message. + /// Use GetPointerFramePenInfo to retrieve frame information associated with a message for a set of pointers. + /// + /// The information returned by GetPointerInfo is associated with the most recent pointer message retrieved by the calling thread. + /// When the next message is retrieved by the calling thread, the information associated with the previous message may no longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerPenInfoHistory to retrieve the message history from the most recent + /// WM_POINTERUPDATE message. + /// + /// + /// If the information associated with the message is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window to which the pointer message has been delivered, this function fails with the last + /// error set to ERROR_ACCESS_DENIED. Note that this may be the window to which the input was originally delivered or it may + /// be a window to which the message was forwarded. + /// + /// If the specified pointer is not of type PT_PEN, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerpeninfo BOOL GetPointerPenInfo( UINT32 + // pointerId, POINTER_PEN_INFO *penInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "5f1f7252-a4aa-4b06-94c9-2aa365cf0100")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerPenInfo(uint pointerId, out POINTER_PEN_INFO penInfo); + + /// + /// Gets the pen-based information associated with the individual inputs, if any, that were coalesced into the current message for + /// the specified pointer (of type PT_PEN). The most recent input is included in the returned history and is the same as the most + /// recent input returned by the GetPointerPenInfo function. + /// + /// An identifier of the pointer for which to retrieve information. + /// + /// A pointer to a variable that specifies the count of structures in the buffer to which penInfo points. If + /// GetPointerPenInfoHistory succeeds, entriesCount is updated with the total count of structures available. The total count + /// of structures available is the same as the historyCount field in the POINTER_PEN_INFO structure returned by a call to GetPointerPenInfo. + /// + /// + /// Address of an array of POINTER_PEN_INFO structures to receive the pointer information. This parameter can be NULL if + /// *entriesCount is zero. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some moves may be coalesced. When an + /// application receives a coalescable pointer (of type PT_PEN) message, it can use the GetPointerPenInfoHistory function to + /// retrieve information for all the individual inputs, if any, that were coalesced into the message. Note that the information + /// retrieved is associated with the pointer message most recently retrieved by the calling thread. Once the calling thread retrieves + /// its next message, the information associated with the previous message may no longer be available. + /// + /// + /// The information retrieved appears in reverse chronological order, with the most recent entry in the first row of the returned + /// array. The most recent entry is the same as that returned by the GetPointerPenInfo function. + /// + /// + /// If the count of rows in the buffer provided is insufficient to hold all available history entries, this function succeeds with + /// the buffer containing the most recent entries and *entriesCount containing the total count of entries available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// If the specified pointer is not of type PT_PEN, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointerpeninfohistory BOOL GetPointerPenInfoHistory( + // UINT32 pointerId, UINT32 *entriesCount, POINTER_PEN_INFO *penInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "90082327-b242-4f5d-8cd7-fd8ef9340395")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerPenInfoHistory(uint pointerId, ref uint entriesCount, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] POINTER_PEN_INFO[] penInfo); + + /// Gets the touch-based information for the specified pointer (of type PT_TOUCH) associated with the current message. + /// An identifier of the pointer for which to retrieve information. + /// Address of a POINTER_TOUCH_INFO structure to receive the touch-specific pointer information. + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// GetPointerTouchInfo retrieves information for a single pointer (of type PT_TOUCH) associated with a pointer message. + /// Use GetPointerFrameTouchInfo to retrieve frame information associated with a message for a set of pointers. + /// + /// The information returned by GetPointerTouchInfo is associated with the most recent pointer message retrieved by the + /// calling thread. When the next message is retrieved by the calling thread, the information associated with the previous message + /// may no longer be available. + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some messages may be coalesced into a + /// WM_POINTERUPDATE message. Use GetPointerTouchInfoHistory to retrieve the message history from the most recent + /// WM_POINTERUPDATE message. + /// + /// + /// If the information associated with the message is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window to which the pointer message has been delivered, this function fails with the last + /// error set to ERROR_ACCESS_DENIED. Note that this may be the window to which the input was originally delivered or it may + /// be a window to which the message was forwarded. + /// + /// If the specified pointer is not of type PT_TOUCH, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointertouchinfo BOOL GetPointerTouchInfo( UINT32 + // pointerId, POINTER_TOUCH_INFO *touchInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "97d93754-fc7e-4400-a6ee-6bab53e421cf")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerTouchInfo(uint pointerId, out POINTER_TOUCH_INFO touchInfo); + + /// + /// Gets the touch-based information associated with the individual inputs, if any, that were coalesced into the current message for + /// the specified pointer (of type PT_TOUCH). The most recent input is included in the returned history and is the same as the most + /// recent input returned by the GetPointerTouchInfo function. + /// + /// An identifier of the pointer for which to retrieve information. + /// + /// A pointer to a variable that specifies the count of structures in the buffer to which touchInfo points. If + /// GetPointerTouchInfoHistory succeeds, entriesCount is updated with the total count of structures available. The total count + /// of structures available is the same as the historyCount field in the POINTER_INFO structure returned by a call to GetPointerInfo + /// or GetPointerTouchInfo. + /// + /// + /// Address of an array of POINTER_TOUCH_INFO structures to receive the pointer information. This parameter can be NULL if + /// *entriesCount is zero. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// If the application does not process pointer input messages as fast as they are generated, some moves may be coalesced. When an + /// application receives a coalescable pointer (of type PT_TOUCH) message, it can use the GetPointerTouchInfoHistory function + /// to retrieve information for all the individual inputs, if any, that were coalesced into the message. Note that the information + /// retrieved is associated with the pointer message most recently retrieved by the calling thread. Once the calling thread retrieves + /// its next message, the information associated with the previous message may no longer be available. + /// + /// + /// The information retrieved appears in reverse chronological order, with the most recent entry in the first row of the returned + /// array. The most recent entry is the same as that returned by the GetPointerTouchInfo function. + /// + /// + /// If the count of rows in the buffer provided is insufficient to hold all available history entries, this function succeeds with + /// the buffer containing the most recent entries and *entriesCount containing the total count of entries available. + /// + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds and returns only the + /// information for the specified pointer. + /// + /// + /// If the information associated with the pointer frame is no longer available, this function fails with the last error set to ERROR_NO_DATA. + /// + /// + /// If the calling thread does not own the window (where the input was originally delivered or where the message was forwarded) to + /// which the pointer message has been delivered, this function fails with the last error set to ERROR_ACCESS_DENIED. + /// + /// If the specified pointer is not of type PT_TOUCH, this function fails with the last error set to ERROR_DATATYPE_MISMATCH. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointertouchinfohistory BOOL + // GetPointerTouchInfoHistory( UINT32 pointerId, UINT32 *entriesCount, POINTER_TOUCH_INFO *touchInfo ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "9fdfbde7-4126-4c1b-b870-479f846e1aa9")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerTouchInfoHistory(uint pointerId, ref uint entriesCount, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] POINTER_TOUCH_INFO[] touchInfo); + + /// Retrieves the pointer type for a specified pointer. + /// An identifier of the pointer for which to retrieve pointer type. + /// An address of a POINTER_INPUT_TYPE type to receive a pointer input type. + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// An application can use the GetPointerType function to determine the pointer type if it wishes to react differently to + /// pointers of different types. + /// + /// Note This function will never return with the generic PT_POINTER type. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getpointertype BOOL GetPointerType( UINT32 pointerId, + // POINTER_INPUT_TYPE *pointerType ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "63bfc340-9691-463c-96ca-0a5b80b8fe40")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetPointerType(uint pointerId, out POINTER_INPUT_TYPE pointerType); + + /// Gets pointer data before it has gone through touch prediction processing. + /// The screen location of the pointer input. + /// By default, touch prediction is activated. + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getunpredictedmessagepos DWORD GetUnpredictedMessagePos( ); + [DllImport(Lib.User32, SetLastError = false, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "5BE2748B-0124-4647-A77E-EA2937C7B1AD")] + public static extern uint GetUnpredictedMessagePos(); + + /// + /// Indicates whether EnableMouseInPointer is set for the mouse to act as a pointer input device and send WM_POINTER messages. + /// + /// + /// If EnableMouseInPointer is set, the return value is nonzero. + /// If EnableMouseInPointer is not set, the return value is zero. + /// + /// + /// + /// EnableMouseInPointer can be called only once in the context of a process lifetime. Prior to the first call, Windows Store apps + /// run with mouse-in-pointer enabled, as do any desktop applications that consume mshtml.dll. All other desktop applications run + /// with mouse-in-pointer disabled. + /// + /// On the first call to EnableMouseInPointer in the process lifetime, the state is changed as specified and the call succeeds. + /// + /// On subsequent calls to EnableMouseInPointer, the state will not change. If the current state is not equal to the specified state, + /// the call fails. + /// + /// Call IsMouseInPointerEnabled to verify the mouse-in-pointer state. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-ismouseinpointerenabled BOOL IsMouseInPointerEnabled( ); + [DllImport(Lib.User32, SetLastError = false, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "5D493066-2425-4610-8489-575BF25C8C16")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool IsMouseInPointerEnabled(); + + /// + /// Determines which pointer input frame generated the most recently retrieved message for the specified pointer and discards any + /// queued (unretrieved) pointer input messages generated from the same pointer input frame. If an application has retrieved + /// information for an entire frame using the GetPointerFrameInfo function, the GetPointerFrameInfoHistory function or one of their + /// type-specific variants, it can use this function to avoid retrieving and discarding remaining messages from that frame one by one. + /// + /// + /// Identifier of the pointer. Pending messages will be skipped for the frame that includes the most recently retrieved input for + /// this pointer. + /// + /// + /// If the function succeeds, the return value is non-zero. + /// If the function fails, the return value is zero. To get extended error information, call GetLastError. + /// + /// + /// + /// Parallel-mode devices may report pointer input in frames, that is, they may report the state and position of all pointers from + /// that device in a single input report to the system. Ideally, applications should view the entire frame as a single input unless + /// the application-specific requirements dictate otherwise. + /// + /// + /// The SkipPointerFrameMessages function can be used in conjunction with the GetPointerFrameInfo function (or one of its + /// type-specific variants) to consume entire frames as a single input. + /// + /// + /// When an application sees a pointer message, it can use the GetPointerFrameInfo function to retrieve the entire pointer input + /// frame to which the pointer message belongs, hence obtaining an updated view of all of the pointers currently owned by the window. + /// Note that the returned frame contains only pointers that are currently owned by the same window as the specified pointer. + /// + /// + /// Having retrieved the entire frame of information, the application can then call the SkipPointerFrameMessages function to + /// skip remaining pointer messages associated with this frame that are pending retrieval. This saves the application the overhead of + /// retrieving and processing the remaining messages one by one. + /// + /// + /// Warning The SkipPointerFrameMessages function should be used only when the caller can be sure that no other entity + /// on the caller’s thread (such as Direct Manipulation) is expecting to retrieve pending pointer messages. For this reason, + /// SkipPointerFrameMessages should not be used in conjunction with Direct Manipulation when processing multiple, simultaneous interactions. + /// + /// + /// Note that the information retrieved is associated with the pointer frame most recently retrieved by the calling thread. Once the + /// calling thread retrieves its next message, the information associated with the previous pointer frame may no longer be available. + /// + /// If the pointer frame contains no additional pointers besides the specified pointer, this function succeeds with no action. + /// + /// If the calling thread does not own the window to which the pointer message has been delivered, this function fails with the last + /// error set to ERROR_ACCESS_DENIED. + /// + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-skippointerframemessages BOOL SkipPointerFrameMessages( + // UINT32 pointerId ); + [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] + [PInvokeData("winuser.h", MSDNShortId = "d67f8d44-3e19-4523-a0f3-38f09f5df91f")] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SkipPointerFrameMessages(uint pointerId); + + /// + /// Defines the matrix that represents a transform on a message consumer. This matrix can be used to transform pointer input data + /// from client coordinates to screen coordinates, while the inverse can be used to transform pointer input data from screen + /// coordinates to client coordinates. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-taginput_transform typedef struct tagINPUT_TRANSFORM { + // union { struct { float _11; float _12; float _13; float _14; float _21; float _22; float _23; float _24; float _31; float _32; + // float _33; float _34; float _41; float _42; float _43; float _44; } DUMMYSTRUCTNAME; float m[4]; } DUMMYUNIONNAME; } INPUT_TRANSFORM; + [PInvokeData("winuser.h", MSDNShortId = "DE6854F0-17D8-4E4B-97CB-A135910A300C")] + [StructLayout(LayoutKind.Sequential)] + public struct INPUT_TRANSFORM + { + /// Undocumented. + public float _11, _12, _13, _14; + + /// Undocumented. + public float _21, _22, _23, _24; + + /// Undocumented. + public float _31, _32, _33, _34; + + /// Undocumented. + public float _41, _42, _43, _44; + + /// Undocumented. + public float[,] m + { + get => new float[4, 4] { { _11, _12, _13, _14 }, { 21, _22, _23, _24 }, { _31, _32, _33, _34 }, { _41, _42, _43, _44 } }; + set + { + if (value is null) throw new ArgumentNullException(nameof(m)); + if (value.Rank != 2 || value.GetLength(0) != 4 || value.GetLength(1) != 4) throw new ArgumentOutOfRangeException(nameof(m), "Must be a 4x4 two-dimensional array."); + unsafe + { + fixed (float* ptr = &_11) + { + for (var i = 0; i < 4; i++) + { + for (var j = 0; j < 4; j++) + { + *(ptr + (i * 4) + j) = value[i, j]; + } + } + } + } + } + } + } + + /// + /// Contains basic pointer information common to all pointer types. Applications can retrieve this information using the + /// GetPointerInfo, GetPointerFrameInfo, GetPointerInfoHistory and GetPointerFrameInfoHistory functions. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagpointer_info typedef struct tagPOINTER_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; } POINTER_INFO; + [PInvokeData("winuser.h", MSDNShortId = "fee176ba-ad07-4145-0b4d-1b8c335fd102")] + [StructLayout(LayoutKind.Sequential)] + public struct POINTER_INFO + { + /// + /// Type: POINTER_INPUT_TYPE + /// A value from the POINTER_INPUT_TYPE enumeration that specifies the pointer type. + /// + public POINTER_INPUT_TYPE pointerType; + + /// + /// Type: UINT32 + /// + /// An identifier that uniquely identifies a pointer during its lifetime. A pointer comes into existence when it is first + /// detected and ends its existence when it goes out of detection range. Note that if a physical entity (finger or pen) goes out + /// of detection range and then returns to be detected again, it is treated as a new pointer and may be assigned a new pointer identifier. + /// + /// + public uint pointerId; + + /// + /// Type: UINT32 + /// + /// An identifier common to multiple pointers for which the source device reported an update in a single input frame. For + /// example, a parallel-mode multi-touch digitizer may report the positions of multiple touch contacts in a single update to the system. + /// + /// + /// Note that frame identifier is assigned as input is reported to the system for all pointers across all devices. Therefore, + /// this field may not contain strictly sequential values in a single series of messages that a window receives. However, this + /// field will contain the same numerical value for all input updates that were reported in the same input frame by a single device. + /// + /// + public uint frameId; + + /// + /// Type: POINTER_FLAGS + /// May be any reasonable combination of flags from the Pointer Flags constants. + /// + public POINTER_FLAGS pointerFlags; + + /// + /// Type: HANDLE + /// Handle to the source device that can be used in calls to the raw input device API and the digitizer device API. + /// + public HANDLE sourceDevice; + + /// + /// Type: HWND + /// + /// Window to which this message was targeted. If the pointer is captured, either implicitly by virtue of having made contact + /// over this window or explicitly using the pointer capture API, this is the capture window. If the pointer is uncaptured, this + /// is the window over which the pointer was when this message was generated. + /// + /// + public HWND hwndTarget; + + /// + /// Type: POINT + /// The predicted screen coordinates of the pointer, in pixels. + /// + /// The predicted value is based on the pointer position reported by the digitizer and the motion of the pointer. This correction + /// can compensate for visual lag due to inherent delays in sensing and processing the pointer location on the digitizer. This is + /// applicable to pointers of type PT_TOUCH. For other pointer types, the predicted value will be the same as the non-predicted + /// value (see ptPixelLocationRaw). + /// + /// + public System.Drawing.Point ptPixelLocation; + + /// + /// Type: POINT + /// The predicted screen coordinates of the pointer, in HIMETRIC units. + /// + /// The predicted value is based on the pointer position reported by the digitizer and the motion of the pointer. This correction + /// can compensate for visual lag due to inherent delays in sensing and processing the pointer location on the digitizer. This is + /// applicable to pointers of type PT_TOUCH. For other pointer types, the predicted value will be the same as the non-predicted + /// value (see ptHimetricLocationRaw). + /// + /// + public System.Drawing.Point ptHimetricLocation; + + /// + /// Type: POINT + /// The screen coordinates of the pointer, in pixels. For adjusted screen coordinates, see ptPixelLocation. + /// + public System.Drawing.Point ptPixelLocationRaw; + + /// + /// Type: POINT + /// The screen coordinates of the pointer, in HIMETRIC units. For adjusted screen coordinates, see ptHimetricLocation. + /// + public System.Drawing.Point ptHimetricLocationRaw; + + /// + /// Type: DWORD + /// 0 or the time stamp of the message, based on the system tick count when the message was received. + /// + /// The application can specify the input time stamp in either dwTime or PerformanceCount. The value cannot be more + /// recent than the current tick count or QueryPerformanceCount (QPC) value of the injection thread. Once a frame is + /// injected with a time stamp, all subsequent frames must include a timestamp until all contacts in the frame go to an UP state. + /// The custom timestamp value must also be provided for the first element in the contacts array. The time stamp values after the + /// first element are ignored. The custom timestamp value must increment in every injection frame. + /// + /// + /// When PerformanceCount is specified, the time stamp will be converted to the current time in .1 millisecond resolution + /// upon actual injection. If a custom PerformanceCount resulted in the same .1 millisecond window from the previous + /// injection, ERROR_NOT_READY is returned and injection will not occur. While injection will not be invalidated + /// immediately by the error, the next successful injection must have a PerformanceCount value that is at least 0.1 + /// millisecond from the previously successful injection. This is also true if dwTime is used. + /// + /// If both dwTime and PerformanceCount are specified in InjectTouchInput, ERROR_INVALID_PARAMETER is returned. + /// InjectTouchInput cannot switch between dwTime and PerformanceCount once injection has started. + /// + /// If neither dwTime and PerformanceCount are specified, InjectTouchInput allocates the timestamp based on the + /// timing of the call. If InjectTouchInput calls are repeatedly less than 0.1 millisecond apart, ERROR_NOT_READY might be + /// returned. The error will not invalidate the input immediately, but the injection application needs to retry the same frame + /// again for injection to succeed. + /// + /// + public uint dwTime; + + /// + /// Type: UINT32 + /// + /// Count of inputs that were coalesced into this message. This count matches the total count of entries that can be returned by + /// a call to GetPointerInfoHistory. If no coalescing occurred, this count is 1 for the single input represented by the message. + /// + /// + public uint historyCount; + + /// The input data + public int InputData; + + /// + /// Type: DWORD + /// + /// Indicates which keyboard modifier keys were pressed at the time the input was generated. May be zero or a combination of the + /// following values. + /// + /// POINTER_MOD_SHIFT – A SHIFT key was pressed. + /// POINTER_MOD_CTRL – A CTRL key was pressed. + /// + public uint dwKeyStates; + + /// + /// Type: UINT64 + /// + /// The value of the high-resolution performance counter when the pointer message was received (high-precision, 64 bit + /// alternative to dwTime). The value can be calibrated when the touch digitizer hardware supports the scan timestamp + /// information in its input report. + /// + /// + public ulong PerformanceCount; + + /// + /// Type: POINTER_BUTTON_CHANGE_TYPE + /// + /// A value from the POINTER_BUTTON_CHANGE_TYPE enumeration that specifies the change in button state between this input and the + /// previous input. + /// + /// + public POINTER_BUTTON_CHANGE_TYPE ButtonChangeType; + } + + /// Defines basic pen information common to all pointer types. + /// + /// Applications can retrieve this information using the GetPointerPenInfo, GetPointerFramePenInfo, GetPointerPenInfoHistory and + /// GetPointerFramePenInfoHistory API functions. + /// + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagpointer_pen_info typedef struct tagPOINTER_PEN_INFO { + // POINTER_INFO pointerInfo; PEN_FLAGS penFlags; PEN_MASK penMask; UINT32 pressure; UINT32 rotation; INT32 tiltX; INT32 tiltY; } POINTER_PEN_INFO; + [PInvokeData("winuser.h", MSDNShortId = "fee176ba-ad07-4141-ab4d-1b8c335fd111")] + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct POINTER_PEN_INFO + { + /// + /// Type: POINTER_INFO + /// An embedded POINTER_INFO structure. + /// + public POINTER_INFO pointerInfo; + + /// + /// Type: PEN_FLAGS + /// The pen flag. This member can be zero or any reasonable combination of the values from the Pen Flags constants. + /// + public PEN_FLAGS penFlags; + + /// + /// Type: PEN_MASK + /// The pen mask. This member can be zero or any reasonable combination of the values from the Pen Mask constants. + /// + public PEN_MASK penMask; + + /// + /// Type: UINT32 + /// A pen pressure normalized to a range between 0 and 1024. The default is 0 if the device does not report pressure. + /// + public uint pressure; + + /// + /// Type: UINT32 + /// The clockwise rotation, or twist, of the pointer normalized in a range of 0 to 359. The default is 0. + /// + public uint rotation; + + /// + /// Type: INT32 + /// + /// The angle of tilt of the pointer along the x-axis in a range of -90 to +90, with a positive value indicating a tilt to the + /// right. The default is 0. + /// + /// + public int tiltX; + + /// + /// Type: INT32 + /// + /// The angle of tilt of the pointer along the y-axis in a range of -90 to +90, with a positive value indicating a tilt toward + /// the user. The default is 0. + /// + /// + public int tiltY; + } + + /// Defines basic touch information common to all pointer types. + // https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagpointer_touch_info typedef struct tagPOINTER_TOUCH_INFO + // { POINTER_INFO pointerInfo; TOUCH_FLAGS touchFlags; TOUCH_MASK touchMask; RECT rcContact; RECT rcContactRaw; UINT32 orientation; + // UINT32 pressure; } POINTER_TOUCH_INFO; + [PInvokeData("winuser.h", MSDNShortId = "fee176ba-ad07-3141-ab4d-1b8c335fd102")] + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct POINTER_TOUCH_INFO + { + /// + /// Type: POINTER_INFO + /// An embedded POINTER_INFO header structure. + /// + public POINTER_INFO pointerInfo; + + /// + /// Type: Touch Flags + /// Currently none. + /// + public TOUCH_FLAGS touchFlags; + + /// + /// Type: Touch Mask + /// + /// Indicates which of the optional fields contain valid values. The member can be zero or any combination of the values from the + /// Touch Mask constants. + /// + /// + public TOUCH_MASK touchMask; + + /// + /// Type: RECT + /// + /// The predicted screen coordinates of the contact area, in pixels. By default, if the device does not report a contact area, + /// this field defaults to a 0-by-0 rectangle centered around the pointer location. + /// + /// + /// The predicted value is based on the pointer position reported by the digitizer and the motion of the pointer. This correction + /// can compensate for visual lag due to inherent delays in sensing and processing the pointer location on the digitizer. This is + /// applicable to pointers of type PT_TOUCH. + /// + /// + public RECT rcContact; + + /// + /// Type: RECT + /// The raw screen coordinates of the contact area, in pixels. For adjusted screen coordinates, see rcContact. + /// + public RECT rcContactRaw; + + /// + /// Type: UINT32 + /// + /// A pointer orientation, with a value between 0 and 359, where 0 indicates a touch pointer aligned with the x-axis and pointing + /// from left to right; increasing values indicate degrees of rotation in the clockwise direction. + /// + /// This field defaults to 0 if the device does not report orientation. + /// + public uint orientation; + + /// + /// Type: UINT32 + /// A pen pressure normalized to a range between 0 and 1024. The default is 0 if the device does not report pressure. + /// + public uint pressure; + } + + /* + GET_POINTERID_WPARAM macro + HAS_POINTER_CONFIDENCE_WPARAM macro + IS_POINTER_CANCELED_WPARAM macro + IS_POINTER_FIFTHBUTTON_WPARAM macro + IS_POINTER_FIRSTBUTTON_WPARAM macro + IS_POINTER_FLAG_SET_WPARAM macro + IS_POINTER_FOURTHBUTTON_WPARAM macro + IS_POINTER_INCONTACT_WPARAM macro + IS_POINTER_INRANGE_WPARAM macro + IS_POINTER_NEW_WPARAM macro + IS_POINTER_SECONDBUTTON_WPARAM macro + IS_POINTER_THIRDBUTTON_WPARAM macro + */ + } +} \ No newline at end of file diff --git a/README.md b/README.md index 1352a3a2..22266a63 100644 --- a/README.md +++ b/README.md @@ -56,15 +56,15 @@ Kernel32.dll and KernelBase.dll | [Vanara.PInvoke.Kernel32](https://github.com/d Mpr.dll | [Vanara.PInvoke.Mpr](https://github.com/dahall/Vanara/blob/master/PInvoke/Mpr/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.Mpr)](https://www.nuget.org/packages/Vanara.PInvoke.Mpr) NetApi32.dll | [Vanara.PInvoke.NetApi32](https://github.com/dahall/Vanara/blob/master/PInvoke/NetApi32/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.NetApi32)](https://www.nuget.org/packages/Vanara.PInvoke.NetApi32) NetListMgr.dll | [Vanara.PInvoke.NetListMgr](https://github.com/dahall/Vanara/blob/master/PInvoke/NetListMgr/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.NetListMgr)](https://www.nuget.org/packages/Vanara.PInvoke.NetListMgr) -NTDSApi.dll | [Vanara.PInvoke.NTDSApi](https://github.com/dahall/Vanara/blob/master/PInvoke/NTDSApi/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-yellow.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.NTDSApi)](https://www.nuget.org/packages/Vanara.PInvoke.NTDSApi) +NTDSApi.dll | [Vanara.PInvoke.NTDSApi](https://github.com/dahall/Vanara/blob/master/PInvoke/NTDSApi/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.NTDSApi)](https://www.nuget.org/packages/Vanara.PInvoke.NTDSApi) NTDll.dll | [Vanara.PInvoke.NTDll](https://github.com/dahall/Vanara/blob/master/PInvoke/NTDll/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/4%25-red.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.NTDll)](https://www.nuget.org/packages/Vanara.PInvoke.NTDll) Ole32.dll, OleAut32 and PropSys.dll | [Vanara.PInvoke.Ole](https://github.com/dahall/Vanara/blob/master/PInvoke/Ole/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/27%25-red.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.Ole)](https://www.nuget.org/packages/Vanara.PInvoke.Ole) AdvApi32.dll, Authz.dll and Secur32.dll | [Vanara.PInvoke.Security](https://github.com/dahall/Vanara/blob/master/PInvoke/Security/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/29%25-red.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.Security)](https://www.nuget.org/packages/Vanara.PInvoke.Security) Shell32.dll | [Vanara.PInvoke.Shell32](https://github.com/dahall/Vanara/blob/master/PInvoke/Shell32/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.Shell32)](https://www.nuget.org/packages/Vanara.PInvoke.Shell32) ShlwApi.dll | [Vanara.PInvoke.ShlwApi](https://github.com/dahall/Vanara/blob/master/PInvoke/ShlwApi/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.ShlwApi)](https://www.nuget.org/packages/Vanara.PInvoke.ShlwApi) TaskSchd.dll and MSTask.dll | [Vanara.PInvoke.TaskSchd](https://github.com/dahall/Vanara/blob/master/PInvoke/TaskSchd/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.TaskSchd)](https://www.nuget.org/packages/Vanara.PInvoke.TaskSchd) -User32.dll | [Vanara.PInvoke.User32](https://github.com/dahall/Vanara/blob/master/PInvoke/User32/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/62%25-yellow.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.User32)](https://www.nuget.org/packages/Vanara.PInvoke.User32) -User32.dll that have GDI references | [Vanara.PInvoke.User32.Gdi](https://github.com/dahall/Vanara/blob/master/PInvoke/User32.Gdi/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/62%25-yellow.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.User32.Gdi)](https://www.nuget.org/packages/Vanara.PInvoke.User32.Gdi) +User32.dll | [Vanara.PInvoke.User32](https://github.com/dahall/Vanara/blob/master/PInvoke/User32/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/75%25-yellow.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.User32)](https://www.nuget.org/packages/Vanara.PInvoke.User32) +User32.dll that have GDI references | [Vanara.PInvoke.User32.Gdi](https://github.com/dahall/Vanara/blob/master/PInvoke/User32.Gdi/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/75%25-yellow.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.User32.Gdi)](https://www.nuget.org/packages/Vanara.PInvoke.User32.Gdi) UxTheme.dll | [Vanara.PInvoke.UxTheme](https://github.com/dahall/Vanara/blob/master/PInvoke/UxTheme/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.UxTheme)](https://www.nuget.org/packages/Vanara.PInvoke.UxTheme) VirtDisk.dll | [Vanara.PInvoke.VirtDisk](https://github.com/dahall/Vanara/blob/master/PInvoke/VirtDisk/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/100%25-green.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.VirtDisk)](https://www.nuget.org/packages/Vanara.PInvoke.VirtDisk) WinINet.dll | [Vanara.PInvoke.WinINet](https://github.com/dahall/Vanara/blob/master/PInvoke/WinINet/CorrelationReport.md) | ![Coverage](https://img.shields.io/badge/8%25-red.svg) | [![NuGet](https://buildstats.info/nuget/Vanara.PInvoke.WinINet)](https://www.nuget.org/packages/Vanara.PInvoke.WinINet)