From 150f549b349874bd4cd5626ba38e38856baf00ab Mon Sep 17 00:00:00 2001
From: Hummel009 <60618853+Hummel009@users.noreply.github.com>
Date: Thu, 18 Jan 2024 22:36:39 +0300
Subject: [PATCH] works
---
appCs/appCs.csproj | 1 +
appCs/src/Program.cs | 21 +-
appCs/src/Wrapper.cs | 49 +-
appCs/src/Wrapper.txt | 2553 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 2590 insertions(+), 34 deletions(-)
create mode 100644 appCs/src/Wrapper.txt
diff --git a/appCs/appCs.csproj b/appCs/appCs.csproj
index 60a17dc..834974a 100644
--- a/appCs/appCs.csproj
+++ b/appCs/appCs.csproj
@@ -6,6 +6,7 @@
appCs
enable
enable
+ true
diff --git a/appCs/src/Program.cs b/appCs/src/Program.cs
index 6107afa..456362f 100644
--- a/appCs/src/Program.cs
+++ b/appCs/src/Program.cs
@@ -38,7 +38,7 @@ public class Program
public const int DEFAULT_CAPACITY = 100;
private static readonly IntPtr field;
private static readonly List? data;
- private static WndProc? delegWndProc;
+ private static WinAPI.WndProc? delegWndProc;
private static readonly int[] FACTORIAL = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600];
@@ -46,12 +46,13 @@ public static void Main(string[] args)
{
var className = "HummelCalculator";
var windowTitle = "WinAPI";
- delegWndProc = MyWndProc;
+ delegWndProc = ParentWndProc;
var windowClass = new WinAPI.WNDCLASSEX
{
+ cbSize = Marshal.SizeOf(),
style = 0,
- lpfnWndProc = Marshal.GetFunctionPointerForDelegate(delegWndProc!),
+ lpfnWndProc = delegWndProc,
cbClsExtra = 0,
cbWndExtra = 0,
hInstance = 0,
@@ -62,10 +63,10 @@ public static void Main(string[] args)
lpszClassName = className
};
- WinAPI.RegisterClassEx(ref windowClass);
+ var atom = WinAPI.RegisterClassEx(ref windowClass);
- var screenWidth = WinAPI.GetSystemMetrics(WinAPI.SystemMetrics.SM_CXSCREEN);
- var screenHeight = WinAPI.GetSystemMetrics(WinAPI.SystemMetrics.SM_CYSCREEN);
+ var screenWidth = WinAPI.GetSystemMetrics(WinAPI.SystemMetric.SM_CXSCREEN);
+ var screenHeight = WinAPI.GetSystemMetrics(WinAPI.SystemMetric.SM_CYSCREEN);
var windowWidth = 260;
var windowHeight = 458;
@@ -73,17 +74,17 @@ public static void Main(string[] args)
var windowX = Math.Max(0, (screenWidth - windowWidth) / 2);
var windowY = Math.Max(0, (screenHeight - windowHeight) / 2);
- var hwnd = WinAPI.CreateWindowEx(0, className, windowTitle, WS_VISIBLE | WS_CAPTION | WS_SYSMENU, 0, 0, windowWidth, windowHeight, 0, 0, 0, 0);
+ WinAPI.CreateWindowEx(0, atom, windowTitle, WS_VISIBLE | WS_CAPTION | WS_SYSMENU, windowX, windowY, windowWidth, windowHeight, 0, 0, 0, 0);
var msg = new WinAPI.MSG();
- while (WinAPI.GetMessage(out msg, 0, 0, 0))
+ while (WinAPI.GetMessage(out msg, 0, 0, 0) != 0)
{
WinAPI.TranslateMessage(ref msg);
WinAPI.DispatchMessage(ref msg);
}
}
- public delegate IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
- private static IntPtr MyWndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
+
+ private static IntPtr ParentWndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
{
return WinAPI.DefWindowProc(hWnd, msg, wParam, lParam);
}
diff --git a/appCs/src/Wrapper.cs b/appCs/src/Wrapper.cs
index 7f7c704..663fd0b 100644
--- a/appCs/src/Wrapper.cs
+++ b/appCs/src/Wrapper.cs
@@ -5,51 +5,52 @@ namespace Hummel
{
public class WinAPI
{
+ public delegate IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
+
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- public class WNDCLASSEX
+ public struct WNDCLASSEX
{
- public uint cbSize;
- public uint style;
- public IntPtr lpfnWndProc;
+ public int cbSize;
+ public int style;
+ public WndProc lpfnWndProc;
public int cbClsExtra;
public int cbWndExtra;
public IntPtr hInstance;
public IntPtr hIcon;
public IntPtr hCursor;
public IntPtr hbrBackground;
- public string? lpszMenuName;
- public string? lpszClassName;
+ public string lpszMenuName;
+ public string lpszClassName;
public IntPtr hIconSm;
}
[DllImport("user32.dll")]
- public static extern IntPtr RegisterClassEx(ref WNDCLASSEX lpwcx);
+ public static extern ushort RegisterClassEx(ref WNDCLASSEX lpwcx);
- public enum SystemMetrics : int
+ public enum SystemMetric : int
{
SM_CXSCREEN = 0,
SM_CYSCREEN = 1,
}
[DllImport("user32.dll")]
- public static extern int GetSystemMetrics(SystemMetrics nIndex);
+ public static extern int GetSystemMetrics(SystemMetric smIndex);
[DllImport("user32.dll")]
public static extern IntPtr CreateWindowEx(
- uint dwExStyle,
- string lpClassName,
- string lpWindowName,
- uint dwStyle,
- int x,
- int y,
- int nWidth,
- int nHeight,
- IntPtr hWndParent,
- IntPtr hMenu,
- IntPtr hInstance,
- IntPtr lpParam
- );
+ int dwExStyle,
+ uint lpClassName,
+ string? lpWindowName,
+ uint dwStyle,
+ int x,
+ int y,
+ int nWidth,
+ int nHeight,
+ IntPtr hWndParent,
+ IntPtr hMenu,
+ IntPtr hInstance,
+ IntPtr lpParam);
[StructLayout(LayoutKind.Sequential)]
public struct MSG
@@ -70,14 +71,14 @@ public struct POINT
}
[DllImport("user32.dll")]
- public static extern bool GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
+ public static extern int GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
[DllImport("user32.dll")]
public static extern bool TranslateMessage(ref MSG lpMsg);
[DllImport("user32.dll")]
public static extern IntPtr DispatchMessage(ref MSG lpMsg);
-
+
[DllImport("user32.dll")]
public static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);
diff --git a/appCs/src/Wrapper.txt b/appCs/src/Wrapper.txt
new file mode 100644
index 0000000..72501d6
--- /dev/null
+++ b/appCs/src/Wrapper.txt
@@ -0,0 +1,2553 @@
+#nullable enable
+
+using System;
+using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
+using System.Runtime.InteropServices;
+using System.Runtime.InteropServices.ComTypes;
+using System.Text;
+
+// ReSharper disable InconsistentNaming
+#pragma warning disable 169, 649
+
+namespace Hummel
+{
+ [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Using Win32 naming for consistency.")]
+ [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter", Justification = "Using Win32 naming for consistency.")]
+ [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1310:FieldNamesMustNotContainUnderscore", Justification = "Using Win32 naming for consistency.")]
+ [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements must be documented", Justification = "Look in Win32 docs.")]
+ [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1602:Enumeration items must be documented", Justification = "Look in Win32 docs.")]
+ internal unsafe static class WinAPI2
+ {
+ public const int CW_USEDEFAULT = unchecked((int)0x80000000);
+
+ public delegate void TimerProc(IntPtr hWnd, uint uMsg, IntPtr nIDEvent, uint dwTime);
+
+ public delegate void TimeCallback(uint uTimerID, uint uMsg, UIntPtr dwUser, UIntPtr dw1, UIntPtr dw2);
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ public delegate void WaitOrTimerCallback(IntPtr lpParameter, bool timerOrWaitFired);
+
+ public delegate IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
+
+ public static readonly IntPtr DPI_AWARENESS_CONTEXT_UNAWARE = new IntPtr(-1);
+ public static readonly IntPtr DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = new IntPtr(-2);
+ public static readonly IntPtr DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = new IntPtr(-3);
+ public static readonly IntPtr DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = new IntPtr(-4);
+
+ public enum Cursor
+ {
+ IDC_ARROW = 32512,
+ IDC_IBEAM = 32513,
+ IDC_WAIT = 32514,
+ IDC_CROSS = 32515,
+ IDC_UPARROW = 32516,
+ IDC_SIZE = 32640,
+ IDC_ICON = 32641,
+ IDC_SIZENWSE = 32642,
+ IDC_SIZENESW = 32643,
+ IDC_SIZEWE = 32644,
+ IDC_SIZENS = 32645,
+ IDC_SIZEALL = 32646,
+ IDC_NO = 32648,
+ IDC_HAND = 32649,
+ IDC_APPSTARTING = 32650,
+ IDC_HELP = 32651
+ }
+
+ public enum MouseActivate : int
+ {
+ MA_ACTIVATE = 1,
+ MA_ACTIVATEANDEAT = 2,
+ MA_NOACTIVATE = 3,
+ MA_NOACTIVATEANDEAT = 4
+ }
+
+ [Flags]
+ public enum SetWindowPosFlags : uint
+ {
+ SWP_ASYNCWINDOWPOS = 0x4000,
+ SWP_DEFERERASE = 0x2000,
+ SWP_DRAWFRAME = 0x0020,
+ SWP_FRAMECHANGED = 0x0020,
+ SWP_HIDEWINDOW = 0x0080,
+ SWP_NOACTIVATE = 0x0010,
+ SWP_NOCOPYBITS = 0x0100,
+ SWP_NOMOVE = 0x0002,
+ SWP_NOOWNERZORDER = 0x0200,
+ SWP_NOREDRAW = 0x0008,
+ SWP_NOREPOSITION = 0x0200,
+ SWP_NOSENDCHANGING = 0x0400,
+ SWP_NOSIZE = 0x0001,
+ SWP_NOZORDER = 0x0004,
+ SWP_SHOWWINDOW = 0x0040,
+
+ SWP_RESIZE = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER
+ }
+
+ public static class WindowPosZOrder
+ {
+ public static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
+ public static readonly IntPtr HWND_TOP = new IntPtr(0);
+ public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
+ public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
+ }
+
+ public enum SizeCommand
+ {
+ Restored,
+ Minimized,
+ Maximized,
+ MaxShow,
+ MaxHide,
+ }
+
+ public enum ShowWindowCommand
+ {
+ Hide = 0,
+ Normal = 1,
+ ShowMinimized = 2,
+ Maximize = 3,
+ ShowMaximized = 3,
+ ShowNoActivate = 4,
+ Show = 5,
+ Minimize = 6,
+ ShowMinNoActive = 7,
+ ShowNA = 8,
+ Restore = 9,
+ ShowDefault = 10,
+ ForceMinimize = 11
+ }
+
+ public enum SystemMetric
+ {
+ SM_CXSCREEN = 0, // 0x00
+ SM_CYSCREEN = 1, // 0x01
+ SM_CXVSCROLL = 2, // 0x02
+ SM_CYHSCROLL = 3, // 0x03
+ SM_CYCAPTION = 4, // 0x04
+ SM_CXBORDER = 5, // 0x05
+ SM_CYBORDER = 6, // 0x06
+ SM_CXDLGFRAME = 7, // 0x07
+ SM_CXFIXEDFRAME = 7, // 0x07
+ SM_CYDLGFRAME = 8, // 0x08
+ SM_CYFIXEDFRAME = 8, // 0x08
+ SM_CYVTHUMB = 9, // 0x09
+ SM_CXHTHUMB = 10, // 0x0A
+ SM_CXICON = 11, // 0x0B
+ SM_CYICON = 12, // 0x0C
+ SM_CXCURSOR = 13, // 0x0D
+ SM_CYCURSOR = 14, // 0x0E
+ SM_CYMENU = 15, // 0x0F
+ SM_CXFULLSCREEN = 16, // 0x10
+ SM_CYFULLSCREEN = 17, // 0x11
+ SM_CYKANJIWINDOW = 18, // 0x12
+ SM_MOUSEPRESENT = 19, // 0x13
+ SM_CYVSCROLL = 20, // 0x14
+ SM_CXHSCROLL = 21, // 0x15
+ SM_DEBUG = 22, // 0x16
+ SM_SWAPBUTTON = 23, // 0x17
+ SM_CXMIN = 28, // 0x1C
+ SM_CYMIN = 29, // 0x1D
+ SM_CXSIZE = 30, // 0x1E
+ SM_CYSIZE = 31, // 0x1F
+ SM_CXSIZEFRAME = 32, // 0x20
+ SM_CXFRAME = 32, // 0x20
+ SM_CYSIZEFRAME = 33, // 0x21
+ SM_CYFRAME = 33, // 0x21
+ SM_CXMINTRACK = 34, // 0x22
+ SM_CYMINTRACK = 35, // 0x23
+ SM_CXDOUBLECLK = 36, // 0x24
+ SM_CYDOUBLECLK = 37, // 0x25
+ SM_CXICONSPACING = 38, // 0x26
+ SM_CYICONSPACING = 39, // 0x27
+ SM_MENUDROPALIGNMENT = 40, // 0x28
+ SM_PENWINDOWS = 41, // 0x29
+ SM_DBCSENABLED = 42, // 0x2A
+ SM_CMOUSEBUTTONS = 43, // 0x2B
+ SM_SECURE = 44, // 0x2C
+ SM_CXEDGE = 45, // 0x2D
+ SM_CYEDGE = 46, // 0x2E
+ SM_CXMINSPACING = 47, // 0x2F
+ SM_CYMINSPACING = 48, // 0x30
+ SM_CXSMICON = 49, // 0x31
+ SM_CYSMICON = 50, // 0x32
+ SM_CYSMCAPTION = 51, // 0x33
+ SM_CXSMSIZE = 52, // 0x34
+ SM_CYSMSIZE = 53, // 0x35
+ SM_CXMENUSIZE = 54, // 0x36
+ SM_CYMENUSIZE = 55, // 0x37
+ SM_ARRANGE = 56, // 0x38
+ SM_CXMINIMIZED = 57, // 0x39
+ SM_CYMINIMIZED = 58, // 0x3A
+ SM_CXMAXTRACK = 59, // 0x3B
+ SM_CYMAXTRACK = 60, // 0x3C
+ SM_CXMAXIMIZED = 61, // 0x3D
+ SM_CYMAXIMIZED = 62, // 0x3E
+ SM_NETWORK = 63, // 0x3F
+ SM_CLEANBOOT = 67, // 0x43
+ SM_CXDRAG = 68, // 0x44
+ SM_CYDRAG = 69, // 0x45
+ SM_SHOWSOUNDS = 70, // 0x46
+ SM_CXMENUCHECK = 71, // 0x47
+ SM_CYMENUCHECK = 72, // 0x48
+ SM_SLOWMACHINE = 73, // 0x49
+ SM_MIDEASTENABLED = 74, // 0x4A
+ SM_MOUSEWHEELPRESENT = 75, // 0x4B
+ SM_XVIRTUALSCREEN = 76, // 0x4C
+ SM_YVIRTUALSCREEN = 77, // 0x4D
+ SM_CXVIRTUALSCREEN = 78, // 0x4E
+ SM_CYVIRTUALSCREEN = 79, // 0x4F
+ SM_CMONITORS = 80, // 0x50
+ SM_SAMEDISPLAYFORMAT = 81, // 0x51
+ SM_IMMENABLED = 82, // 0x52
+ SM_CXFOCUSBORDER = 83, // 0x53
+ SM_CYFOCUSBORDER = 84, // 0x54
+ SM_TABLETPC = 86, // 0x56
+ SM_MEDIACENTER = 87, // 0x57
+ SM_STARTER = 88, // 0x58
+ SM_SERVERR2 = 89, // 0x59
+ SM_MOUSEHORIZONTALWHEELPRESENT = 91, // 0x5B
+ SM_CXPADDEDBORDER = 92, // 0x5C
+ SM_DIGITIZER = 94, // 0x5E
+ SM_MAXIMUMTOUCHES = 95, // 0x5F
+
+ SM_REMOTESESSION = 0x1000, // 0x1000
+ SM_SHUTTINGDOWN = 0x2000, // 0x2000
+ SM_REMOTECONTROL = 0x2001, // 0x2001
+
+ SM_CONVERTABLESLATEMODE = 0x2003,
+ SM_SYSTEMDOCKED = 0x2004,
+ }
+
+ [Flags]
+ public enum ModifierKeys
+ {
+ MK_NONE = 0x0000,
+
+ MK_LBUTTON = 0x0001,
+ MK_RBUTTON = 0x0002,
+
+ MK_SHIFT = 0x0004,
+ MK_CONTROL = 0x0008,
+
+ MK_MBUTTON = 0x0010,
+ MK_ALT = 0x0020,
+ MK_XBUTTON1 = 0x0020,
+ MK_XBUTTON2 = 0x0040
+ }
+
+ public enum VirtualKeyStates : int
+ {
+ VK_LBUTTON = 0x01,
+ VK_RBUTTON = 0x02,
+ VK_CANCEL = 0x03,
+ VK_MBUTTON = 0x04,
+ VK_XBUTTON1 = 0x05,
+ VK_XBUTTON2 = 0x06,
+ VK_BACK = 0x08,
+ VK_TAB = 0x09,
+ VK_CLEAR = 0x0C,
+ VK_RETURN = 0x0D,
+ VK_SHIFT = 0x10,
+ VK_CONTROL = 0x11,
+ VK_MENU = 0x12,
+ VK_PAUSE = 0x13,
+ VK_CAPITAL = 0x14,
+ VK_KANA = 0x15,
+ VK_HANGEUL = 0x15,
+ VK_HANGUL = 0x15,
+ VK_JUNJA = 0x17,
+ VK_FINAL = 0x18,
+ VK_HANJA = 0x19,
+ VK_KANJI = 0x19,
+ VK_ESCAPE = 0x1B,
+ VK_CONVERT = 0x1C,
+ VK_NONCONVERT = 0x1D,
+ VK_ACCEPT = 0x1E,
+ VK_MODECHANGE = 0x1F,
+ VK_SPACE = 0x20,
+ VK_PRIOR = 0x21,
+ VK_NEXT = 0x22,
+ VK_END = 0x23,
+ VK_HOME = 0x24,
+ VK_LEFT = 0x25,
+ VK_UP = 0x26,
+ VK_RIGHT = 0x27,
+ VK_DOWN = 0x28,
+ VK_SELECT = 0x29,
+ VK_PRINT = 0x2A,
+ VK_EXECUTE = 0x2B,
+ VK_SNAPSHOT = 0x2C,
+ VK_INSERT = 0x2D,
+ VK_DELETE = 0x2E,
+ VK_HELP = 0x2F,
+ VK_LWIN = 0x5B,
+ VK_RWIN = 0x5C,
+ VK_APPS = 0x5D,
+ VK_SLEEP = 0x5F,
+ VK_NUMPAD0 = 0x60,
+ VK_NUMPAD1 = 0x61,
+ VK_NUMPAD2 = 0x62,
+ VK_NUMPAD3 = 0x63,
+ VK_NUMPAD4 = 0x64,
+ VK_NUMPAD5 = 0x65,
+ VK_NUMPAD6 = 0x66,
+ VK_NUMPAD7 = 0x67,
+ VK_NUMPAD8 = 0x68,
+ VK_NUMPAD9 = 0x69,
+ VK_MULTIPLY = 0x6A,
+ VK_ADD = 0x6B,
+ VK_SEPARATOR = 0x6C,
+ VK_SUBTRACT = 0x6D,
+ VK_DECIMAL = 0x6E,
+ VK_DIVIDE = 0x6F,
+ VK_F1 = 0x70,
+ VK_F2 = 0x71,
+ VK_F3 = 0x72,
+ VK_F4 = 0x73,
+ VK_F5 = 0x74,
+ VK_F6 = 0x75,
+ VK_F7 = 0x76,
+ VK_F8 = 0x77,
+ VK_F9 = 0x78,
+ VK_F10 = 0x79,
+ VK_F11 = 0x7A,
+ VK_F12 = 0x7B,
+ VK_F13 = 0x7C,
+ VK_F14 = 0x7D,
+ VK_F15 = 0x7E,
+ VK_F16 = 0x7F,
+ VK_F17 = 0x80,
+ VK_F18 = 0x81,
+ VK_F19 = 0x82,
+ VK_F20 = 0x83,
+ VK_F21 = 0x84,
+ VK_F22 = 0x85,
+ VK_F23 = 0x86,
+ VK_F24 = 0x87,
+ VK_NUMLOCK = 0x90,
+ VK_SCROLL = 0x91,
+ VK_OEM_NEC_EQUAL = 0x92,
+ VK_OEM_FJ_JISHO = 0x92,
+ VK_OEM_FJ_MASSHOU = 0x93,
+ VK_OEM_FJ_TOUROKU = 0x94,
+ VK_OEM_FJ_LOYA = 0x95,
+ VK_OEM_FJ_ROYA = 0x96,
+ VK_LSHIFT = 0xA0,
+ VK_RSHIFT = 0xA1,
+ VK_LCONTROL = 0xA2,
+ VK_RCONTROL = 0xA3,
+ VK_LMENU = 0xA4,
+ VK_RMENU = 0xA5,
+ VK_BROWSER_BACK = 0xA6,
+ VK_BROWSER_FORWARD = 0xA7,
+ VK_BROWSER_REFRESH = 0xA8,
+ VK_BROWSER_STOP = 0xA9,
+ VK_BROWSER_SEARCH = 0xAA,
+ VK_BROWSER_FAVORITES = 0xAB,
+ VK_BROWSER_HOME = 0xAC,
+ VK_VOLUME_MUTE = 0xAD,
+ VK_VOLUME_DOWN = 0xAE,
+ VK_VOLUME_UP = 0xAF,
+ VK_MEDIA_NEXT_TRACK = 0xB0,
+ VK_MEDIA_PREV_TRACK = 0xB1,
+ VK_MEDIA_STOP = 0xB2,
+ VK_MEDIA_PLAY_PAUSE = 0xB3,
+ VK_LAUNCH_MAIL = 0xB4,
+ VK_LAUNCH_MEDIA_SELECT = 0xB5,
+ VK_LAUNCH_APP1 = 0xB6,
+ VK_LAUNCH_APP2 = 0xB7,
+ VK_OEM_1 = 0xBA,
+ VK_OEM_PLUS = 0xBB,
+ VK_OEM_COMMA = 0xBC,
+ VK_OEM_MINUS = 0xBD,
+ VK_OEM_PERIOD = 0xBE,
+ VK_OEM_2 = 0xBF,
+ VK_OEM_3 = 0xC0,
+ VK_ABNT_C1 = 0xC1,
+ VK_ABNT_C2 = 0xC2,
+ VK_OEM_4 = 0xDB,
+ VK_OEM_5 = 0xDC,
+ VK_OEM_6 = 0xDD,
+ VK_OEM_7 = 0xDE,
+ VK_OEM_8 = 0xDF,
+ VK_OEM_AX = 0xE1,
+ VK_OEM_102 = 0xE2,
+ VK_ICO_HELP = 0xE3,
+ VK_ICO_00 = 0xE4,
+ VK_PROCESSKEY = 0xE5,
+ VK_ICO_CLEAR = 0xE6,
+ VK_PACKET = 0xE7,
+ VK_OEM_RESET = 0xE9,
+ VK_OEM_JUMP = 0xEA,
+ VK_OEM_PA1 = 0xEB,
+ VK_OEM_PA2 = 0xEC,
+ VK_OEM_PA3 = 0xED,
+ VK_OEM_WSCTRL = 0xEE,
+ VK_OEM_CUSEL = 0xEF,
+ VK_OEM_ATTN = 0xF0,
+ VK_OEM_FINISH = 0xF1,
+ VK_OEM_COPY = 0xF2,
+ VK_OEM_AUTO = 0xF3,
+ VK_OEM_ENLW = 0xF4,
+ VK_OEM_BACKTAB = 0xF5,
+ VK_ATTN = 0xF6,
+ VK_CRSEL = 0xF7,
+ VK_EXSEL = 0xF8,
+ VK_EREOF = 0xF9,
+ VK_PLAY = 0xFA,
+ VK_ZOOM = 0xFB,
+ VK_NONAME = 0xFC,
+ VK_PA1 = 0xFD,
+ VK_OEM_CLEAR = 0xFE
+ }
+
+ public enum WindowActivate
+ {
+ WA_INACTIVE,
+ WA_ACTIVE,
+ WA_CLICKACTIVE,
+ }
+
+ public enum HitTestValues
+ {
+ HTERROR = -2,
+ HTTRANSPARENT = -1,
+ HTNOWHERE = 0,
+ HTCLIENT = 1,
+ HTCAPTION = 2,
+ HTSYSMENU = 3,
+ HTGROWBOX = 4,
+ HTMENU = 5,
+ HTHSCROLL = 6,
+ HTVSCROLL = 7,
+ HTMINBUTTON = 8,
+ HTMAXBUTTON = 9,
+ HTLEFT = 10,
+ HTRIGHT = 11,
+ HTTOP = 12,
+ HTTOPLEFT = 13,
+ HTTOPRIGHT = 14,
+ HTBOTTOM = 15,
+ HTBOTTOMLEFT = 16,
+ HTBOTTOMRIGHT = 17,
+ HTBORDER = 18,
+ HTOBJECT = 19,
+ HTCLOSE = 20,
+ HTHELP = 21
+ }
+
+ [Flags]
+ public enum WindowStyles : uint
+ {
+ WS_BORDER = 0x800000,
+ WS_CAPTION = 0xc00000,
+ WS_CHILD = 0x40000000,
+ WS_CLIPCHILDREN = 0x2000000,
+ WS_CLIPSIBLINGS = 0x4000000,
+ WS_DISABLED = 0x8000000,
+ WS_DLGFRAME = 0x400000,
+ WS_GROUP = 0x20000,
+ WS_HSCROLL = 0x100000,
+ WS_MAXIMIZE = 0x1000000,
+ WS_MAXIMIZEBOX = 0x10000,
+ WS_MINIMIZE = 0x20000000,
+ WS_MINIMIZEBOX = 0x20000,
+ WS_OVERLAPPED = 0x0,
+ WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_SIZEFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
+ WS_POPUP = 0x80000000u,
+ WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,
+ WS_SIZEFRAME = 0x40000,
+ WS_SYSMENU = 0x80000,
+ WS_TABSTOP = 0x10000,
+ WS_THICKFRAME = 0x40000,
+ WS_VISIBLE = 0x10000000,
+ WS_VSCROLL = 0x200000,
+ WS_EX_DLGMODALFRAME = 0x00000001,
+ WS_EX_NOPARENTNOTIFY = 0x00000004,
+ WS_EX_NOREDIRECTIONBITMAP = 0x00200000,
+ WS_EX_TOPMOST = 0x00000008,
+ WS_EX_ACCEPTFILES = 0x00000010,
+ WS_EX_TRANSPARENT = 0x00000020,
+ WS_EX_MDICHILD = 0x00000040,
+ WS_EX_TOOLWINDOW = 0x00000080,
+ WS_EX_WINDOWEDGE = 0x00000100,
+ WS_EX_CLIENTEDGE = 0x00000200,
+ WS_EX_CONTEXTHELP = 0x00000400,
+ WS_EX_RIGHT = 0x00001000,
+ WS_EX_LEFT = 0x00000000,
+ WS_EX_RTLREADING = 0x00002000,
+ WS_EX_LTRREADING = 0x00000000,
+ WS_EX_LEFTSCROLLBAR = 0x00004000,
+ WS_EX_RIGHTSCROLLBAR = 0x00000000,
+ WS_EX_CONTROLPARENT = 0x00010000,
+ WS_EX_STATICEDGE = 0x00020000,
+ WS_EX_APPWINDOW = 0x00040000,
+ WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
+ WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
+ WS_EX_LAYERED = 0x00080000,
+ WS_EX_NOINHERITLAYOUT = 0x00100000,
+ WS_EX_LAYOUTRTL = 0x00400000,
+ WS_EX_COMPOSITED = 0x02000000,
+ WS_EX_NOACTIVATE = 0x08000000
+ }
+
+ [Flags]
+ public enum ClassStyles : uint
+ {
+ CS_VREDRAW = 0x0001,
+ CS_HREDRAW = 0x0002,
+ CS_DBLCLKS = 0x0008,
+ CS_OWNDC = 0x0020,
+ CS_CLASSDC = 0x0040,
+ CS_PARENTDC = 0x0080,
+ CS_NOCLOSE = 0x0200,
+ CS_SAVEBITS = 0x0800,
+ CS_BYTEALIGNCLIENT = 0x1000,
+ CS_BYTEALIGNWINDOW = 0x2000,
+ CS_GLOBALCLASS = 0x4000,
+ CS_IME = 0x00010000,
+ CS_DROPSHADOW = 0x00020000
+ }
+
+ [Flags]
+ public enum PointerDeviceChangeFlags
+ {
+ PDC_ARRIVAL = 0x001,
+ PDC_REMOVAL = 0x002,
+ PDC_ORIENTATION_0 = 0x004,
+ PDC_ORIENTATION_90 = 0x008,
+ PDC_ORIENTATION_180 = 0x010,
+ PDC_ORIENTATION_270 = 0x020,
+ PDC_MODE_DEFAULT = 0x040,
+ PDC_MODE_CENTERED = 0x080,
+ PDC_MAPPING_CHANGE = 0x100,
+ PDC_RESOLUTION = 0x200,
+ PDC_ORIGIN = 0x400,
+ PDC_MODE_ASPECTRATIOPRESERVED = 0x800
+ }
+
+ public enum PointerInputType
+ {
+ PT_NONE = 0x00000000,
+ PT_POINTER = 0x00000001,
+ PT_TOUCH = 0x00000002,
+ PT_PEN = 0x00000003,
+ PT_MOUSE = 0x00000004,
+ PT_TOUCHPAD = 0x00000005
+ }
+
+ public enum WindowsMessage : uint
+ {
+ WM_NULL = 0x0000,
+ WM_CREATE = 0x0001,
+ WM_DESTROY = 0x0002,
+ WM_MOVE = 0x0003,
+ WM_SIZE = 0x0005,
+ WM_ACTIVATE = 0x0006,
+ WM_SETFOCUS = 0x0007,
+ WM_KILLFOCUS = 0x0008,
+ WM_ENABLE = 0x000A,
+ WM_SETREDRAW = 0x000B,
+ WM_SETTEXT = 0x000C,
+ WM_GETTEXT = 0x000D,
+ WM_GETTEXTLENGTH = 0x000E,
+ WM_PAINT = 0x000F,
+ WM_CLOSE = 0x0010,
+ WM_QUERYENDSESSION = 0x0011,
+ WM_QUERYOPEN = 0x0013,
+ WM_ENDSESSION = 0x0016,
+ WM_QUIT = 0x0012,
+ WM_ERASEBKGND = 0x0014,
+ WM_SYSCOLORCHANGE = 0x0015,
+ WM_SHOWWINDOW = 0x0018,
+ WM_WININICHANGE = 0x001A,
+ WM_SETTINGCHANGE = WM_WININICHANGE,
+ WM_DEVMODECHANGE = 0x001B,
+ WM_ACTIVATEAPP = 0x001C,
+ WM_FONTCHANGE = 0x001D,
+ WM_TIMECHANGE = 0x001E,
+ WM_CANCELMODE = 0x001F,
+ WM_SETCURSOR = 0x0020,
+ WM_MOUSEACTIVATE = 0x0021,
+ WM_CHILDACTIVATE = 0x0022,
+ WM_QUEUESYNC = 0x0023,
+ WM_GETMINMAXINFO = 0x0024,
+ WM_PAINTICON = 0x0026,
+ WM_ICONERASEBKGND = 0x0027,
+ WM_NEXTDLGCTL = 0x0028,
+ WM_SPOOLERSTATUS = 0x002A,
+ WM_DRAWITEM = 0x002B,
+ WM_MEASUREITEM = 0x002C,
+ WM_DELETEITEM = 0x002D,
+ WM_VKEYTOITEM = 0x002E,
+ WM_CHARTOITEM = 0x002F,
+ WM_SETFONT = 0x0030,
+ WM_GETFONT = 0x0031,
+ WM_SETHOTKEY = 0x0032,
+ WM_GETHOTKEY = 0x0033,
+ WM_QUERYDRAGICON = 0x0037,
+ WM_COMPAREITEM = 0x0039,
+ WM_GETOBJECT = 0x003D,
+ WM_COMPACTING = 0x0041,
+ WM_WINDOWPOSCHANGING = 0x0046,
+ WM_WINDOWPOSCHANGED = 0x0047,
+ WM_COPYDATA = 0x004A,
+ WM_CANCELJOURNAL = 0x004B,
+ WM_NOTIFY = 0x004E,
+ WM_INPUTLANGCHANGEREQUEST = 0x0050,
+ WM_INPUTLANGCHANGE = 0x0051,
+ WM_TCARD = 0x0052,
+ WM_HELP = 0x0053,
+ WM_USERCHANGED = 0x0054,
+ WM_NOTIFYFORMAT = 0x0055,
+ WM_CONTEXTMENU = 0x007B,
+ WM_STYLECHANGING = 0x007C,
+ WM_STYLECHANGED = 0x007D,
+ WM_DISPLAYCHANGE = 0x007E,
+ WM_GETICON = 0x007F,
+ WM_SETICON = 0x0080,
+ WM_NCCREATE = 0x0081,
+ WM_NCDESTROY = 0x0082,
+ WM_NCCALCSIZE = 0x0083,
+ WM_NCHITTEST = 0x0084,
+ WM_NCPAINT = 0x0085,
+ WM_NCACTIVATE = 0x0086,
+ WM_GETDLGCODE = 0x0087,
+ WM_SYNCPAINT = 0x0088,
+ WM_NCMOUSEMOVE = 0x00A0,
+ WM_NCLBUTTONDOWN = 0x00A1,
+ WM_NCLBUTTONUP = 0x00A2,
+ WM_NCLBUTTONDBLCLK = 0x00A3,
+ WM_NCRBUTTONDOWN = 0x00A4,
+ WM_NCRBUTTONUP = 0x00A5,
+ WM_NCRBUTTONDBLCLK = 0x00A6,
+ WM_NCMBUTTONDOWN = 0x00A7,
+ WM_NCMBUTTONUP = 0x00A8,
+ WM_NCMBUTTONDBLCLK = 0x00A9,
+ WM_NCXBUTTONDOWN = 0x00AB,
+ WM_NCXBUTTONUP = 0x00AC,
+ WM_NCXBUTTONDBLCLK = 0x00AD,
+ WM_INPUT_DEVICE_CHANGE = 0x00FE,
+ WM_INPUT = 0x00FF,
+ WM_KEYFIRST = 0x0100,
+ WM_KEYDOWN = 0x0100,
+ WM_KEYUP = 0x0101,
+ WM_CHAR = 0x0102,
+ WM_DEADCHAR = 0x0103,
+ WM_SYSKEYDOWN = 0x0104,
+ WM_SYSKEYUP = 0x0105,
+ WM_SYSCHAR = 0x0106,
+ WM_SYSDEADCHAR = 0x0107,
+ WM_UNICHAR = 0x0109,
+ WM_KEYLAST = 0x0109,
+ WM_IME_STARTCOMPOSITION = 0x010D,
+ WM_IME_ENDCOMPOSITION = 0x010E,
+ WM_IME_COMPOSITION = 0x010F,
+ WM_IME_KEYLAST = 0x010F,
+ WM_INITDIALOG = 0x0110,
+ WM_COMMAND = 0x0111,
+ WM_SYSCOMMAND = 0x0112,
+ WM_TIMER = 0x0113,
+ WM_HSCROLL = 0x0114,
+ WM_VSCROLL = 0x0115,
+ WM_INITMENU = 0x0116,
+ WM_INITMENUPOPUP = 0x0117,
+ WM_MENUSELECT = 0x011F,
+ WM_MENUCHAR = 0x0120,
+ WM_ENTERIDLE = 0x0121,
+ WM_MENURBUTTONUP = 0x0122,
+ WM_MENUDRAG = 0x0123,
+ WM_MENUGETOBJECT = 0x0124,
+ WM_UNINITMENUPOPUP = 0x0125,
+ WM_MENUCOMMAND = 0x0126,
+ WM_CHANGEUISTATE = 0x0127,
+ WM_UPDATEUISTATE = 0x0128,
+ WM_QUERYUISTATE = 0x0129,
+ WM_CTLCOLORMSGBOX = 0x0132,
+ WM_CTLCOLOREDIT = 0x0133,
+ WM_CTLCOLORLISTBOX = 0x0134,
+ WM_CTLCOLORBTN = 0x0135,
+ WM_CTLCOLORDLG = 0x0136,
+ WM_CTLCOLORSCROLLBAR = 0x0137,
+ WM_CTLCOLORSTATIC = 0x0138,
+ WM_MOUSEFIRST = 0x0200,
+ WM_MOUSEMOVE = 0x0200,
+ WM_LBUTTONDOWN = 0x0201,
+ WM_LBUTTONUP = 0x0202,
+ WM_LBUTTONDBLCLK = 0x0203,
+ WM_RBUTTONDOWN = 0x0204,
+ WM_RBUTTONUP = 0x0205,
+ WM_RBUTTONDBLCLK = 0x0206,
+ WM_MBUTTONDOWN = 0x0207,
+ WM_MBUTTONUP = 0x0208,
+ WM_MBUTTONDBLCLK = 0x0209,
+ WM_MOUSEWHEEL = 0x020A,
+ WM_XBUTTONDOWN = 0x020B,
+ WM_XBUTTONUP = 0x020C,
+ WM_XBUTTONDBLCLK = 0x020D,
+ WM_MOUSEHWHEEL = 0x020E,
+ WM_MOUSELAST = 0x020E,
+ WM_PARENTNOTIFY = 0x0210,
+ WM_ENTERMENULOOP = 0x0211,
+ WM_EXITMENULOOP = 0x0212,
+ WM_NEXTMENU = 0x0213,
+ WM_SIZING = 0x0214,
+ WM_CAPTURECHANGED = 0x0215,
+ WM_MOVING = 0x0216,
+ WM_POWERBROADCAST = 0x0218,
+ WM_DEVICECHANGE = 0x0219,
+ WM_MDICREATE = 0x0220,
+ WM_MDIDESTROY = 0x0221,
+ WM_MDIACTIVATE = 0x0222,
+ WM_MDIRESTORE = 0x0223,
+ WM_MDINEXT = 0x0224,
+ WM_MDIMAXIMIZE = 0x0225,
+ WM_MDITILE = 0x0226,
+ WM_MDICASCADE = 0x0227,
+ WM_MDIICONARRANGE = 0x0228,
+ WM_MDIGETACTIVE = 0x0229,
+ WM_MDISETMENU = 0x0230,
+ WM_ENTERSIZEMOVE = 0x0231,
+ WM_EXITSIZEMOVE = 0x0232,
+ WM_DROPFILES = 0x0233,
+ WM_MDIREFRESHMENU = 0x0234,
+
+ WM_POINTERDEVICECHANGE = 0x0238,
+ WM_POINTERDEVICEINRANGE = 0x239,
+ WM_POINTERDEVICEOUTOFRANGE = 0x23A,
+ WM_NCPOINTERUPDATE = 0x0241,
+ WM_NCPOINTERDOWN = 0x0242,
+ WM_NCPOINTERUP = 0x0243,
+ WM_POINTERUPDATE = 0x0245,
+ WM_POINTERDOWN = 0x0246,
+ WM_POINTERUP = 0x0247,
+ WM_POINTERENTER = 0x0249,
+ WM_POINTERLEAVE = 0x024A,
+ WM_POINTERACTIVATE = 0x024B,
+ WM_POINTERCAPTURECHANGED = 0x024C,
+ WM_TOUCHHITTESTING = 0x024D,
+ WM_POINTERWHEEL = 0x024E,
+ WM_POINTERHWHEEL = 0x024F,
+ DM_POINTERHITTEST = 0x0250,
+
+ WM_IME_SETCONTEXT = 0x0281,
+ WM_IME_NOTIFY = 0x0282,
+ WM_IME_CONTROL = 0x0283,
+ WM_IME_COMPOSITIONFULL = 0x0284,
+ WM_IME_SELECT = 0x0285,
+ WM_IME_CHAR = 0x0286,
+ WM_IME_REQUEST = 0x0288,
+ WM_IME_KEYDOWN = 0x0290,
+ WM_IME_KEYUP = 0x0291,
+ WM_MOUSEHOVER = 0x02A1,
+ WM_MOUSELEAVE = 0x02A3,
+ WM_NCMOUSEHOVER = 0x02A0,
+ WM_NCMOUSELEAVE = 0x02A2,
+ WM_WTSSESSION_CHANGE = 0x02B1,
+ WM_TABLET_FIRST = 0x02c0,
+ WM_TABLET_LAST = 0x02df,
+ WM_DPICHANGED = 0x02E0,
+ WM_CUT = 0x0300,
+ WM_COPY = 0x0301,
+ WM_PASTE = 0x0302,
+ WM_CLEAR = 0x0303,
+ WM_UNDO = 0x0304,
+ WM_RENDERFORMAT = 0x0305,
+ WM_RENDERALLFORMATS = 0x0306,
+ WM_DESTROYCLIPBOARD = 0x0307,
+ WM_DRAWCLIPBOARD = 0x0308,
+ WM_PAINTCLIPBOARD = 0x0309,
+ WM_VSCROLLCLIPBOARD = 0x030A,
+ WM_SIZECLIPBOARD = 0x030B,
+ WM_ASKCBFORMATNAME = 0x030C,
+ WM_CHANGECBCHAIN = 0x030D,
+ WM_HSCROLLCLIPBOARD = 0x030E,
+ WM_QUERYNEWPALETTE = 0x030F,
+ WM_PALETTEISCHANGING = 0x0310,
+ WM_PALETTECHANGED = 0x0311,
+ WM_HOTKEY = 0x0312,
+ WM_PRINT = 0x0317,
+ WM_PRINTCLIENT = 0x0318,
+ WM_APPCOMMAND = 0x0319,
+ WM_THEMECHANGED = 0x031A,
+ WM_CLIPBOARDUPDATE = 0x031D,
+ WM_DWMCOMPOSITIONCHANGED = 0x031E,
+ WM_DWMNCRENDERINGCHANGED = 0x031F,
+ WM_DWMCOLORIZATIONCOLORCHANGED = 0x0320,
+ WM_DWMWINDOWMAXIMIZEDCHANGE = 0x0321,
+ WM_GETTITLEBARINFOEX = 0x033F,
+ WM_HANDHELDFIRST = 0x0358,
+ WM_HANDHELDLAST = 0x035F,
+ WM_AFXFIRST = 0x0360,
+ WM_AFXLAST = 0x037F,
+ WM_PENWINFIRST = 0x0380,
+ WM_PENWINLAST = 0x038F,
+ WM_TOUCH = 0x0240,
+ WM_APP = 0x8000,
+ WM_USER = 0x0400,
+
+ WM_DISPATCH_WORK_ITEM = WM_USER,
+ }
+
+ public enum DwmWindowAttribute : uint
+ {
+ DWMWA_NCRENDERING_ENABLED = 1,
+ DWMWA_NCRENDERING_POLICY,
+ DWMWA_TRANSITIONS_FORCEDISABLED,
+ DWMWA_ALLOW_NCPAINT,
+ DWMWA_CAPTION_BUTTON_BOUNDS,
+ DWMWA_NONCLIENT_RTL_LAYOUT,
+ DWMWA_FORCE_ICONIC_REPRESENTATION,
+ DWMWA_FLIP3D_POLICY,
+ DWMWA_EXTENDED_FRAME_BOUNDS,
+ DWMWA_HAS_ICONIC_BITMAP,
+ DWMWA_DISALLOW_PEEK,
+ DWMWA_EXCLUDED_FROM_PEEK,
+ DWMWA_CLOAK,
+ DWMWA_CLOAKED,
+ DWMWA_FREEZE_REPRESENTATION,
+ DWMWA_PASSIVE_UPDATE_MODE,
+ DWMWA_USE_HOSTBACKDROPBRUSH,
+ DWMWA_USE_IMMERSIVE_DARK_MODE = 20,
+ DWMWA_WINDOW_CORNER_PREFERENCE = 33,
+ DWMWA_BORDER_COLOR,
+ DWMWA_CAPTION_COLOR,
+ DWMWA_TEXT_COLOR,
+ DWMWA_VISIBLE_FRAME_BORDER_THICKNESS,
+ DWMWA_LAST
+ };
+
+ public enum DwmWindowCornerPreference : uint
+ {
+ DWMWCP_DEFAULT = 0,
+ DWMWCP_DONOTROUND,
+ DWMWCP_ROUND,
+ DWMWCP_ROUNDSMALL
+ }
+
+ public enum MapVirtualKeyMapTypes : uint
+ {
+ MAPVK_VK_TO_VSC = 0x00,
+ MAPVK_VSC_TO_VK = 0x01,
+ MAPVK_VK_TO_CHAR = 0x02,
+ MAPVK_VSC_TO_VK_EX = 0x03,
+ }
+
+ public enum BitmapCompressionMode : uint
+ {
+ BI_RGB = 0,
+ BI_RLE8 = 1,
+ BI_RLE4 = 2,
+ BI_BITFIELDS = 3,
+ BI_JPEG = 4,
+ BI_PNG = 5
+ }
+
+ public enum DIBColorTable
+ {
+ DIB_RGB_COLORS = 0, /* color table in RGBs */
+ DIB_PAL_COLORS /* color table in palette indices */
+ }
+
+ public enum WindowLongParam
+ {
+ GWL_WNDPROC = -4,
+ GWL_HINSTANCE = -6,
+ GWL_HWNDPARENT = -8,
+ GWL_ID = -12,
+ GWL_STYLE = -16,
+ GWL_EXSTYLE = -20,
+ GWL_USERDATA = -21
+ }
+
+ public enum MenuCharParam
+ {
+ MNC_IGNORE = 0,
+ MNC_CLOSE = 1,
+ MNC_EXECUTE = 2,
+ MNC_SELECT = 3
+ }
+
+ public enum SysCommands
+ {
+ SC_SIZE = 0xF000,
+ SC_MOVE = 0xF010,
+ SC_MINIMIZE = 0xF020,
+ SC_MAXIMIZE = 0xF030,
+ SC_NEXTWINDOW = 0xF040,
+ SC_PREVWINDOW = 0xF050,
+ SC_CLOSE = 0xF060,
+ SC_VSCROLL = 0xF070,
+ SC_HSCROLL = 0xF080,
+ SC_MOUSEMENU = 0xF090,
+ SC_KEYMENU = 0xF100,
+ SC_ARRANGE = 0xF110,
+ SC_RESTORE = 0xF120,
+ SC_TASKLIST = 0xF130,
+ SC_SCREENSAVE = 0xF140,
+ SC_HOTKEY = 0xF150,
+ SC_DEFAULT = 0xF160,
+ SC_MONITORPOWER = 0xF170,
+ SC_CONTEXTHELP = 0xF180,
+ SC_SEPARATOR = 0xF00F,
+ SCF_ISSECURE = 0x00000001,
+ }
+
+ [Flags]
+ public enum PointerFlags
+ {
+ POINTER_FLAG_NONE = 0x00000000,
+ POINTER_FLAG_NEW = 0x00000001,
+ POINTER_FLAG_INRANGE = 0x00000002,
+ POINTER_FLAG_INCONTACT = 0x00000004,
+ POINTER_FLAG_FIRSTBUTTON = 0x00000010,
+ POINTER_FLAG_SECONDBUTTON = 0x00000020,
+ POINTER_FLAG_THIRDBUTTON = 0x00000040,
+ POINTER_FLAG_FOURTHBUTTON = 0x00000080,
+ POINTER_FLAG_FIFTHBUTTON = 0x00000100,
+ POINTER_FLAG_PRIMARY = 0x00002000,
+ POINTER_FLAG_CONFIDENCE = 0x00000400,
+ POINTER_FLAG_CANCELED = 0x00000800,
+ POINTER_FLAG_DOWN = 0x00010000,
+ POINTER_FLAG_UPDATE = 0x00020000,
+ POINTER_FLAG_UP = 0x00040000,
+ POINTER_FLAG_WHEEL = 0x00080000,
+ POINTER_FLAG_HWHEEL = 0x00100000,
+ POINTER_FLAG_CAPTURECHANGED = 0x00200000,
+ POINTER_FLAG_HASTRANSFORM = 0x00400000
+ }
+
+ public enum PointerButtonChangeType : ulong
+ {
+ 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
+ }
+
+ [Flags]
+ public enum PenFlags
+ {
+ PEN_FLAGS_NONE = 0x00000000,
+ PEN_FLAGS_BARREL = 0x00000001,
+ PEN_FLAGS_INVERTED = 0x00000002,
+ PEN_FLAGS_ERASER = 0x00000004,
+ }
+
+ [Flags]
+ public enum PenMask
+ {
+ PEN_MASK_NONE = 0x00000000,
+ PEN_MASK_PRESSURE = 0x00000001,
+ PEN_MASK_ROTATION = 0x00000002,
+ PEN_MASK_TILT_X = 0x00000004,
+ PEN_MASK_TILT_Y = 0x00000008
+ }
+
+ [Flags]
+ public enum TouchFlags
+ {
+ TOUCH_FLAG_NONE = 0x00000000
+ }
+
+ [Flags]
+ public enum TouchMask
+ {
+ TOUCH_MASK_NONE = 0x00000000,
+ TOUCH_MASK_CONTACTAREA = 0x00000001,
+ TOUCH_MASK_ORIENTATION = 0x00000002,
+ TOUCH_MASK_PRESSURE = 0x00000004,
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct POINTER_TOUCH_INFO
+ {
+ public POINTER_INFO pointerInfo;
+ public TouchFlags touchFlags;
+ public TouchMask touchMask;
+ public int rcContactLeft;
+ public int rcContactTop;
+ public int rcContactRight;
+ public int rcContactBottom;
+ public int rcContactRawLeft;
+ public int rcContactRawTop;
+ public int rcContactRawRight;
+ public int rcContactRawBottom;
+ public uint orientation;
+ public uint pressure;
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct POINTER_PEN_INFO
+ {
+ public POINTER_INFO pointerInfo;
+ public PenFlags penFlags;
+ public PenMask penMask;
+ public uint pressure;
+ public uint rotation;
+ public int tiltX;
+ public int tiltY;
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct POINTER_INFO
+ {
+ public PointerInputType pointerType;
+ public uint pointerId;
+ public uint frameId;
+ public PointerFlags pointerFlags;
+ public IntPtr sourceDevice;
+ public IntPtr hwndTarget;
+ public int ptPixelLocationX;
+ public int ptPixelLocationY;
+ public int ptHimetricLocationX;
+ public int ptHimetricLocationY;
+ public int ptPixelLocationRawX;
+ public int ptPixelLocationRawY;
+ public int ptHimetricLocationRawX;
+ public int ptHimetricLocationRawY;
+ public uint dwTime;
+ public uint historyCount;
+ public int inputData;
+ public ModifierKeys dwKeyStates;
+ public ulong PerformanceCount;
+ public PointerButtonChangeType ButtonChangeType;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct RGBQUAD
+ {
+ public byte rgbBlue;
+ public byte rgbGreen;
+ public byte rgbRed;
+ public byte rgbReserved;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct BITMAPINFOHEADER
+ {
+ public uint biSize;
+ public int biWidth;
+ public int biHeight;
+ public ushort biPlanes;
+ public ushort biBitCount;
+ public uint biCompression;
+ public uint biSizeImage;
+ public int biXPelsPerMeter;
+ public int biYPelsPerMeter;
+ public uint biClrUsed;
+ public uint biClrImportant;
+
+ public void Init()
+ {
+ biSize = (uint)sizeof(BITMAPINFOHEADER);
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct BITMAPINFO
+ {
+ // C# cannot inlay structs in structs so must expand directly here
+ //
+ //[StructLayout(LayoutKind.Sequential)]
+ //public struct BITMAPINFOHEADER
+ //{
+ public uint biSize;
+ public int biWidth;
+ public int biHeight;
+ public ushort biPlanes;
+ public ushort biBitCount;
+ public BitmapCompressionMode biCompression;
+ public uint biSizeImage;
+ public int biXPelsPerMeter;
+ public int biYPelsPerMeter;
+ public uint biClrUsed;
+ public uint biClrImportant;
+ //}
+
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
+ public uint[] cols;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct MINMAXINFO
+ {
+ public POINT ptReserved;
+ public POINT ptMaxSize;
+ public POINT ptMaxPosition;
+ public POINT ptMinTrackSize;
+ public POINT ptMaxTrackSize;
+ }
+
+ public const int SizeOf_BITMAPINFOHEADER = 40;
+
+ [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
+ internal static extern int GetMouseMovePointsEx(
+ uint cbSize, MOUSEMOVEPOINT* pointsIn,
+ MOUSEMOVEPOINT* pointsBufferOut, int nBufPoints, uint resolution);
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] // For GetMouseMovePointsEx
+ public struct MOUSEMOVEPOINT
+ {
+ public int x; //Specifies the x-coordinate of the mouse
+ public int y; //Specifies the x-coordinate of the mouse
+ public int time; //Specifies the time stamp of the mouse coordinate
+ public IntPtr dwExtraInfo; //Specifies extra information associated with this coordinate.
+ }
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool IsMouseInPointerEnabled();
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern int EnableMouseInPointer(bool enable);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerCursorId(uint pointerId, out uint cursorId);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerType(uint pointerId, out PointerInputType pointerType);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerInfo(uint pointerId, out POINTER_INFO pointerInfo);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerInfoHistory(uint pointerId, ref int entriesCount, [MarshalAs(UnmanagedType.LPArray), In, Out] POINTER_INFO[] pointerInfos);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerPenInfo(uint pointerId, out POINTER_PEN_INFO penInfo);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerPenInfoHistory(uint pointerId, ref int entriesCount, [MarshalAs(UnmanagedType.LPArray), In, Out] POINTER_PEN_INFO[] penInfos);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerTouchInfo(uint pointerId, out POINTER_TOUCH_INFO touchInfo);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetPointerTouchInfoHistory(uint pointerId, ref int entriesCount, [MarshalAs(UnmanagedType.LPArray), In, Out] POINTER_TOUCH_INFO[] touchInfos);
+
+ [DllImport("user32.dll")]
+ public static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip,
+ MonitorEnumDelegate lpfnEnum, IntPtr dwData);
+
+ public delegate bool MonitorEnumDelegate(IntPtr hMonitor, IntPtr hdcMonitor, ref IntPtr lprcMonitor, IntPtr dwData);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern IntPtr GetDC(IntPtr hWnd);
+
+ [DllImport("gdi32.dll")]
+ public static extern int SetDIBitsToDevice(IntPtr hdc, int XDest, int YDest,
+ uint dwWidth, uint dwHeight,
+ int XSrc, int YSrc,
+ uint uStartScan, uint cScanLines,
+ IntPtr lpvBits, [In] ref BITMAPINFO lpbmi, uint fuColorUse);
+
+ [DllImport("gdi32.dll", SetLastError = false, ExactSpelling = true)]
+ public static extern IntPtr CreateRectRgn(int x1, int y1, int x2, int y2);
+
+ [DllImport("user32.dll")]
+ public static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool AdjustWindowRectEx(ref RECT lpRect, uint dwStyle, bool bMenu, uint dwExStyle);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr BeginPaint(IntPtr hwnd, out PAINTSTRUCT lpPaint);
+
+ [DllImport("user32.dll")]
+ public static extern bool ClientToScreen(IntPtr hWnd, ref POINT lpPoint);
+
+ [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "CreateWindowExW", ExactSpelling = true)]
+ public static extern IntPtr CreateWindowEx(
+ int dwExStyle,
+ uint lpClassName,
+ string? lpWindowName,
+ uint dwStyle,
+ int x,
+ int y,
+ int nWidth,
+ int nHeight,
+ IntPtr hWndParent,
+ IntPtr hMenu,
+ IntPtr hInstance,
+ IntPtr lpParam);
+
+ [DllImport("user32.dll", EntryPoint = "DefWindowProcW")]
+ public static extern IntPtr DefWindowProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
+
+ public const int SC_MOUSEMOVE = 0xf012;
+
+ [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "SendMessageW")]
+ public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
+
+ [DllImport("user32.dll", EntryPoint = "DispatchMessageW")]
+ public static extern IntPtr DispatchMessage(ref MSG lpmsg);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool DestroyWindow(IntPtr hwnd);
+
+ [DllImport("user32.dll")]
+ public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
+
+ [DllImport("user32.dll")]
+ public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
+
+ [DllImport("user32.dll")]
+ public static extern uint GetCaretBlinkTime();
+
+ [DllImport("user32.dll")]
+ public static extern bool GetClientRect(IntPtr hwnd, out RECT lpRect);
+
+ [DllImport("user32.dll")]
+ public static extern bool GetCursorPos(out POINT lpPoint);
+
+ [DllImport("user32.dll")]
+ public static extern uint GetDoubleClickTime();
+
+ [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static extern bool GetKeyboardState(byte* lpKeyState);
+
+ [DllImport("user32.dll", EntryPoint = "MapVirtualKeyW")]
+ public static extern uint MapVirtualKey(uint uCode, uint uMapType);
+
+ [DllImport("user32.dll", EntryPoint = "GetMessageW", SetLastError = true)]
+ public static extern int GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
+
+ [DllImport("user32.dll")]
+ public static extern int GetMessageTime();
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetModuleHandleW", ExactSpelling = true)]
+ public static extern IntPtr GetModuleHandle(string? lpModuleName);
+
+ [DllImport("user32.dll")]
+ public static extern int GetSystemMetrics(SystemMetric smIndex);
+
+ [DllImport("user32.dll", SetLastError = true, EntryPoint = "GetWindowLongPtrW", ExactSpelling = true)]
+ public static extern uint GetWindowLongPtr(IntPtr hWnd, int nIndex);
+
+ [DllImport("user32.dll", SetLastError = true, EntryPoint = "GetWindowLongW", ExactSpelling = true)]
+ public static extern uint GetWindowLong32b(IntPtr hWnd, int nIndex);
+
+ public static uint GetWindowLong(IntPtr hWnd, int nIndex)
+ {
+ if (IntPtr.Size == 4)
+ {
+ return GetWindowLong32b(hWnd, nIndex);
+ }
+ else
+ {
+ return GetWindowLongPtr(hWnd, nIndex);
+ }
+ }
+
+ [DllImport("user32.dll", SetLastError = true, EntryPoint = "SetWindowLongW", ExactSpelling = true)]
+ private static extern uint SetWindowLong32b(IntPtr hWnd, int nIndex, uint value);
+
+ [DllImport("user32.dll", SetLastError = true, EntryPoint = "SetWindowLongPtrW", ExactSpelling = true)]
+ private static extern IntPtr SetWindowLong64b(IntPtr hWnd, int nIndex, IntPtr value);
+
+ public static uint SetWindowLong(IntPtr hWnd, int nIndex, uint value)
+ {
+ if (IntPtr.Size == 4)
+ {
+ return SetWindowLong32b(hWnd, nIndex, value);
+ }
+ else
+ {
+ return (uint)SetWindowLong64b(hWnd, nIndex, new IntPtr(value)).ToInt32();
+ }
+ }
+
+ public static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr handle)
+ {
+ if (IntPtr.Size == 4)
+ {
+ return new IntPtr(SetWindowLong32b(hWnd, nIndex, (uint)handle.ToInt32()));
+ }
+ else
+ {
+ return SetWindowLong64b(hWnd, nIndex, handle);
+ }
+ }
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
+
+ [DllImport("user32.dll")]
+ public static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
+
+ [DllImport("user32.dll")]
+ public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
+
+ [DllImport("user32.dll")]
+ public static extern bool GetUpdateRect(IntPtr hwnd, out RECT lpRect, bool bErase);
+
+ [DllImport("user32.dll")]
+ public static extern bool InvalidateRect(IntPtr hWnd, ref RECT lpRect, bool bErase);
+
+
+ [DllImport("user32.dll")]
+ public static extern bool InvalidateRect(IntPtr hWnd, RECT* lpRect, bool bErase);
+
+
+ [DllImport("user32.dll")]
+ public static extern bool ValidateRect(IntPtr hWnd, IntPtr lpRect);
+
+ [DllImport("user32.dll")]
+ public static extern bool IsWindow(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ public static extern bool IsWindowEnabled(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ public static extern bool IsWindowUnicode(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ public static extern bool IsWindowVisible(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ public static extern bool KillTimer(IntPtr hWnd, IntPtr uIDEvent);
+
+ [DllImport("user32.dll", EntryPoint = "LoadCursorW", ExactSpelling = true)]
+ public static extern IntPtr LoadCursor(IntPtr hInstance, IntPtr lpCursorName);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr CreateIconIndirect([In] ref ICONINFO iconInfo);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr CreateIconFromResourceEx(byte* pbIconBits, uint cbIconBits,
+ int fIcon, int dwVersion, int csDesired, int cyDesired, int flags);
+
+ [DllImport("user32.dll")]
+ public static extern bool DestroyIcon(IntPtr hIcon);
+
+ [DllImport("user32.dll", EntryPoint = "PeekMessageW", ExactSpelling = true)]
+ public static extern bool PeekMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);
+
+ [DllImport("user32")]
+ public static extern IntPtr GetMessageExtraInfo();
+
+ [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "RegisterClassExW")]
+ public static extern ushort RegisterClassEx(ref WNDCLASSEX lpwcx);
+
+ [DllImport("user32.dll")]
+ public static extern void RegisterTouchWindow(IntPtr hWnd, int flags);
+
+ [DllImport("user32.dll")]
+ public static extern bool ReleaseCapture();
+
+ [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "RegisterWindowMessageW", ExactSpelling = true)]
+ public static extern uint RegisterWindowMessage(string lpString);
+
+ [DllImport("user32.dll")]
+ public static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern IntPtr GetActiveWindow();
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern IntPtr SetActiveWindow(IntPtr hWnd);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool SetForegroundWindow(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr SetCapture(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr SetTimer(IntPtr hWnd, IntPtr nIDEvent, uint uElapse, TimerProc lpTimerFunc);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
+ [DllImport("user32.dll")]
+ public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags);
+ [DllImport("user32.dll")]
+ public static extern bool SetFocus(IntPtr hWnd);
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetFocus();
+ [DllImport("user32.dll")]
+ public static extern bool SetParent(IntPtr hWnd, IntPtr hWndNewParent);
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetParent(IntPtr hWnd);
+
+ public enum GetAncestorFlags
+ {
+ GA_PARENT = 1,
+ GA_ROOT = 2,
+ GA_ROOTOWNER = 3
+ }
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags gaFlags);
+ [DllImport("user32.dll")]
+ public static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommand nCmdShow);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ public static extern IntPtr CreateTimerQueue();
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ public static extern bool DeleteTimerQueueEx(IntPtr TimerQueue, IntPtr CompletionEvent);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool CreateTimerQueueTimer(
+ out IntPtr phNewTimer,
+ IntPtr TimerQueue,
+ WaitOrTimerCallback Callback,
+ IntPtr Parameter,
+ uint DueTime,
+ uint Period,
+ uint Flags);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ public static extern bool DeleteTimerQueueTimer(IntPtr TimerQueue, IntPtr Timer, IntPtr CompletionEvent);
+
+ [DllImport("user32.dll", ExactSpelling = true)]
+ public static extern int ToUnicodeEx(
+ uint wVirtKey,
+ uint wScanCode,
+ byte* lpKeyState,
+ char* pwszBuff,
+ int cchBuff,
+ uint wFlags,
+ IntPtr dwhkl);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT lpEventTrack);
+
+ [DllImport("user32.dll")]
+ public static extern bool TranslateMessage(ref MSG lpMsg);
+
+ [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "UnregisterClassW", ExactSpelling = true)]
+ public static extern bool UnregisterClass(string lpClassName, IntPtr hInstance);
+
+ [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "SetWindowTextW")]
+ public static extern bool SetWindowText(IntPtr hwnd, string? lpString);
+
+ public enum ClassLongIndex : int
+ {
+ GCLP_MENUNAME = -8,
+ GCLP_HBRBACKGROUND = -10,
+ GCLP_HCURSOR = -12,
+ GCLP_HICON = -14,
+ GCLP_HMODULE = -16,
+ GCL_CBWNDEXTRA = -18,
+ GCL_CBCLSEXTRA = -20,
+ GCLP_WNDPROC = -24,
+ GCL_STYLE = -26,
+ GCLP_HICONSM = -34,
+ GCW_ATOM = -32
+ }
+
+ [DllImport("shell32", CharSet = CharSet.Auto)]
+ public static extern int Shell_NotifyIcon(NIM dwMessage, NOTIFYICONDATA lpData);
+
+ [DllImport("user32.dll", EntryPoint = "SetClassLongPtrW", ExactSpelling = true)]
+ private static extern IntPtr SetClassLong64(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong);
+
+ [DllImport("user32.dll", EntryPoint = "SetClassLongW", ExactSpelling = true)]
+ private static extern IntPtr SetClassLong32(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong);
+
+ public static IntPtr SetClassLong(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong)
+ {
+ if (IntPtr.Size == 4)
+ {
+ return SetClassLong32(hWnd, nIndex, dwNewLong);
+ }
+
+ return SetClassLong64(hWnd, nIndex, dwNewLong);
+ }
+
+ public static IntPtr GetClassLongPtr(IntPtr hWnd, int nIndex)
+ {
+ if (IntPtr.Size > 4)
+ return GetClassLongPtr64(hWnd, nIndex);
+ else
+ return new IntPtr(GetClassLongPtr32(hWnd, nIndex));
+ }
+
+ [DllImport("user32.dll", EntryPoint = "GetClassLongW", ExactSpelling = true)]
+ public static extern uint GetClassLongPtr32(IntPtr hWnd, int nIndex);
+
+ [DllImport("user32.dll", EntryPoint = "GetClassLongPtrW", ExactSpelling = true)]
+ public static extern IntPtr GetClassLongPtr64(IntPtr hWnd, int nIndex);
+
+ [DllImport("user32.dll", EntryPoint = "SetCursor")]
+ internal static extern IntPtr SetCursor(IntPtr hCursor);
+
+ [DllImport("ole32.dll", PreserveSig = true)]
+ internal static extern int CoCreateInstance(in Guid clsid,
+ IntPtr ignore1, int ignore2, in Guid iid, [Out] out IntPtr pUnkOuter);
+
+
+ [DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IntPtr pbc, ref Guid riid, out IntPtr ppv);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool OpenClipboard(IntPtr hWndOwner);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool CloseClipboard();
+
+ [DllImport("user32.dll")]
+ public static extern bool EmptyClipboard();
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetClipboardData(ClipboardFormat uFormat);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr SetClipboardData(ClipboardFormat uFormat, IntPtr hMem);
+
+ [DllImport("ole32.dll", PreserveSig = true)]
+ public static extern int OleGetClipboard(out IntPtr dataObject);
+
+ [DllImport("ole32.dll", PreserveSig = true)]
+ public static extern int OleSetClipboard(IntPtr dataObject);
+
+ [DllImport("kernel32.dll", ExactSpelling = true)]
+ public static extern IntPtr GlobalLock(IntPtr handle);
+
+ [DllImport("kernel32.dll", ExactSpelling = true)]
+ public static extern bool GlobalUnlock(IntPtr handle);
+
+ [DllImport("kernel32.dll", ExactSpelling = true)]
+ public static extern IntPtr GlobalAlloc(int uFlags, int dwBytes);
+
+ [DllImport("kernel32.dll", ExactSpelling = true)]
+ public static extern IntPtr GlobalFree(IntPtr hMem);
+
+ [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "LoadLibraryW", ExactSpelling = true)]
+ public static extern IntPtr LoadLibrary(string fileName);
+
+ [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "LoadLibraryExW", ExactSpelling = true)]
+ public static extern IntPtr LoadLibraryEx(string fileName, IntPtr hFile, int flags);
+
+ [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
+ public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
+
+ [DllImport("comdlg32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetSaveFileNameW")]
+ public static extern bool GetSaveFileName(IntPtr lpofn);
+
+ [DllImport("comdlg32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetOpenFileNameW")]
+ public static extern bool GetOpenFileName(IntPtr lpofn);
+
+ [DllImport("comdlg32.dll")]
+ public static extern int CommDlgExtendedError();
+
+ public static bool ShCoreAvailable => LoadLibrary("shcore.dll") != IntPtr.Zero;
+
+ [DllImport("shcore.dll")]
+ public static extern void SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool SetProcessDpiAwarenessContext(IntPtr dpiAWarenessContext);
+
+ [DllImport("shcore.dll")]
+ public static extern long GetDpiForMonitor(IntPtr hmonitor, MONITOR_DPI_TYPE dpiType, out uint dpiX, out uint dpiY);
+
+ [DllImport("gdi32.dll")]
+ public static extern int GetDeviceCaps(IntPtr hdc, DEVICECAP nIndex);
+
+ [DllImport("shcore.dll")]
+ public static extern void GetScaleFactorForMonitor(IntPtr hMon, out uint pScale);
+
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool SetProcessDPIAware();
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr MonitorFromPoint(POINT pt, MONITOR dwFlags);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr MonitorFromRect(RECT rect, MONITOR dwFlags);
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr MonitorFromWindow(IntPtr hwnd, MONITOR dwFlags);
+
+ [DllImport("user32", EntryPoint = "GetMonitorInfoW", ExactSpelling = true, CharSet = CharSet.Unicode)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool GetMonitorInfo([In] IntPtr hMonitor, ref MONITORINFO lpmi);
+
+ [DllImport("user32")]
+ public static extern bool GetTouchInputInfo(
+ IntPtr hTouchInput,
+ uint cInputs,
+ TOUCHINPUT* pInputs,
+ int cbSize
+ );
+
+ [DllImport("user32")]
+ public static extern bool CloseTouchInputHandle(IntPtr hTouchInput);
+
+ [return: MarshalAs(UnmanagedType.Bool)]
+ [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "PostMessageW")]
+ public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
+
+ [DllImport("gdi32.dll")]
+ public static extern int SetDIBitsToDevice(IntPtr hdc, int XDest, int YDest, uint
+ dwWidth, uint dwHeight, int XSrc, int YSrc, uint uStartScan, uint cScanLines,
+ IntPtr lpvBits, [In] ref BITMAPINFOHEADER lpbmi, uint fuColorUse);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool CloseHandle(IntPtr hObject);
+ [DllImport("gdi32.dll", SetLastError = true)]
+ public static extern IntPtr CreateDIBSection(IntPtr hDC, ref BITMAPINFOHEADER pBitmapInfo, int un, out IntPtr lplpVoid, IntPtr handle, int dw);
+ [DllImport("gdi32.dll", SetLastError = true)]
+ public static extern IntPtr CreateBitmap(int width, int height, int planes, int bitCount, IntPtr data);
+ [DllImport("gdi32.dll")]
+ public static extern int DeleteObject(IntPtr hObject);
+ [DllImport("gdi32.dll", SetLastError = true)]
+ public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
+ [DllImport("gdi32.dll")]
+ public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject);
+
+ [DllImport("gdi32.dll")]
+ public static extern int ChoosePixelFormat(IntPtr hdc, ref PixelFormatDescriptor pfd);
+
+ [DllImport("gdi32.dll")]
+ public static extern int DescribePixelFormat(IntPtr hdc, ref PixelFormatDescriptor pfd);
+
+ [DllImport("gdi32.dll")]
+ public static extern int SetPixelFormat(IntPtr hdc, int iPixelFormat, ref PixelFormatDescriptor pfd);
+
+
+ [DllImport("gdi32.dll")]
+ public static extern int DescribePixelFormat(IntPtr hdc, int iPixelFormat, int bytes, ref PixelFormatDescriptor pfd);
+
+ [DllImport("gdi32.dll")]
+ public static extern bool SwapBuffers(IntPtr hdc);
+
+ [DllImport("opengl32.dll")]
+ public static extern IntPtr wglCreateContext(IntPtr hdc);
+
+ [DllImport("opengl32.dll")]
+ public static extern bool wglDeleteContext(IntPtr context);
+
+
+ [DllImport("opengl32.dll", SetLastError = true)]
+ public static extern bool wglMakeCurrent(IntPtr hdc, IntPtr context);
+
+ [DllImport("opengl32.dll")]
+ public static extern IntPtr wglGetCurrentContext();
+
+ [DllImport("opengl32.dll")]
+ public static extern IntPtr wglGetCurrentDC();
+
+ [DllImport("opengl32.dll", CharSet = CharSet.Ansi)]
+ public static extern IntPtr wglGetProcAddress(string name);
+
+ [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "CreateFileMappingW", ExactSpelling = true)]
+ public static extern IntPtr CreateFileMapping(IntPtr hFile,
+ IntPtr lpFileMappingAttributes,
+ uint flProtect,
+ uint dwMaximumSizeHigh,
+ uint dwMaximumSizeLow,
+ string lpName);
+
+ [DllImport("msvcrt.dll", EntryPoint = "memcpy", SetLastError = false, CallingConvention = CallingConvention.Cdecl)]
+ public static extern IntPtr CopyMemory(IntPtr dest, IntPtr src, UIntPtr count);
+
+ [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
+ public static extern HRESULT RegisterDragDrop(IntPtr hwnd, IntPtr target);
+
+ [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
+ public static extern HRESULT RevokeDragDrop(IntPtr hwnd);
+
+ [DllImport("ole32.dll", EntryPoint = "OleInitialize")]
+ public static extern HRESULT OleInitialize(IntPtr val);
+
+ [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
+ internal static extern void ReleaseStgMedium(ref STGMEDIUM medium);
+
+ [DllImport("user32.dll", BestFitMapping = false, CharSet = CharSet.Unicode, SetLastError = true, EntryPoint = "GetClipboardFormatNameW", ExactSpelling = true)]
+ public static extern int GetClipboardFormatName(int format, StringBuilder lpString, int cchMax);
+
+ [DllImport("user32.dll", BestFitMapping = false, CharSet = CharSet.Unicode, SetLastError = true, EntryPoint = "RegisterClipboardFormatW", ExactSpelling = true)]
+ public static extern int RegisterClipboardFormat(string format);
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, ExactSpelling = true, SetLastError = true)]
+ public static extern IntPtr GlobalSize(IntPtr hGlobal);
+
+ [DllImport("shell32.dll", BestFitMapping = false, CharSet = CharSet.Unicode, EntryPoint = "DragQueryFileW", ExactSpelling = true)]
+ public static extern int DragQueryFile(IntPtr hDrop, int iFile, StringBuilder? lpszFile, int cch);
+
+ [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true, PreserveSig = false)]
+ internal static extern void DoDragDrop(IntPtr dataObject, IntPtr dropSource, int allowedEffects, [Out] out int finalEffect);
+
+ [DllImport("dwmapi.dll")]
+ public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
+
+ [DllImport("dwmapi.dll")]
+ public static extern int DwmGetWindowAttribute(IntPtr hwnd, int dwAttribute, out RECT pvAttribute, int cbAttribute);
+
+ [DllImport("dwmapi.dll")]
+ public static extern int DwmSetWindowAttribute(IntPtr hwnd, int dwAttribute, void* pvAttribute, int cbAttribute);
+
+ [DllImport("dwmapi.dll")]
+ public static extern int DwmIsCompositionEnabled(out bool enabled);
+
+ [DllImport("dwmapi.dll")]
+ public static extern void DwmFlush();
+
+ [DllImport("dwmapi.dll")]
+ public static extern bool DwmDefWindowProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam, ref IntPtr plResult);
+
+ [DllImport("dwmapi.dll", SetLastError = false)]
+ public static extern int DwmEnableBlurBehindWindow(IntPtr hwnd, ref DWM_BLURBEHIND blurBehind);
+
+ [Flags]
+ public enum LayeredWindowFlags
+ {
+ LWA_ALPHA = 0x00000002,
+ LWA_COLORKEY = 0x00000001,
+ }
+
+ [DllImport("user32.dll")]
+ public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, LayeredWindowFlags dwFlags);
+
+ [Flags]
+ public enum DWM_BB
+ {
+ Enable = 1,
+ BlurRegion = 2,
+ TransitionMaximized = 4
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct DWM_BLURBEHIND
+ {
+ public DWM_BB dwFlags;
+ public bool fEnable;
+ public IntPtr hRgnBlur;
+ public bool fTransitionOnMaximized;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct RTL_OSVERSIONINFOEX
+ {
+ internal uint dwOSVersionInfoSize;
+ internal uint dwMajorVersion;
+ internal uint dwMinorVersion;
+ internal uint dwBuildNumber;
+ internal uint dwPlatformId;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ internal string szCSDVersion;
+ }
+
+ [DllImport("ntdll")]
+ private static extern int RtlGetVersion(ref RTL_OSVERSIONINFOEX lpVersionInformation);
+
+ internal static Version RtlGetVersion()
+ {
+ RTL_OSVERSIONINFOEX v = new RTL_OSVERSIONINFOEX();
+ v.dwOSVersionInfoSize = (uint)Marshal.SizeOf();
+ if (RtlGetVersion(ref v) == 0)
+ {
+ return new Version((int)v.dwMajorVersion, (int)v.dwMinorVersion, (int)v.dwBuildNumber);
+ }
+ else
+ {
+ throw new Exception("RtlGetVersion failed!");
+ }
+ }
+
+ [DllImport("kernel32", EntryPoint = "WaitForMultipleObjectsEx", SetLastError = true, CharSet = CharSet.Auto)]
+ private static extern int IntWaitForMultipleObjectsEx(int nCount, IntPtr[] pHandles, bool bWaitAll, int dwMilliseconds, bool bAlertable);
+
+ public const int WAIT_FAILED = unchecked((int)0xFFFFFFFF);
+
+ internal static int WaitForMultipleObjectsEx(int nCount, IntPtr[] pHandles, bool bWaitAll, int dwMilliseconds, bool bAlertable)
+ {
+ int result = IntWaitForMultipleObjectsEx(nCount, pHandles, bWaitAll, dwMilliseconds, bAlertable);
+ if (result == WAIT_FAILED)
+ {
+ throw new Win32Exception();
+ }
+
+ return result;
+ }
+
+ [Flags]
+ internal enum QueueStatusFlags
+ {
+ QS_KEY = 0x0001,
+ QS_MOUSEMOVE = 0x0002,
+ QS_MOUSEBUTTON = 0x0004,
+ QS_POSTMESSAGE = 0x0008,
+ QS_TIMER = 0x0010,
+ QS_PAINT = 0x0020,
+ QS_SENDMESSAGE = 0x0040,
+ QS_HOTKEY = 0x0080,
+ QS_ALLPOSTMESSAGE = 0x0100,
+ QS_EVENT = 0x02000,
+ QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON,
+ QS_INPUT = QS_MOUSE | QS_KEY,
+ QS_ALLEVENTS = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY,
+ QS_ALLINPUT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE
+ }
+
+ [Flags]
+ internal enum MsgWaitForMultipleObjectsFlags
+ {
+ MWMO_WAITALL = 0x0001,
+ MWMO_ALERTABLE = 0x0002,
+ MWMO_INPUTAVAILABLE = 0x0004
+ }
+
+ [DllImport("user32", EntryPoint="MsgWaitForMultipleObjectsEx", SetLastError = true, ExactSpelling = true, CharSet = CharSet.Auto)]
+ private static extern int IntMsgWaitForMultipleObjectsEx(int nCount, IntPtr[]? pHandles, int dwMilliseconds,
+ QueueStatusFlags dwWakeMask, MsgWaitForMultipleObjectsFlags dwFlags);
+
+ internal static int MsgWaitForMultipleObjectsEx(int nCount, IntPtr[]? pHandles, int dwMilliseconds,
+ QueueStatusFlags dwWakeMask, MsgWaitForMultipleObjectsFlags dwFlags)
+ {
+ int result = IntMsgWaitForMultipleObjectsEx(nCount, pHandles, dwMilliseconds, dwWakeMask, dwFlags);
+ if(result == -1)
+ {
+ throw new Win32Exception();
+ }
+
+ return result;
+ }
+
+ [Flags]
+ public enum GCS : uint
+ {
+ /// Retrieve or update the attribute of the composition string.
+ GCS_COMPATTR = 0x0010,
+
+ /// Retrieve or update clause information of the composition string.
+ GCS_COMPCLAUSE = 0x0020,
+
+ /// Retrieve or update the attributes of the reading string of the current composition.
+ GCS_COMPREADATTR = 0x0002,
+
+ /// Retrieve or update the clause information of the reading string of the composition string.
+ GCS_COMPREADCLAUSE = 0x0004,
+
+ /// Retrieve or update the reading string of the current composition.
+ GCS_COMPREADSTR = 0x0001,
+
+ /// Retrieve or update the current composition string.
+ GCS_COMPSTR = 0x0008,
+
+ /// Retrieve or update the cursor position in composition string.
+ GCS_CURSORPOS = 0x0080,
+
+ /// Retrieve or update the starting position of any changes in composition string.
+ GCS_DELTASTART = 0x0100,
+
+ /// Retrieve or update clause information of the result string.
+ GCS_RESULTCLAUSE = 0x1000,
+
+ /// Retrieve or update clause information of the reading string.
+ GCS_RESULTREADCLAUSE = 0x0400,
+
+ /// Retrieve or update the reading string.
+ GCS_RESULTREADSTR = 0x0200,
+
+ /// Retrieve or update the string of the composition result.
+ GCS_RESULTSTR = 0x0800,
+ }
+
+ [DllImport("imm32.dll", SetLastError = true)]
+ public static extern IntPtr ImmGetContext(IntPtr hWnd);
+ [DllImport("imm32.dll", SetLastError = true)]
+ public static extern IntPtr ImmAssociateContext(IntPtr hWnd, IntPtr hIMC);
+ [DllImport("imm32.dll", SetLastError = true)]
+ public static extern IntPtr ImmCreateContext();
+ [DllImport("imm32.dll")]
+ public static extern bool ImmReleaseContext(IntPtr hWnd, IntPtr hIMC);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmSetOpenStatus(IntPtr hIMC, bool flag);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmSetActiveContext(IntPtr hIMC, bool flag);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmSetStatusWindowPos(IntPtr hIMC, ref POINT lpptPos);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmIsIME(IntPtr HKL);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmSetCandidateWindow(IntPtr hIMC, ref CANDIDATEFORM lpCandidate);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmSetCompositionWindow(IntPtr hIMC, ref COMPOSITIONFORM lpComp);
+ [DllImport("imm32.dll")]
+ public static extern bool ImmSetCompositionFont(IntPtr hIMC, ref LOGFONT lf);
+
+ [DllImport("imm32.dll", SetLastError = false, CharSet = CharSet.Unicode, EntryPoint = "ImmGetCompositionStringW", ExactSpelling = true)]
+ public static extern int ImmGetCompositionString(IntPtr hIMC, GCS dwIndex, [Out, Optional] IntPtr lpBuf, uint dwBufLen);
+
+ public static string? ImmGetCompositionString(IntPtr hIMC, GCS dwIndex)
+ {
+ int bufferLength = ImmGetCompositionString(hIMC, dwIndex, IntPtr.Zero, 0);
+
+ if (bufferLength > 0)
+ {
+ var buffer = bufferLength <= 64 ? stackalloc byte[bufferLength] : new byte[bufferLength];
+
+ fixed (byte* bufferPtr = buffer)
+ {
+ var result = ImmGetCompositionString(hIMC, dwIndex, (IntPtr)bufferPtr, (uint)bufferLength);
+ if (result >= 0)
+ {
+ return Encoding.Unicode.GetString(bufferPtr, result);
+ }
+ }
+ }
+
+ return null;
+ }
+
+ [DllImport("imm32.dll")]
+ public static extern bool ImmNotifyIME(IntPtr hIMC, int dwAction, int dwIndex, int dwValue);
+ [DllImport("user32.dll")]
+ public static extern bool CreateCaret(IntPtr hwnd, IntPtr hBitmap, int nWidth, int nHeight);
+ [DllImport("user32.dll")]
+ public static extern bool SetCaretPos(int X, int Y);
+ [DllImport("user32.dll")]
+ public static extern bool DestroyCaret();
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetKeyboardLayout(int idThread);
+ [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
+ public static extern int LCIDToLocaleName(uint Locale, StringBuilder lpName, int cchName, int dwFlags);
+
+ public static uint MAKELCID(uint lgid, uint srtid)
+ {
+ return (((uint)(ushort)srtid) << 16) |
+ ((ushort)lgid);
+ }
+
+ public static ushort PRIMARYLANGID(uint lgid)
+ {
+ return (ushort)(lgid & 0x3ff);
+ }
+
+ public static uint LGID(IntPtr HKL)
+ {
+ unchecked
+ {
+ return (uint)((ulong)HKL & 0xffff);
+ }
+ }
+
+ public const int SORT_DEFAULT = 0;
+ public const int LANG_ZH = 0x0004;
+ public const int LANG_JA = 0x0011;
+ public const int LANG_KO = 0x0012;
+
+ public const int CFS_FORCE_POSITION = 0x0020;
+ public const int CFS_CANDIDATEPOS = 0x0040;
+ public const int CFS_EXCLUDE = 0x0080;
+ public const int CFS_POINT = 0x0002;
+ public const int CFS_RECT = 0x0001;
+
+ // lParam for WM_IME_SETCONTEXT
+ public const long ISC_SHOWUICANDIDATEWINDOW = 0x00000001;
+ public const long ISC_SHOWUICOMPOSITIONWINDOW = 0x80000000;
+ public const long ISC_SHOWUIGUIDELINE = 0x40000000;
+ public const long ISC_SHOWUIALLCANDIDATEWINDOW = 0x0000000F;
+ public const long ISC_SHOWUIALL = 0xC000000F;
+
+ public const int NI_COMPOSITIONSTR = 21;
+ public const int CPS_COMPLETE = 1;
+ public const int CPS_CONVERT = 2;
+ public const int CPS_REVERT = 3;
+ public const int CPS_CANCEL = 4;
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CANDIDATEFORM
+ {
+ public int dwIndex;
+ public int dwStyle;
+ public POINT ptCurrentPos;
+ public RECT rcArea;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct COMPOSITIONFORM
+ {
+ public int dwStyle;
+ public POINT ptCurrentPos;
+ public RECT rcArea;
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct LOGFONT
+ {
+ public int lfHeight;
+ public int lfWidth;
+ public int lfEscapement;
+ public int lfOrientation;
+ public int lfWeight;
+ public byte lfItalic;
+ public byte lfUnderline;
+ public byte lfStrikeOut;
+ public byte lfCharSet;
+ public byte lfOutPrecision;
+ public byte lfClipPrecision;
+ public byte lfQuality;
+ public byte lfPitchAndFamily;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
+ public string lfFaceName;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct WindowCompositionAttributeData
+ {
+ public WindowCompositionAttribute Attribute;
+ public IntPtr Data;
+ public int SizeOfData;
+ }
+
+ internal enum WindowCompositionAttribute
+ {
+ // ...
+ WCA_ACCENT_POLICY = 19
+ // ...
+ }
+
+ internal enum AccentState
+ {
+ ACCENT_DISABLED = 0,
+ ACCENT_ENABLE_GRADIENT = 1,
+ ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
+ ACCENT_ENABLE_BLURBEHIND = 3,
+ ACCENT_ENABLE_ACRYLIC = 4, //1703 and above
+ ACCENT_ENABLE_HOSTBACKDROP = 5, // RS5 1809
+ ACCENT_INVALID_STATE = 6
+ }
+
+ internal enum AccentFlags
+ {
+ DrawLeftBorder = 0x20,
+ DrawTopBorder = 0x40,
+ DrawRightBorder = 0x80,
+ DrawBottomBorder = 0x100,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AccentPolicy
+ {
+ public AccentState AccentState;
+ public int AccentFlags;
+ public int GradientColor;
+ public int AnimationId;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct MARGINS
+ {
+ public int cxLeftWidth;
+ public int cxRightWidth;
+ public int cyTopHeight;
+ public int cyBottomHeight;
+ }
+
+ public enum MONITOR
+ {
+ MONITOR_DEFAULTTONULL = 0x00000000,
+ MONITOR_DEFAULTTOPRIMARY = 0x00000001,
+ MONITOR_DEFAULTTONEAREST = 0x00000002,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct MONITORINFO
+ {
+ public int cbSize;
+ public RECT rcMonitor;
+ public RECT rcWork;
+ public int dwFlags;
+
+ public static MONITORINFO Create()
+ {
+ return new MONITORINFO() { cbSize = Marshal.SizeOf() };
+ }
+
+ public enum MonitorOptions : uint
+ {
+ MONITOR_DEFAULTTONULL = 0x00000000,
+ MONITOR_DEFAULTTOPRIMARY = 0x00000001,
+ MONITOR_DEFAULTTONEAREST = 0x00000002
+ }
+ }
+
+ public enum DEVICECAP
+ {
+ HORZRES = 8,
+ BITSPIXEL = 12,
+ PLANES = 14,
+ DESKTOPHORZRES = 118
+ }
+
+ public enum PROCESS_DPI_AWARENESS
+ {
+ PROCESS_DPI_UNAWARE = 0,
+ PROCESS_SYSTEM_DPI_AWARE = 1,
+ PROCESS_PER_MONITOR_DPI_AWARE = 2
+ }
+
+ public enum MONITOR_DPI_TYPE
+ {
+ MDT_EFFECTIVE_DPI = 0,
+ MDT_ANGULAR_DPI = 1,
+ MDT_RAW_DPI = 2,
+ MDT_DEFAULT = MDT_EFFECTIVE_DPI
+ }
+
+ public enum ClipboardFormat
+ {
+ ///
+ /// Text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data. Use this format for ANSI text.
+ ///
+ CF_TEXT = 1,
+ ///
+ /// A handle to a bitmap
+ ///
+ CF_BITMAP = 2,
+ ///
+ /// A memory object containing a BITMAPINFO structure followed by the bitmap bits.
+ ///
+ CF_DIB = 3,
+ ///
+ /// Unicode text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
+ ///
+ CF_UNICODETEXT = 13,
+ ///
+ /// A handle to type HDROP that identifies a list of files.
+ ///
+ CF_HDROP = 15,
+ }
+
+ public struct MSG
+ {
+ public IntPtr hwnd;
+ public uint message;
+ public IntPtr wParam;
+ public IntPtr lParam;
+ public uint time;
+ public POINT pt;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct PAINTSTRUCT
+ {
+ public IntPtr hdc;
+ public bool fErase;
+ public RECT rcPaint;
+ public bool fRestore;
+ public bool fIncUpdate;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
+ public byte[] rgbReserved;
+ }
+
+ public struct POINT
+ {
+ public int X;
+ public int Y;
+ }
+
+ public struct SIZE
+ {
+ public int X;
+ public int Y;
+ }
+
+ public struct SIZE_F
+ {
+ public float X;
+ public float Y;
+ }
+
+ public struct RECT
+ {
+ public int left;
+ public int top;
+ public int right;
+ public int bottom;
+
+ public int Width => right - left;
+ public int Height => bottom - top;
+ public RECT(IntPtr rect)
+ {
+
+ }
+
+ public void Offset(POINT pt)
+ {
+ left += pt.X;
+ right += pt.X;
+ top += pt.Y;
+ bottom += pt.Y;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct WINDOWPOS
+ {
+ public IntPtr hwnd;
+ public IntPtr hwndInsertAfter;
+ public int x;
+ public int y;
+ public int cx;
+ public int cy;
+ public uint flags;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct NCCALCSIZE_PARAMS
+ {
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
+ public RECT[] rgrc;
+ public WINDOWPOS lppos;
+ }
+
+ public struct TRACKMOUSEEVENT
+ {
+ public int cbSize;
+ public uint dwFlags;
+ public IntPtr hwndTrack;
+ public int dwHoverTime;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct WINDOWPLACEMENT
+ {
+ ///
+ /// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT).
+ ///
+ /// GetWindowPlacement and SetWindowPlacement fail if this member is not set correctly.
+ ///
+ ///
+ public int Length;
+
+ ///
+ /// Specifies flags that control the position of the minimized window and the method by which the window is restored.
+ ///
+ public int Flags;
+
+ ///
+ /// The current show state of the window.
+ ///
+ public ShowWindowCommand ShowCmd;
+
+ ///
+ /// The coordinates of the window's upper-left corner when the window is minimized.
+ ///
+ public POINT MinPosition;
+
+ ///
+ /// The coordinates of the window's upper-left corner when the window is maximized.
+ ///
+ public POINT MaxPosition;
+
+ ///
+ /// The window's coordinates when the window is in the restored position.
+ ///
+ public RECT NormalPosition;
+
+ ///
+ /// Gets the default (empty) value.
+ ///
+ public static WINDOWPLACEMENT Default
+ {
+ get
+ {
+ WINDOWPLACEMENT result = new WINDOWPLACEMENT();
+ result.Length = Marshal.SizeOf();
+ return result;
+ }
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct WNDCLASSEX
+ {
+ public int cbSize;
+ public int style;
+ public WndProc lpfnWndProc;
+ public int cbClsExtra;
+ public int cbWndExtra;
+ public IntPtr hInstance;
+ public IntPtr hIcon;
+ public IntPtr hCursor;
+ public IntPtr hbrBackground;
+ public string lpszMenuName;
+ public string lpszClassName;
+ public IntPtr hIconSm;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct TOUCHINPUT
+ {
+ public int X;
+ public int Y;
+ public IntPtr Source;
+ public uint Id;
+ public TouchInputFlags Flags;
+ public int Mask;
+ public uint Time;
+ public IntPtr ExtraInfo;
+ public int CxContact;
+ public int CyContact;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct ICONINFO
+ {
+ public bool IsIcon;
+ public int xHotspot;
+ public int yHotspot;
+ public IntPtr MaskBitmap;
+ public IntPtr ColorBitmap;
+ };
+
+ [Flags]
+ public enum TouchInputFlags
+ {
+ ///
+ /// Movement has occurred. Cannot be combined with TOUCHEVENTF_DOWN.
+ ///
+ TOUCHEVENTF_MOVE = 0x0001,
+
+ ///
+ /// The corresponding touch point was established through a new contact. Cannot be combined with TOUCHEVENTF_MOVE or TOUCHEVENTF_UP.
+ ///
+ TOUCHEVENTF_DOWN = 0x0002,
+
+ ///
+ /// A touch point was removed.
+ ///
+ TOUCHEVENTF_UP = 0x0004,
+
+ ///
+ /// A touch point is in range. This flag is used to enable touch hover support on compatible hardware. Applications that do not want support for hover can ignore this flag.
+ ///
+ TOUCHEVENTF_INRANGE = 0x0008,
+
+ ///
+ /// Indicates that this TOUCHINPUT structure corresponds to a primary contact point. See the following text for more information on primary touch points.
+ ///
+ TOUCHEVENTF_PRIMARY = 0x0010,
+
+ ///
+ /// When received using GetTouchInputInfo, this input was not coalesced.
+ ///
+ TOUCHEVENTF_NOCOALESCE = 0x0020,
+
+ ///
+ /// The touch event came from the user's palm.
+ ///
+ TOUCHEVENTF_PALM = 0x0080
+ }
+
+ [Flags]
+ public enum OpenFileNameFlags
+ {
+ OFN_ALLOWMULTISELECT = 0x00000200,
+ OFN_EXPLORER = 0x00080000,
+ OFN_HIDEREADONLY = 0x00000004,
+ OFN_NOREADONLYRETURN = 0x00008000,
+ OFN_OVERWRITEPROMPT = 0x00000002
+ }
+
+ public enum HRESULT : uint
+ {
+ S_FALSE = 0x0001,
+ S_OK = 0x0000,
+ E_INVALIDARG = 0x80070057,
+ E_OUTOFMEMORY = 0x8007000E,
+ E_NOTIMPL = 0x80004001,
+ E_UNEXPECTED = 0x8000FFFF,
+ E_CANCELLED = 0x800704C7,
+ }
+
+ public enum Icons
+ {
+ ICON_SMALL = 0,
+ ICON_BIG = 1
+ }
+
+ public static class ShellIds
+ {
+ public static readonly Guid OpenFileDialog = Guid.Parse("DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7");
+ public static readonly Guid SaveFileDialog = Guid.Parse("C0B4E2F3-BA21-4773-8DBA-335EC946EB8B");
+ public static readonly Guid IFileDialog = Guid.Parse("42F85136-DB7E-439C-85F1-E4075D135FC8");
+ public static readonly Guid IShellItem = Guid.Parse("43826D1E-E718-42EE-BC55-A1E261C37BFE");
+ public static readonly Guid TaskBarList = Guid.Parse("56FDF344-FD6D-11D0-958A-006097C9A090");
+ public static readonly Guid ITaskBarList2 = Guid.Parse("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf");
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct COMDLG_FILTERSPEC
+ {
+ [MarshalAs(UnmanagedType.LPWStr)]
+ public string pszName;
+ [MarshalAs(UnmanagedType.LPWStr)]
+ public string pszSpec;
+ }
+
+ public delegate void MarkFullscreenWindow(IntPtr This, IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fullscreen);
+ public delegate HRESULT HrInit(IntPtr This);
+
+ public struct ITaskBarList2VTable
+ {
+ public IntPtr IUnknown1;
+ public IntPtr IUnknown2;
+ public IntPtr IUnknown3;
+ public IntPtr HrInit;
+ public IntPtr AddTab;
+ public IntPtr DeleteTab;
+ public IntPtr ActivateTab;
+ public IntPtr SetActiveAlt;
+ public IntPtr MarkFullscreenWindow;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct _DROPFILES
+ {
+ public Int32 pFiles;
+ public Int32 X;
+ public Int32 Y;
+ public bool fNC;
+ public bool fWide;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct STGMEDIUM
+ {
+ public TYMED tymed;
+ public IntPtr unionmember;
+ public IntPtr pUnkForRelease;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct FORMATETC
+ {
+ public ushort cfFormat;
+ public IntPtr ptd;
+ public DVASPECT dwAspect;
+ public int lindex;
+ public TYMED tymed;
+ }
+
+ [Flags]
+ internal enum PixelFormatDescriptorFlags : uint
+ {
+ PFD_DOUBLEBUFFER = 0x00000001,
+ PFD_STEREO = 0x00000002,
+ PFD_DRAW_TO_WINDOW = 0x00000004,
+ PFD_DRAW_TO_BITMAP = 0x00000008,
+ PFD_SUPPORT_GDI = 0x00000010,
+ PFD_SUPPORT_OPENGL = 0x00000020,
+ PFD_GENERIC_FORMAT = 0x00000040,
+ PFD_NEED_PALETTE = 0x00000080,
+ PFD_NEED_SYSTEM_PALETTE = 0x00000100,
+ PFD_SWAP_EXCHANGE = 0x00000200,
+ PFD_SWAP_COPY = 0x00000400,
+ PFD_SWAP_LAYER_BUFFERS = 0x00000800,
+ PFD_GENERIC_ACCELERATED = 0x00001000,
+ PFD_SUPPORT_DIRECTDRAW = 0x00002000,
+ PFD_DEPTH_DONTCARE = 0x20000000,
+ PFD_DOUBLEBUFFER_DONTCARE = 0x40000000,
+ PFD_STEREO_DONTCARE = 0x80000000,
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct PixelFormatDescriptor
+ {
+ public ushort Size;
+ public ushort Version;
+ public PixelFormatDescriptorFlags Flags;
+ public byte PixelType;
+ public byte ColorBits;
+ public byte RedBits;
+ public byte RedShift;
+ public byte GreenBits;
+ public byte GreenShift;
+ public byte BlueBits;
+ public byte BlueShift;
+ public byte AlphaBits;
+ public byte AlphaShift;
+ public byte AccumBits;
+ public byte AccumRedBits;
+ public byte AccumGreenBits;
+ public byte AccumBlueBits;
+ public byte AccumAlphaBits;
+ public byte DepthBits;
+ public byte StencilBits;
+ public byte AuxBuffers;
+ public byte LayerType;
+ private byte Reserved;
+ public uint LayerMask;
+ public uint VisibleMask;
+ public uint DamageMask;
+ }
+
+ internal enum NIM : uint
+ {
+ ADD = 0x00000000,
+ MODIFY = 0x00000001,
+ DELETE = 0x00000002,
+ SETFOCUS = 0x00000003,
+ SETVERSION = 0x00000004
+ }
+
+ [Flags]
+ internal enum NIF : uint
+ {
+ MESSAGE = 0x00000001,
+ ICON = 0x00000002,
+ TIP = 0x00000004,
+ STATE = 0x00000008,
+ INFO = 0x00000010,
+ GUID = 0x00000020,
+ REALTIME = 0x00000040,
+ SHOWTIP = 0x00000080
+ }
+
+ [Flags]
+ internal enum NIIF : uint
+ {
+ NONE = 0x00000000,
+ INFO = 0x00000001,
+ WARNING = 0x00000002,
+ ERROR = 0x00000003,
+ USER = 0x00000004,
+ ICON_MASK = 0x0000000F,
+ NOSOUND = 0x00000010,
+ LARGE_ICON = 0x00000020,
+ RESPECT_QUIET_TIME = 0x00000080
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
+ internal class NOTIFYICONDATA
+ {
+ public int cbSize = Marshal.SizeOf();
+ public IntPtr hWnd;
+ public int uID;
+ public NIF uFlags;
+ public int uCallbackMessage;
+ public IntPtr hIcon;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string? szTip;
+ public int dwState = 0;
+ public int dwStateMask = 0;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string? szInfo;
+ public int uTimeoutOrVersion;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+ public string? szInfoTitle;
+ public NIIF dwInfoFlags;
+ }
+}
\ No newline at end of file