csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1399 lines
52 KiB
1399 lines
52 KiB
// Copyright (c) The Avalonia Project. All rights reserved.
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
using System;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.InteropServices.ComTypes;
|
|
using System.Text;
|
|
|
|
// ReSharper disable InconsistentNaming
|
|
#pragma warning disable 169, 649
|
|
|
|
namespace Avalonia.Win32.Interop
|
|
{
|
|
[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 static class UnmanagedMethods
|
|
{
|
|
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);
|
|
|
|
public delegate IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
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 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_CONTROL = 0x0008,
|
|
|
|
MK_LBUTTON = 0x0001,
|
|
|
|
MK_MBUTTON = 0x0010,
|
|
|
|
MK_RBUTTON = 0x0002,
|
|
|
|
MK_SHIFT = 0x0004,
|
|
|
|
MK_XBUTTON1 = 0x0020,
|
|
|
|
MK_XBUTTON2 = 0x0040
|
|
}
|
|
|
|
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_VISIBLE = 0x10000000,
|
|
WS_VSCROLL = 0x200000,
|
|
WS_EX_DLGMODALFRAME = 0x00000001,
|
|
WS_EX_NOPARENTNOTIFY = 0x00000004,
|
|
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
|
|
}
|
|
|
|
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_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_APP = 0x8000,
|
|
WM_USER = 0x0400,
|
|
|
|
WM_DISPATCH_WORK_ITEM = WM_USER,
|
|
}
|
|
|
|
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 */
|
|
};
|
|
|
|
[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)Marshal.SizeOf(this);
|
|
}
|
|
}
|
|
|
|
[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;
|
|
}
|
|
|
|
public const int SizeOf_BITMAPINFOHEADER = 40;
|
|
|
|
[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 Rect 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("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)]
|
|
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);
|
|
|
|
[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")]
|
|
public static extern bool GetKeyboardState(byte[] lpKeyState);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "GetMessageW")]
|
|
public static extern sbyte GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int GetMessageTime();
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern IntPtr GetModuleHandle(string lpModuleName);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern uint GetCurrentThreadId();
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int GetSystemMetrics(SystemMetric smIndex);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern uint GetWindowLongPtr(IntPtr hWnd, int nIndex);
|
|
|
|
[DllImport("user32.dll", SetLastError = true, EntryPoint = "GetWindowLong")]
|
|
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 = "SetWindowLong")]
|
|
private static extern uint SetWindowLong32b(IntPtr hWnd, int nIndex, uint value);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
private static extern uint SetWindowLongPtr(IntPtr hWnd, int nIndex, uint value);
|
|
|
|
public static uint SetWindowLong(IntPtr hWnd, int nIndex, uint value)
|
|
{
|
|
if (IntPtr.Size == 4)
|
|
{
|
|
return SetWindowLong32b(hWnd, nIndex, value);
|
|
}
|
|
else
|
|
{
|
|
return SetWindowLongPtr(hWnd, nIndex, value);
|
|
}
|
|
}
|
|
|
|
[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 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")]
|
|
public static extern IntPtr LoadCursor(IntPtr hInstance, IntPtr lpCursorName);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool PeekMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);
|
|
|
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "RegisterClassExW")]
|
|
public static extern ushort RegisterClassEx(ref WNDCLASSEX lpwcx);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool ReleaseCapture();
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern IntPtr SetActiveWindow(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 bool SetParent(IntPtr hWnd, IntPtr hWndNewParent);
|
|
[DllImport("user32.dll")]
|
|
public static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommand nCmdShow);
|
|
|
|
[DllImport("Winmm.dll")]
|
|
public static extern uint timeKillEvent(uint uTimerID);
|
|
|
|
[DllImport("Winmm.dll")]
|
|
public static extern uint timeSetEvent(uint uDelay, uint uResolution, TimeCallback lpTimeProc, UIntPtr dwUser, uint fuEvent);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int ToUnicode(
|
|
uint virtualKeyCode,
|
|
uint scanCode,
|
|
byte[] keyboardState,
|
|
[Out, MarshalAs(UnmanagedType.LPWStr, SizeConst = 64)]
|
|
StringBuilder receivingBuffer,
|
|
int bufferSize,
|
|
uint flags);
|
|
|
|
[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")]
|
|
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
|
|
{
|
|
GCL_HCURSOR = -12,
|
|
GCL_HICON = -14
|
|
}
|
|
|
|
[DllImport("user32.dll", EntryPoint = "SetClassLongPtr")]
|
|
private static extern IntPtr SetClassLong64(IntPtr hWnd, ClassLongIndex nIndex, IntPtr dwNewLong);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "SetClassLong")]
|
|
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);
|
|
}
|
|
|
|
[DllImport("ole32.dll", PreserveSig = true)]
|
|
internal static extern int CoCreateInstance(ref Guid clsid,
|
|
IntPtr ignore1, int ignore2, ref Guid iid, [MarshalAs(UnmanagedType.IUnknown), Out] out object pUnkOuter);
|
|
|
|
|
|
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
internal static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IntPtr pbc, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out IShellItem 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("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)]
|
|
public static extern IntPtr LoadLibrary(string fileName);
|
|
|
|
[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("shcore.dll")]
|
|
public static extern long GetDpiForMonitor(IntPtr hmonitor, MONITOR_DPI_TYPE dpiType, out uint dpiX, out uint dpiY);
|
|
|
|
[DllImport("shcore.dll")]
|
|
public static extern void GetScaleFactorForMonitor(IntPtr hMon, out uint pScale);
|
|
|
|
[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, [Out] MONITORINFO lpmi);
|
|
|
|
[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")]
|
|
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("kernel32.dll", SetLastError = 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, IDropTarget target);
|
|
|
|
[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.Auto, SetLastError = true)]
|
|
public static extern int GetClipboardFormatName(int format, StringBuilder lpString, int cchMax);
|
|
|
|
[DllImport("user32.dll", BestFitMapping = false, CharSet = CharSet.Auto, SetLastError = 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.Auto)]
|
|
public static extern int DragQueryFile(IntPtr hDrop, int iFile, StringBuilder lpszFile, int cch);
|
|
|
|
[DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true, PreserveSig = false)]
|
|
public static extern void DoDragDrop(IDataObject dataObject, IDropSource dropSource, int allowedEffects, int[] finalEffect);
|
|
|
|
|
|
|
|
public enum MONITOR
|
|
{
|
|
MONITOR_DEFAULTTONULL = 0x00000000,
|
|
MONITOR_DEFAULTTOPRIMARY = 0x00000001,
|
|
MONITOR_DEFAULTTONEAREST = 0x00000002,
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal class MONITORINFO
|
|
{
|
|
public int cbSize = Marshal.SizeOf<MONITORINFO>();
|
|
public RECT rcMonitor = new RECT();
|
|
public RECT rcWork = new RECT();
|
|
public int dwFlags = 0;
|
|
|
|
public enum MonitorOptions : uint
|
|
{
|
|
MONITOR_DEFAULTTONULL = 0x00000000,
|
|
MONITOR_DEFAULTTOPRIMARY = 0x00000001,
|
|
MONITOR_DEFAULTTONEAREST = 0x00000002
|
|
}
|
|
}
|
|
|
|
|
|
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
|
|
{
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
CF_TEXT = 1,
|
|
/// <summary>
|
|
/// A handle to a bitmap
|
|
/// </summary>
|
|
CF_BITMAP = 2,
|
|
/// <summary>
|
|
/// A memory object containing a BITMAPINFO structure followed by the bitmap bits.
|
|
/// </summary>
|
|
CF_DIB = 3,
|
|
/// <summary>
|
|
/// Unicode text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
|
|
/// </summary>
|
|
CF_UNICODETEXT = 13,
|
|
/// <summary>
|
|
/// A handle to type HDROP that identifies a list of files.
|
|
/// </summary>
|
|
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 RECT
|
|
{
|
|
public int left;
|
|
public int top;
|
|
public int right;
|
|
public int bottom;
|
|
|
|
public RECT(Rect rect)
|
|
{
|
|
left = (int)rect.X;
|
|
top = (int)rect.Y;
|
|
right = (int)(rect.X + rect.Width);
|
|
bottom = (int)(rect.Y + rect.Height);
|
|
}
|
|
}
|
|
|
|
public struct TRACKMOUSEEVENT
|
|
{
|
|
public int cbSize;
|
|
public uint dwFlags;
|
|
public IntPtr hwndTrack;
|
|
public int dwHoverTime;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct WINDOWPLACEMENT
|
|
{
|
|
/// <summary>
|
|
/// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT).
|
|
/// <para>
|
|
/// GetWindowPlacement and SetWindowPlacement fail if this member is not set correctly.
|
|
/// </para>
|
|
/// </summary>
|
|
public int Length;
|
|
|
|
/// <summary>
|
|
/// Specifies flags that control the position of the minimized window and the method by which the window is restored.
|
|
/// </summary>
|
|
public int Flags;
|
|
|
|
/// <summary>
|
|
/// The current show state of the window.
|
|
/// </summary>
|
|
public ShowWindowCommand ShowCmd;
|
|
|
|
/// <summary>
|
|
/// The coordinates of the window's upper-left corner when the window is minimized.
|
|
/// </summary>
|
|
public POINT MinPosition;
|
|
|
|
/// <summary>
|
|
/// The coordinates of the window's upper-left corner when the window is maximized.
|
|
/// </summary>
|
|
public POINT MaxPosition;
|
|
|
|
/// <summary>
|
|
/// The window's coordinates when the window is in the restored position.
|
|
/// </summary>
|
|
public RECT NormalPosition;
|
|
|
|
/// <summary>
|
|
/// Gets the default (empty) value.
|
|
/// </summary>
|
|
public static WINDOWPLACEMENT Default
|
|
{
|
|
get
|
|
{
|
|
WINDOWPLACEMENT result = new WINDOWPLACEMENT();
|
|
result.Length = Marshal.SizeOf(result);
|
|
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;
|
|
}
|
|
|
|
[Flags]
|
|
public enum OpenFileNameFlags
|
|
{
|
|
|
|
OFN_ALLOWMULTISELECT = 0x00000200,
|
|
|
|
OFN_EXPLORER = 0x00080000,
|
|
|
|
OFN_HIDEREADONLY = 0x00000004,
|
|
|
|
OFN_NOREADONLYRETURN = 0x00008000,
|
|
|
|
OFN_OVERWRITEPROMPT = 0x00000002
|
|
|
|
}
|
|
|
|
public enum HRESULT : long
|
|
{
|
|
S_FALSE = 0x0001,
|
|
S_OK = 0x0000,
|
|
E_INVALIDARG = 0x80070057,
|
|
E_OUTOFMEMORY = 0x8007000E,
|
|
E_NOTIMPL = 0x80004001,
|
|
E_UNEXPECTED = 0x8000FFFF,
|
|
}
|
|
|
|
public enum Icons
|
|
{
|
|
ICON_SMALL = 0,
|
|
ICON_BIG = 1
|
|
}
|
|
|
|
public const uint SIGDN_FILESYSPATH = 0x80058000;
|
|
|
|
[Flags]
|
|
internal enum FOS : uint
|
|
{
|
|
FOS_OVERWRITEPROMPT = 0x00000002,
|
|
FOS_STRICTFILETYPES = 0x00000004,
|
|
FOS_NOCHANGEDIR = 0x00000008,
|
|
FOS_PICKFOLDERS = 0x00000020,
|
|
FOS_FORCEFILESYSTEM = 0x00000040, // Ensure that items returned are filesystem items.
|
|
FOS_ALLNONSTORAGEITEMS = 0x00000080, // Allow choosing items that have no storage.
|
|
FOS_NOVALIDATE = 0x00000100,
|
|
FOS_ALLOWMULTISELECT = 0x00000200,
|
|
FOS_PATHMUSTEXIST = 0x00000800,
|
|
FOS_FILEMUSTEXIST = 0x00001000,
|
|
FOS_CREATEPROMPT = 0x00002000,
|
|
FOS_SHAREAWARE = 0x00004000,
|
|
FOS_NOREADONLYRETURN = 0x00008000,
|
|
FOS_NOTESTFILECREATE = 0x00010000,
|
|
FOS_HIDEMRUPLACES = 0x00020000,
|
|
FOS_HIDEPINNEDPLACES = 0x00040000,
|
|
FOS_NODEREFERENCELINKS = 0x00100000,
|
|
FOS_DONTADDTORECENT = 0x02000000,
|
|
FOS_FORCESHOWHIDDEN = 0x10000000,
|
|
FOS_DEFAULTNOMINIMODE = 0x20000000
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
public struct OpenFileName
|
|
{
|
|
public int lStructSize;
|
|
public IntPtr hwndOwner;
|
|
public IntPtr hInstance;
|
|
public IntPtr lpstrFilter;
|
|
public IntPtr lpstrCustomFilter;
|
|
public int nMaxCustFilter;
|
|
public int nFilterIndex;
|
|
public IntPtr lpstrFile;
|
|
public int nMaxFile;
|
|
public IntPtr lpstrFileTitle;
|
|
public int nMaxFileTitle;
|
|
public IntPtr lpstrInitialDir;
|
|
public IntPtr lpstrTitle;
|
|
public OpenFileNameFlags Flags;
|
|
private readonly ushort Unused;
|
|
private readonly ushort Unused2;
|
|
public IntPtr lpstrDefExt;
|
|
public IntPtr lCustData;
|
|
public IntPtr lpfnHook;
|
|
public IntPtr lpTemplateName;
|
|
public IntPtr reservedPtr;
|
|
public int reservedInt;
|
|
public int flagsEx;
|
|
}
|
|
}
|
|
|
|
[ComImport(), Guid("42F85136-DB7E-439C-85F1-E4075D135FC8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
internal interface IFileDialog
|
|
{
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
[PreserveSig()]
|
|
uint Show([In, Optional] IntPtr hwndOwner); //IModalWindow
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr rgFilterSpec);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetFileTypeIndex([In] uint iFileType);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetFileTypeIndex(out uint piFileType);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint Advise([In, MarshalAs(UnmanagedType.Interface)] IntPtr pfde, out uint pdwCookie);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint Unadvise([In] uint dwCookie);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetOptions([In] uint fos);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetOptions(out uint fos);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, uint fdap);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint Close([MarshalAs(UnmanagedType.Error)] uint hr);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetClientGuid([In] ref Guid guid);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint ClearClientData();
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter);
|
|
|
|
}
|
|
|
|
|
|
[ComImport, Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
internal interface IShellItem
|
|
{
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint BindToHandler([In] IntPtr pbc, [In] ref Guid rbhid, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.Interface)] out IntPtr ppvOut);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetDisplayName([In] uint sigdnName, out IntPtr ppszName);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs);
|
|
|
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
|
uint Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder);
|
|
|
|
}
|
|
|
|
[Flags]
|
|
internal enum DropEffect : int
|
|
{
|
|
None = 0,
|
|
Copy = 1,
|
|
Move = 2,
|
|
Link = 4,
|
|
Scroll = -2147483648,
|
|
}
|
|
|
|
|
|
|
|
[ComImport]
|
|
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
[Guid("00000122-0000-0000-C000-000000000046")]
|
|
internal interface IDropTarget
|
|
{
|
|
[PreserveSig]
|
|
UnmanagedMethods.HRESULT DragEnter([MarshalAs(UnmanagedType.Interface)] [In] IDataObject pDataObj, [MarshalAs(UnmanagedType.U4)] [In] int grfKeyState, [MarshalAs(UnmanagedType.U8)] [In] long pt, [In] [Out] ref DropEffect pdwEffect);
|
|
[PreserveSig]
|
|
UnmanagedMethods.HRESULT DragOver([MarshalAs(UnmanagedType.U4)] [In] int grfKeyState, [MarshalAs(UnmanagedType.U8)] [In] long pt, [In] [Out] ref DropEffect pdwEffect);
|
|
[PreserveSig]
|
|
UnmanagedMethods.HRESULT DragLeave();
|
|
[PreserveSig]
|
|
UnmanagedMethods.HRESULT Drop([MarshalAs(UnmanagedType.Interface)] [In] IDataObject pDataObj, [MarshalAs(UnmanagedType.U4)] [In] int grfKeyState, [MarshalAs(UnmanagedType.U8)] [In] long pt, [In] [Out] ref DropEffect pdwEffect);
|
|
}
|
|
|
|
[ComImport]
|
|
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
[Guid("00000121-0000-0000-C000-000000000046")]
|
|
internal interface IDropSource
|
|
{
|
|
[PreserveSig]
|
|
int QueryContinueDrag(int fEscapePressed, [MarshalAs(UnmanagedType.U4)] [In] int grfKeyState);
|
|
[PreserveSig]
|
|
int GiveFeedback([MarshalAs(UnmanagedType.U4)] [In] int dwEffect);
|
|
}
|
|
|
|
|
|
[StructLayoutAttribute(LayoutKind.Sequential)]
|
|
internal struct _DROPFILES
|
|
{
|
|
public Int32 pFiles;
|
|
public Int32 X;
|
|
public Int32 Y;
|
|
public bool fNC;
|
|
public bool fWide;
|
|
}
|
|
}
|
|
|