/***********************************************************************\
*                               winuser.d                               *
*                                                                       *
*                       Windows API header module                       *
*                                                                       *
*                 Translated from MinGW Windows headers                 *
*                                                                       *
*                       Placed into public domain                       *
\***********************************************************************/
module win32.winuser;
pragma(lib, "user32");

// Conversion Notes:
// The following macros were for win16 only, and are not included in this file:
//#define EnumTaskWindows(h, f, p) EnumThreadWindows((DWORD)h, f, p)
//#define PostAppMessageA(t, m, w, l) PostThreadMessageA((DWORD)t, m, w, l)
//#define PostAppMessageW(t, m, w, l) PostThreadMessageW((DWORD)t, m, w, l)
//#define GetSysModalWindow() (NULL)
//#define SetSysModalWindow(h) (NULL)
//#define GetWindowTask(hWnd) ((HANDLE)GetWindowThreadProcessId(hWnd, NULL))
//#define DefHookProc(c, p, lp, h) CallNextHookEx((HHOOK)*h, c, p, lp)

private import win32.w32api, win32.winbase, win32.wingdi;
private import win32.windef; // for HMONITOR

// FIXME: clean up Windows version support

template MAKEINTATOM_T(int i) {
	const LPTSTR MAKEINTATOM_T = cast(LPTSTR) i;
}

const WC_DIALOG = MAKEINTATOM_T!(0x8002);

const FAPPCOMMAND_MOUSE = 0x8000;
const FAPPCOMMAND_KEY   = 0;
const FAPPCOMMAND_OEM   = 0x1000;
const FAPPCOMMAND_MASK  = 0xF000;

const FVIRTKEY  = 1;
const FNOINVERT = 2;
const FSHIFT    = 4;
const FCONTROL  = 8;
const FALT      = 16;

const ATF_TIMEOUTON     = 1;
const ATF_ONOFFFEEDBACK = 2;
const ATF_AVAILABLE     = 4; // May be obsolete. Not in recent MS docs.

const WH_MIN             = -1;
const WH_MSGFILTER       =  -1;
const WH_JOURNALRECORD   = 0;
const WH_JOURNALPLAYBACK = 1;
const WH_KEYBOARD        = 2;
const WH_GETMESSAGE      = 3;
const WH_CALLWNDPROC     = 4;
const WH_CBT             = 5;
const WH_SYSMSGFILTER    = 6;
const WH_MOUSE           = 7;
const WH_HARDWARE        = 8;
const WH_DEBUG           = 9;
const WH_SHELL           = 10;
const WH_FOREGROUNDIDLE  = 11;
const WH_CALLWNDPROCRET  = 12;
const WH_KEYBOARD_LL     = 13;
const WH_MOUSE_LL        = 14;
const WH_MAX             = 14;
const WH_MINHOOK         = WH_MIN;
const WH_MAXHOOK         = WH_MAX;

enum {
	HC_ACTION = 0,
	HC_GETNEXT,
	HC_SKIP,
	HC_NOREMOVE, // = 3
	HC_NOREM = HC_NOREMOVE,
	HC_SYSMODALON,
	HC_SYSMODALOFF
}

enum {
	HCBT_MOVESIZE = 0,
	HCBT_MINMAX,
	HCBT_QS,
	HCBT_CREATEWND,
	HCBT_DESTROYWND,
	HCBT_ACTIVATE,
	HCBT_CLICKSKIPPED,
	HCBT_KEYSKIPPED,
	HCBT_SYSCOMMAND,
	HCBT_SETFOCUS // = 9
}

enum {
	CF_TEXT                = 0x0001,
	CF_BITMAP,
	CF_METAFILEPICT,
	CF_SYLK,
	CF_DIF,
	CF_TIFF,
	CF_OEMTEXT,
	CF_DIB,
	CF_PALETTE,
	CF_PENDATA,
	CF_RIFF,
	CF_WAVE,
	CF_UNICODETEXT,
	CF_ENHMETAFILE,
	CF_HDROP,
	CF_LOCALE,
	CF_MAX,             // = 0x0011
	CF_OWNERDISPLAY        = 0x0080,
	CF_DSPTEXT,
	CF_DSPBITMAP,
	CF_DSPMETAFILEPICT, // = 0x0083
	CF_DSPENHMETAFILE      = 0x008E,
	CF_PRIVATEFIRST        = 0x0200,
	CF_PRIVATELAST         = 0x02FF,
	CF_GDIOBJFIRST         = 0x0300,
	CF_GDIOBJLAST          = 0x03FF
}

const HKL_PREV = 0;
const HKL_NEXT = 1;

const KLF_ACTIVATE       = 1;
const KLF_SUBSTITUTE_OK  = 2;
const KLF_UNLOADPREVIOUS = 4;
const KLF_REORDER        = 8;
const KLF_REPLACELANG    = 16;
const KLF_NOTELLSHELL    = 128;
const KLF_SETFORPROCESS  = 256;
const KL_NAMELENGTH      = 9;

const MF_ENABLED = 0;
const MF_GRAYED = 1;
const MF_DISABLED = 2;
const MF_BITMAP = 4;
const MF_CHECKED = 8;
const MF_MENUBARBREAK = 32;
const MF_MENUBREAK = 64;
const MF_OWNERDRAW = 256;
const MF_POPUP = 16;
const MF_SEPARATOR = 0x800;
const MF_STRING = 0;
const MF_UNCHECKED = 0;
const MF_DEFAULT = 4096;
const MF_SYSMENU = 0x2000;
const MF_HELP = 0x4000;
const MF_END = 128;
const MF_RIGHTJUSTIFY = 0x4000;
const MF_MOUSESELECT = 0x8000;
const MF_INSERT = 0;
const MF_CHANGE = 128;
const MF_APPEND = 256;
const MF_DELETE = 512;
const MF_REMOVE = 4096;
const MF_USECHECKBITMAPS = 512;
const MF_UNHILITE = 0;
const MF_HILITE = 128;

// Also defined in dbt.h
const BSM_ALLCOMPONENTS      = 0;
const BSM_VXDS               = 1;
const BSM_NETDRIVER          = 2;
const BSM_INSTALLABLEDRIVERS = 4;
const BSM_APPLICATIONS       = 8;
const BSM_ALLDESKTOPS        = 16;

const BSF_QUERY              = 0x00000001;
const BSF_IGNORECURRENTTASK  = 0x00000002;
const BSF_FLUSHDISK          = 0x00000004;
const BSF_NOHANG             = 0x00000008;
const BSF_POSTMESSAGE        = 0x00000010;
const BSF_FORCEIFHUNG        = 0x00000020;
const BSF_NOTIMEOUTIFNOTHUNG = 0x00000040;

const BSF_ALLOWSFW          = 0x00000080;
const BSF_SENDNOTIFYMESSAGE = 0x00000100;

static if (_WIN32_WINNT >= 0x501) {
	const BSF_RETURNHDESK       = 0x00000200;
	const BSF_LUID              = 0x00000400;
}

const BROADCAST_QUERY_DENY = 1112363332;
const DWORD ENUM_CURRENT_SETTINGS  = -1;
const DWORD ENUM_REGISTRY_SETTINGS = -2;

const CDS_UPDATEREGISTRY = 1;
const CDS_TEST           = 2;
const CDS_FULLSCREEN     = 4;
const CDS_GLOBAL         = 8;
const CDS_SET_PRIMARY    = 16;
const CDS_NORESET        = 0x10000000;
const CDS_SETRECT        = 0x20000000;
const CDS_RESET          = 0x40000000;

const DISP_CHANGE_RESTART    = 1;
const DISP_CHANGE_SUCCESSFUL = 0;
const DISP_CHANGE_FAILED     = -1;
const DISP_CHANGE_BADMODE    = -2;
const DISP_CHANGE_NOTUPDATED = -3;
const DISP_CHANGE_BADFLAGS   = -4;
const DISP_CHANGE_BADPARAM   = -5;

const BST_UNCHECKED     = 0;
const BST_CHECKED       = 1;
const BST_INDETERMINATE = 2;
const BST_PUSHED        = 4;
const BST_FOCUS         = 8;

const MF_BYCOMMAND  = 0;
const MF_BYPOSITION = 1024;
// [Redefined] MF_UNCHECKED=0
// [Redefined] MF_HILITE=128
// [Redefined] MF_UNHILITE=0

const CWP_ALL             = 0;
const CWP_SKIPINVISIBLE   = 1;
const CWP_SKIPDISABLED    = 2;
const CWP_SKIPTRANSPARENT = 4;

const IMAGE_BITMAP=0;
const IMAGE_ICON=1;
const IMAGE_CURSOR=2;
const IMAGE_ENHMETAFILE=3;

const DF_ALLOWOTHERACCOUNTHOOK = 1;

const DESKTOP_READOBJECTS     = 1;
const DESKTOP_CREATEWINDOW    = 2;
const DESKTOP_CREATEMENU      = 4;
const DESKTOP_HOOKCONTROL     = 8;
const DESKTOP_JOURNALRECORD   = 16;
const DESKTOP_JOURNALPLAYBACK = 32;
const DESKTOP_ENUMERATE       = 64;
const DESKTOP_WRITEOBJECTS    = 128;
const DESKTOP_SWITCHDESKTOP   = 256;

const CW_USEDEFAULT       = 0x80000000;

enum {
	WS_OVERLAPPED       = 0,
	WS_TILED            = WS_OVERLAPPED,
	WS_MAXIMIZEBOX      = 0x00010000,
	WS_MINIMIZEBOX      = 0x00020000,
	WS_TABSTOP          = 0x00010000,
	WS_GROUP            = 0x00020000,
	WS_THICKFRAME       = 0x00040000,
	WS_SIZEBOX          = WS_THICKFRAME,
	WS_SYSMENU          = 0x00080000,
	WS_HSCROLL          = 0x00100000,
	WS_VSCROLL          = 0x00200000,
	WS_DLGFRAME         = 0x00400000,
	WS_BORDER           = 0x00800000,
	WS_CAPTION          = 0x00c00000,
	WS_OVERLAPPEDWINDOW = WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,
	WS_TILEDWINDOW      = WS_OVERLAPPEDWINDOW,
	WS_MAXIMIZE         = 0x01000000,
	WS_CLIPCHILDREN     = 0x02000000,
	WS_CLIPSIBLINGS     = 0x04000000,
	WS_DISABLED         = 0x08000000,
	WS_VISIBLE          = 0x10000000,
	WS_MINIMIZE         = 0x20000000,
	WS_ICONIC           = WS_MINIMIZE,
	WS_CHILD            = 0x40000000,
	WS_CHILDWINDOW      = 0x40000000,
	WS_POPUP            = 0x80000000,
	WS_POPUPWINDOW      = WS_POPUP|WS_BORDER|WS_SYSMENU,
}

const MDIS_ALLCHILDSTYLES = 1;

const BS_3STATE = 5;
const BS_AUTO3STATE = 6;
const BS_AUTOCHECKBOX = 3;
const BS_AUTORADIOBUTTON = 9;
const BS_BITMAP = 128;
const BS_BOTTOM = 0x800;
const BS_CENTER = 0x300;
const BS_CHECKBOX = 2;
const BS_DEFPUSHBUTTON = 1;
const BS_GROUPBOX = 7;
const BS_ICON = 64;
const BS_LEFT = 256;
const BS_LEFTTEXT = 32;
const BS_MULTILINE = 0x2000;
const BS_NOTIFY = 0x4000;
const BS_OWNERDRAW = 0xb;
const BS_PUSHBUTTON = 0;
const BS_PUSHLIKE = 4096;
const BS_RADIOBUTTON = 4;
const BS_RIGHT = 512;
const BS_RIGHTBUTTON = 32;
const BS_TEXT = 0;
const BS_TOP = 0x400;
const BS_USERBUTTON = 8;
const BS_VCENTER = 0xc00;
const BS_FLAT = 0x8000;

const CBS_AUTOHSCROLL = 64;
const CBS_DISABLENOSCROLL = 0x800;
const CBS_DROPDOWN = 2;
const CBS_DROPDOWNLIST = 3;
const CBS_HASSTRINGS = 512;
const CBS_LOWERCASE = 0x4000;
const CBS_NOINTEGRALHEIGHT = 0x400;
const CBS_OEMCONVERT = 128;
const CBS_OWNERDRAWFIXED = 16;
const CBS_OWNERDRAWVARIABLE = 32;
const CBS_SIMPLE = 1;
const CBS_SORT = 256;
const CBS_UPPERCASE = 0x2000;

const ES_AUTOHSCROLL = 128;
const ES_AUTOVSCROLL = 64;
const ES_CENTER = 1;
const ES_LEFT = 0;
const ES_LOWERCASE = 16;
const ES_MULTILINE = 4;
const ES_NOHIDESEL = 256;
const ES_NUMBER = 0x2000;
const ES_OEMCONVERT = 0x400;
const ES_PASSWORD = 32;
const ES_READONLY = 0x800;
const ES_RIGHT = 2;
const ES_UPPERCASE = 8;
const ES_WANTRETURN = 4096;

const LBS_DISABLENOSCROLL = 4096;
const LBS_EXTENDEDSEL = 0x800;
const LBS_HASSTRINGS = 64;
const LBS_MULTICOLUMN = 512;
const LBS_MULTIPLESEL = 8;
const LBS_NODATA = 0x2000;
const LBS_NOINTEGRALHEIGHT = 256;
const LBS_NOREDRAW = 4;
const LBS_NOSEL = 0x4000;
const LBS_NOTIFY = 1;
const LBS_OWNERDRAWFIXED = 16;
const LBS_OWNERDRAWVARIABLE = 32;
const LBS_SORT = 2;
const LBS_STANDARD = 0xa00003;
const LBS_USETABSTOPS = 128;
const LBS_WANTKEYBOARDINPUT = 0x400;

const SBS_BOTTOMALIGN = 4;
const SBS_HORZ = 0;
const SBS_LEFTALIGN = 2;
const SBS_RIGHTALIGN = 4;
const SBS_SIZEBOX = 8;
const SBS_SIZEBOXBOTTOMRIGHTALIGN = 4;
const SBS_SIZEBOXTOPLEFTALIGN = 2;
const SBS_SIZEGRIP = 16;
const SBS_TOPALIGN = 2;
const SBS_VERT = 1;

const SS_BITMAP = 14;
const SS_BLACKFRAME = 7;
const SS_BLACKRECT = 4;
const SS_CENTER = 1;
const SS_CENTERIMAGE = 512;
const SS_ENHMETAFILE = 15;
const SS_ETCHEDFRAME = 18;
const SS_ETCHEDHORZ = 16;
const SS_ETCHEDVERT = 17;
const SS_GRAYFRAME = 8;
const SS_GRAYRECT = 5;
const SS_ICON = 3;
const SS_LEFT = 0;
const SS_LEFTNOWORDWRAP = 0xc;
const SS_NOPREFIX = 128;
const SS_NOTIFY = 256;
const SS_OWNERDRAW = 0xd;
const SS_REALSIZEIMAGE = 0x800;
const SS_RIGHT = 2;
const SS_RIGHTJUST = 0x400;
const SS_SIMPLE = 11;
const SS_SUNKEN = 4096;
const SS_WHITEFRAME = 9;
const SS_WHITERECT = 6;
const SS_USERITEM = 10;
const SS_TYPEMASK = 0x0000001FL;
const SS_ENDELLIPSIS = 0x00004000L;
const SS_PATHELLIPSIS = 0x00008000L;
const SS_WORDELLIPSIS = 0x0000C000L;
const SS_ELLIPSISMASK = 0x0000C000L;

const DS_ABSALIGN      = 0x0001;
const DS_3DLOOK        = 0x0004;
const DS_SYSMODAL      = 0x0002;
const DS_FIXEDSYS      = 0x0008;
const DS_NOFAILCREATE  = 0x0010;
const DS_LOCALEDIT     = 0x0020;
const DS_SETFONT       = 0x0040;
const DS_MODALFRAME    = 0x0080;
const DS_NOIDLEMSG     = 0x0100;
const DS_SETFOREGROUND = 0x0200;
const DS_CONTROL       = 0x0400;
const DS_CENTER        = 0x0800;
const DS_CENTERMOUSE   = 0x1000;
const DS_CONTEXTHELP   = 0x2000;
const DS_SHELLFONT     = DS_SETFONT | DS_FIXEDSYS;

const WS_EX_ACCEPTFILES = 16;
const WS_EX_APPWINDOW = 0x40000;
const WS_EX_CLIENTEDGE = 512;
const WS_EX_COMPOSITED = 0x2000000;  // XP
const WS_EX_CONTEXTHELP = 0x400;
const WS_EX_CONTROLPARENT = 0x10000;
const WS_EX_DLGMODALFRAME = 1;
const WS_EX_LAYERED = 0x80000;  // w2k
const WS_EX_LAYOUTRTL = 0x400000;  // w98, w2k
const WS_EX_LEFT = 0;
const WS_EX_LEFTSCROLLBAR = 0x4000;
const WS_EX_LTRREADING = 0;
const WS_EX_MDICHILD = 64;
const WS_EX_NOACTIVATE = 0x8000000;  // w2k
const WS_EX_NOINHERITLAYOUT = 0x100000;  // w2k
const WS_EX_NOPARENTNOTIFY = 4;
const WS_EX_OVERLAPPEDWINDOW = 0x300;
const WS_EX_PALETTEWINDOW = 0x188;
const WS_EX_RIGHT = 0x1000;
const WS_EX_RIGHTSCROLLBAR = 0;
const WS_EX_RTLREADING = 0x2000;
const WS_EX_STATICEDGE = 0x20000;
const WS_EX_TOOLWINDOW = 128;
const WS_EX_TOPMOST = 8;
const WS_EX_TRANSPARENT = 32;
const WS_EX_WINDOWEDGE = 256;

const WINSTA_ENUMDESKTOPS      = 1;
const WINSTA_READATTRIBUTES    = 2;
const WINSTA_ACCESSCLIPBOARD   = 4;
const WINSTA_CREATEDESKTOP     = 8;
const WINSTA_WRITEATTRIBUTES   = 16;
const WINSTA_ACCESSGLOBALATOMS = 32;
const WINSTA_EXITWINDOWS       = 64;
const WINSTA_ENUMERATE         = 256;
const WINSTA_READSCREEN        = 512;

const DDL_READWRITE = 0;
const DDL_READONLY  = 1;
const DDL_HIDDEN    = 2;
const DDL_SYSTEM    = 4;
const DDL_DIRECTORY = 16;
const DDL_ARCHIVE   = 32;
const DDL_POSTMSGS  = 8192;
const DDL_DRIVES    = 16384;
const DDL_EXCLUSIVE = 32768;

const DC_ACTIVE   = 0x00000001;
const DC_SMALLCAP = 0x00000002;
const DC_ICON     = 0x00000004;
const DC_TEXT     = 0x00000008;
const DC_INBUTTON = 0x00000010;

const DC_GRADIENT = 0x00000020;
static if (_WIN32_WINNT >= 0x501) {
	const DC_BUTTONS = 0x00001000;
}

// Where are these documented?
//const DC_CAPTION = DC_ICON|DC_TEXT|DC_BUTTONS;
//const DC_NC      = DC_CAPTION|DC_FRAME;

const BDR_RAISEDOUTER = 1;
const BDR_SUNKENOUTER = 2;
const BDR_RAISEDINNER = 4;
const BDR_SUNKENINNER = 8;
const BDR_OUTER       = 3;
const BDR_INNER       = 0xc;
const BDR_RAISED      = 5;
const BDR_SUNKEN      = 10;

const EDGE_RAISED = BDR_RAISEDOUTER|BDR_RAISEDINNER;
const EDGE_SUNKEN = BDR_SUNKENOUTER|BDR_SUNKENINNER;
const EDGE_ETCHED = BDR_SUNKENOUTER|BDR_RAISEDINNER;
const EDGE_BUMP   = BDR_RAISEDOUTER|BDR_SUNKENINNER;

const BF_LEFT                    = 1;
const BF_TOP                     = 2;
const BF_RIGHT                   = 4;
const BF_BOTTOM                  = 8;
const BF_TOPLEFT                 = BF_TOP|BF_LEFT;
const BF_TOPRIGHT                = BF_TOP|BF_RIGHT;
const BF_BOTTOMLEFT              = BF_BOTTOM|BF_LEFT;
const BF_BOTTOMRIGHT             = BF_BOTTOM|BF_RIGHT;
const BF_RECT                    = BF_LEFT|BF_TOP|BF_RIGHT|BF_BOTTOM ;
const BF_DIAGONAL                = 16;
const BF_DIAGONAL_ENDTOPRIGHT    = BF_DIAGONAL|BF_TOP|BF_RIGHT;
const BF_DIAGONAL_ENDTOPLEFT     = BF_DIAGONAL|BF_TOP|BF_LEFT;
const BF_DIAGONAL_ENDBOTTOMLEFT  = BF_DIAGONAL|BF_BOTTOM|BF_LEFT;
const BF_DIAGONAL_ENDBOTTOMRIGHT = BF_DIAGONAL|BF_BOTTOM|BF_RIGHT;
const BF_MIDDLE                  = 0x800;
const BF_SOFT                    = 0x1000;
const BF_ADJUST                  = 0x2000;
const BF_FLAT                    = 0x4000;
const BF_MONO                    = 0x8000;

enum {
	DFC_CAPTION      = 1,
	DFC_MENU,
	DFC_SCROLL,
	DFC_BUTTON,
	DFC_POPUPMENU // = 5
}

const DFCS_CAPTIONCLOSE   = 0;
const DFCS_CAPTIONMIN     = 1;
const DFCS_CAPTIONMAX     = 2;
const DFCS_CAPTIONRESTORE = 3;
const DFCS_CAPTIONHELP    = 4;

const DFCS_MENUARROW      = 0;
const DFCS_MENUCHECK      = 1;
const DFCS_MENUBULLET     = 2;
const DFCS_MENUARROWRIGHT = 4;

const DFCS_SCROLLUP            = 0;
const DFCS_SCROLLDOWN          = 1;
const DFCS_SCROLLLEFT          = 2;
const DFCS_SCROLLRIGHT         = 3;
const DFCS_SCROLLCOMBOBOX      = 5;
const DFCS_SCROLLSIZEGRIP      = 8;
const DFCS_SCROLLSIZEGRIPRIGHT = 16;

const DFCS_BUTTONCHECK         = 0;
const DFCS_BUTTONRADIOIMAGE    = 1;
const DFCS_BUTTONRADIOMASK     = 2;
const DFCS_BUTTONRADIO         = 4;
const DFCS_BUTTON3STATE        = 8;
const DFCS_BUTTONPUSH          = 16;
const DFCS_INACTIVE            = 256;
const DFCS_PUSHED              = 512;
const DFCS_CHECKED             = 1024;
static if (_WIN32_WINNT >= 0x500) {
	const DFCS_TRANSPARENT         = 0x800;
	const DFCS_HOT                 = 0x1000;
}
const DFCS_ADJUSTRECT          = 0x2000;
const DFCS_FLAT                = 0x4000;
const DFCS_MONO                = 0x8000;

enum {
	DST_COMPLEX = 0,
	DST_TEXT,
	DST_PREFIXTEXT,
	DST_ICON,
	DST_BITMAP // = 4
}

const DSS_NORMAL = 0;
const DSS_UNION = 16;
const DSS_DISABLED = 32;
const DSS_MONO = 128;
const DSS_RIGHT = 0x8000;

const DT_BOTTOM = 8;
const DT_CALCRECT = 1024;
const DT_CENTER = 1;
const DT_EDITCONTROL = 8192;
const DT_END_ELLIPSIS = 32768;
const DT_PATH_ELLIPSIS = 16384;
const DT_WORD_ELLIPSIS = 0x40000;
const DT_EXPANDTABS = 64;
const DT_EXTERNALLEADING = 512;
const DT_LEFT = 0;
const DT_MODIFYSTRING = 65536;
const DT_NOCLIP = 256;
const DT_NOPREFIX = 2048;
const DT_RIGHT = 2;
const DT_RTLREADING = 131072;
const DT_SINGLELINE = 32;
const DT_TABSTOP = 128;
const DT_TOP = 0;
const DT_VCENTER = 4;
const DT_WORDBREAK = 16;
const DT_INTERNAL = 4096;

const WB_ISDELIMITER = 2;
const WB_LEFT = 0;
const WB_RIGHT = 1;

const SB_HORZ = 0;
const SB_VERT = 1;
const SB_CTL = 2;
const SB_BOTH = 3;

const ESB_DISABLE_BOTH = 3;
const ESB_DISABLE_DOWN = 2;
const ESB_DISABLE_LEFT = 1;
const ESB_DISABLE_LTUP = 1;
const ESB_DISABLE_RIGHT = 2;
const ESB_DISABLE_RTDN = 2;
const ESB_DISABLE_UP = 1;
const ESB_ENABLE_BOTH = 0;

const SB_LINEUP = 0;
const SB_LINEDOWN = 1;
const SB_LINELEFT = 0;
const SB_LINERIGHT = 1;
const SB_PAGEUP = 2;
const SB_PAGEDOWN = 3;
const SB_PAGELEFT = 2;
const SB_PAGERIGHT = 3;
const SB_THUMBPOSITION = 4;
const SB_THUMBTRACK = 5;
const SB_ENDSCROLL = 8;
const SB_LEFT = 6;
const SB_RIGHT = 7;
const SB_BOTTOM = 7;
const SB_TOP = 6;

//MACRO #define IS_INTRESOURCE(i) (((ULONG_PTR)(i) >> 16) == 0)

template MAKEINTRESOURCE_T (WORD i)
{
	const LPTSTR MAKEINTRESOURCE_T = cast(LPTSTR)(i);
}

LPSTR MAKEINTRESOURCEA(WORD i)
{
	return cast(LPSTR)(i);
}

LPWSTR MAKEINTRESOURCEW(WORD i)
{
	return cast(LPWSTR)(i);
}

const RT_CURSOR       = MAKEINTRESOURCE_T!(1);
const RT_BITMAP       = MAKEINTRESOURCE_T!(2);
const RT_ICON         = MAKEINTRESOURCE_T!(3);
const RT_MENU         = MAKEINTRESOURCE_T!(4);
const RT_DIALOG       = MAKEINTRESOURCE_T!(5);
const RT_STRING       = MAKEINTRESOURCE_T!(6);
const RT_FONTDIR      = MAKEINTRESOURCE_T!(7);
const RT_FONT         = MAKEINTRESOURCE_T!(8);
const RT_ACCELERATOR  = MAKEINTRESOURCE_T!(9);
const RT_RCDATA       = MAKEINTRESOURCE_T!(10);
const RT_MESSAGETABLE = MAKEINTRESOURCE_T!(11);

const RT_GROUP_CURSOR = MAKEINTRESOURCE_T!(12);
const RT_GROUP_ICON   = MAKEINTRESOURCE_T!(14);
const RT_VERSION      = MAKEINTRESOURCE_T!(16);
const RT_DLGINCLUDE   = MAKEINTRESOURCE_T!(17);
const RT_PLUGPLAY     = MAKEINTRESOURCE_T!(19);
const RT_VXD          = MAKEINTRESOURCE_T!(20);
const RT_ANICURSOR    = MAKEINTRESOURCE_T!(21);
const RT_ANIICON      = MAKEINTRESOURCE_T!(22);
const RT_HTML         = MAKEINTRESOURCE_T!(23);
const RT_MANIFEST     = MAKEINTRESOURCE_T!(24);

const CREATEPROCESS_MANIFEST_RESOURCE_ID                 = MAKEINTRESOURCE_T!(1);
const ISOLATIONAWARE_MANIFEST_RESOURCE_ID                = MAKEINTRESOURCE_T!(2);
const ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE_T!(3);

const EWX_LOGOFF   = 0;
const EWX_SHUTDOWN = 1;
const EWX_REBOOT   = 2;
const EWX_FORCE    = 4;
const EWX_POWEROFF = 8;
static if (_WIN32_WINNT >= 0x500) {
const EWX_FORCEIFHUNG = 16;
}

const CS_BYTEALIGNCLIENT = 4096;
const CS_BYTEALIGNWINDOW = 8192;
const CS_KEYCVTWINDOW = 4;
const CS_NOKEYCVT = 256;
const CS_CLASSDC = 64;
const CS_DBLCLKS = 8;
const CS_GLOBALCLASS = 16384;
const CS_HREDRAW = 2;
const CS_NOCLOSE = 512;
const CS_OWNDC = 32;
const CS_PARENTDC = 128;
const CS_SAVEBITS = 2048;
const CS_VREDRAW = 1;
const CS_IME = 0x10000;

const GCW_ATOM = -32;
const GCL_CBCLSEXTRA = -20;
const GCL_CBWNDEXTRA = -18;
const GCL_HBRBACKGROUND = -10;
const GCL_HCURSOR = -12;
const GCL_HICON = -14;
const GCL_HICONSM = -34;
const GCL_HMODULE = -16;
const GCL_MENUNAME = -8;
const GCL_STYLE = -26;
const GCL_WNDPROC = -24;

alias GCL_HICONSM GCLP_HICONSM;
alias GCL_HICON GCLP_HICON;
alias GCL_HCURSOR GCLP_HCURSOR;
alias GCL_HBRBACKGROUND GCLP_HBRBACKGROUND;
alias GCL_HMODULE  GCLP_HMODULE;
alias GCL_MENUNAME GCLP_MENUNAME;
alias GCL_WNDPROC  GCLP_WNDPROC;

const IDC_ARROW       = MAKEINTRESOURCE_T!(32512);
const IDC_IBEAM       = MAKEINTRESOURCE_T!(32513);
const IDC_WAIT        = MAKEINTRESOURCE_T!(32514);
const IDC_CROSS       = MAKEINTRESOURCE_T!(32515);
const IDC_UPARROW     = MAKEINTRESOURCE_T!(32516);
const IDC_SIZENWSE    = MAKEINTRESOURCE_T!(32642);
const IDC_SIZENESW    = MAKEINTRESOURCE_T!(32643);
const IDC_SIZEWE      = MAKEINTRESOURCE_T!(32644);
const IDC_SIZENS      = MAKEINTRESOURCE_T!(32645);
const IDC_SIZEALL     = MAKEINTRESOURCE_T!(32646);
const IDC_NO          = MAKEINTRESOURCE_T!(32648);
static if (_WIN32_WINNT >= 0x500) {
	const IDC_HAND    = MAKEINTRESOURCE_T!(32649);
}
const IDC_APPSTARTING = MAKEINTRESOURCE_T!(32650);
const IDC_HELP        = MAKEINTRESOURCE_T!(32651);
const IDC_ICON        = MAKEINTRESOURCE_T!(32641);
const IDC_SIZE        = MAKEINTRESOURCE_T!(32640);
const IDI_APPLICATION = MAKEINTRESOURCE_T!(32512);
const IDI_HAND        = MAKEINTRESOURCE_T!(32513);
const IDI_QUESTION    = MAKEINTRESOURCE_T!(32514);
const IDI_EXCLAMATION = MAKEINTRESOURCE_T!(32515);
const IDI_ASTERISK    = MAKEINTRESOURCE_T!(32516);
const IDI_WINLOGO     = MAKEINTRESOURCE_T!(32517);
static if (_WIN32_WINNT >= 0x600) {
	const IDI_SHIELD  = MAKEINTRESOURCE_T!(32518);
}

const IDI_WARNING     = IDI_EXCLAMATION;
const IDI_ERROR       = IDI_HAND;
const IDI_INFORMATION = IDI_ASTERISK;

static if(_WIN32_WINNT >= 0x500) {

const MNGOF_TOPGAP = 0x00000001;
const MNGOF_BOTTOMGAP = 0x00000002;
const MNGO_NOINTERFACE = 0x00000000;
const MNGO_NOERROR = 0x00000001;

}

const MIIM_STATE = 1;
const MIIM_ID = 2;
const MIIM_SUBMENU = 4;
const MIIM_CHECKMARKS = 8;
const MIIM_TYPE = 16;
const MIIM_DATA = 32;
const MIIM_STRING = 64;
const MIIM_BITMAP = 128;
const MIIM_FTYPE = 256;

static if (_WIN32_WINNT >= 0x500) {

	const MIM_MAXHEIGHT = 1;
	const MIM_BACKGROUND = 2;
	const MIM_HELPID = 4;
	const MIM_MENUDATA = 8;
	const MIM_STYLE = 16;
	const MIM_APPLYTOSUBMENUS = 0x80000000L;

	const MNS_NOCHECK = 0x80000000;
	const MNS_MODELESS = 0x40000000;
	const MNS_DRAGDROP = 0x20000000;
	const MNS_AUTODISMISS = 0x10000000;
	const MNS_NOTIFYBYPOS = 0x08000000;
	const MNS_CHECKORBMP = 0x04000000;

}

const MFT_BITMAP = 4;
const MFT_MENUBARBREAK = 32;
const MFT_MENUBREAK = 64;
const MFT_OWNERDRAW = 256;
const MFT_RADIOCHECK = 512;
const MFT_RIGHTJUSTIFY = 0x4000;
const MFT_SEPARATOR = 0x800;
const MFT_RIGHTORDER = 0x2000L;
const MFT_STRING = 0;

const MFS_CHECKED = 8;
const MFS_DEFAULT = 4096;
const MFS_DISABLED = 3;
const MFS_ENABLED = 0;
const MFS_GRAYED = 3;
const MFS_HILITE = 128;
const MFS_UNCHECKED = 0;
const MFS_UNHILITE = 0;

const GW_HWNDNEXT = 2;
const GW_HWNDPREV = 3;
const GW_CHILD = 5;
const GW_HWNDFIRST = 0;
const GW_HWNDLAST = 1;
const GW_OWNER = 4;

const SW_HIDE = 0;
const SW_NORMAL = 1;
const SW_SHOWNORMAL = 1;
const SW_SHOWMINIMIZED = 2;
const SW_MAXIMIZE = 3;
const SW_SHOWMAXIMIZED = 3;
const SW_SHOWNOACTIVATE = 4;
const SW_SHOW = 5;
const SW_MINIMIZE = 6;
const SW_SHOWMINNOACTIVE = 7;
const SW_SHOWNA = 8;
const SW_RESTORE = 9;
const SW_SHOWDEFAULT = 10;
const SW_FORCEMINIMIZE = 11;
const SW_MAX = 11;

const MB_USERICON = 128;
const MB_ICONASTERISK = 64;
const MB_ICONEXCLAMATION = 0x30;
const MB_ICONWARNING = 0x30;
const MB_ICONERROR = 16;
const MB_ICONHAND = 16;
const MB_ICONQUESTION = 32;
const MB_OK = 0;
const MB_ABORTRETRYIGNORE = 2;
const MB_APPLMODAL = 0;
const MB_DEFAULT_DESKTOP_ONLY = 0x20000;
const MB_HELP = 0x4000;
const MB_RIGHT = 0x80000;
const MB_RTLREADING = 0x100000;
const MB_TOPMOST = 0x40000;
const MB_DEFBUTTON1 = 0;
const MB_DEFBUTTON2 = 256;
const MB_DEFBUTTON3 = 512;
const MB_DEFBUTTON4 = 0x300;
const MB_ICONINFORMATION = 64;
const MB_ICONSTOP = 16;
const MB_OKCANCEL = 1;
const MB_RETRYCANCEL = 5;

const MB_SERVICE_NOTIFICATION      = 0x00200000;
const MB_SERVICE_NOTIFICATION_NT3X = 0x00040000;

const MB_SETFOREGROUND = 0x10000;
const MB_SYSTEMMODAL = 4096;
const MB_TASKMODAL = 0x2000;
const MB_YESNO = 4;
const MB_YESNOCANCEL = 3;
const MB_ICONMASK = 240;
const MB_DEFMASK = 3840;
const MB_MODEMASK = 0x00003000;
const MB_MISCMASK = 0x0000C000;
const MB_NOFOCUS = 0x00008000;
const MB_TYPEMASK = 15;
// [Redefined] MB_TOPMOST=0x40000
static if (_WIN32_WINNT >= 0x500) {
	const MB_CANCELTRYCONTINUE=6;
}

const IDOK       = 1;
const IDCANCEL   = 2;
const IDABORT    = 3;
const IDRETRY    = 4;
const IDIGNORE   = 5;
const IDYES      = 6;
const IDNO       = 7;
static if (_WIN32_WINNT >= 0x400) {
	const IDCLOSE    = 8;
	const IDHELP     = 9;
}
static if (_WIN32_WINNT >= 0x500) {
	const IDTRYAGAIN = 10;
	const IDCONTINUE = 11;
}

const GWL_EXSTYLE = -20;
const GWL_STYLE = -16;
const GWL_WNDPROC = -4;
const GWLP_WNDPROC = -4;
const GWL_HINSTANCE = -6;
const GWLP_HINSTANCE = -6;
const GWL_HWNDPARENT = -8;
const GWLP_HWNDPARENT = -8;
const GWL_ID = -12;
const GWLP_ID = -12;
const GWL_USERDATA = -21;
const GWLP_USERDATA = -21;

const DWL_DLGPROC = 4;
const DWLP_DLGPROC = 4;
const DWL_MSGRESULT = 0;
const DWLP_MSGRESULT = 0;
const DWL_USER = 8;
const DWLP_USER = 8;

const QS_KEY            = 1;
const QS_MOUSEMOVE      = 2;
const QS_MOUSEBUTTON    = 4;
const QS_MOUSE          = 6;
const QS_POSTMESSAGE    = 8;
const QS_TIMER          = 16;
const QS_PAINT          = 32;
const QS_SENDMESSAGE    = 64;
const QS_HOTKEY         = 128;
const QS_ALLPOSTMESSAGE = 256;
static if (_WIN32_WINNT >= 0x501) {
const QS_RAWINPUT       = 1024;
const QS_INPUT          = 1031;
const QS_ALLEVENTS      = 1215;
const QS_ALLINPUT       = 1279;
} else {
const QS_INPUT          = 7;
const QS_ALLEVENTS      = 191;
const QS_ALLINPUT       = 255;
}

const MWMO_WAITALL        = 1;
const MWMO_ALERTABLE      = 2;
const MWMO_INPUTAVAILABLE = 4;

const COLOR_3DDKSHADOW=21;
const COLOR_3DFACE=15;
const COLOR_3DHILIGHT=20;
const COLOR_3DHIGHLIGHT=20;
const COLOR_3DLIGHT=22;
const COLOR_BTNHILIGHT=20;
const COLOR_3DSHADOW=16;
const COLOR_ACTIVEBORDER=10;
const COLOR_ACTIVECAPTION=2;
const COLOR_APPWORKSPACE=12;
const COLOR_BACKGROUND=1;
const COLOR_DESKTOP=1;
const COLOR_BTNFACE=15;
const COLOR_BTNHIGHLIGHT=20;
const COLOR_BTNSHADOW=16;
const COLOR_BTNTEXT=18;
const COLOR_CAPTIONTEXT=9;
const COLOR_GRAYTEXT=17;
const COLOR_HIGHLIGHT=13;
const COLOR_HIGHLIGHTTEXT=14;
const COLOR_INACTIVEBORDER=11;
const COLOR_INACTIVECAPTION=3;
const COLOR_INACTIVECAPTIONTEXT=19;
const COLOR_INFOBK=24;
const COLOR_INFOTEXT=23;
const COLOR_MENU=4;
const COLOR_MENUTEXT=7;
const COLOR_SCROLLBAR=0;
const COLOR_WINDOW=5;
const COLOR_WINDOWFRAME=6;
const COLOR_WINDOWTEXT=8;
const COLOR_HOTLIGHT=26;
const COLOR_GRADIENTACTIVECAPTION=27;
const COLOR_GRADIENTINACTIVECAPTION=28;

const CTLCOLOR_MSGBOX=0;
const CTLCOLOR_EDIT=1;
const CTLCOLOR_LISTBOX=2;
const CTLCOLOR_BTN=3;
const CTLCOLOR_DLG=4;
const CTLCOLOR_SCROLLBAR=5;
const CTLCOLOR_STATIC=6;
const CTLCOLOR_MAX=7;

// For GetSystemMetrics()
enum : int {
	SM_CXSCREEN = 0,
	SM_CYSCREEN,
	SM_CXVSCROLL,
	SM_CYHSCROLL,
	SM_CYCAPTION,
	SM_CXBORDER,
	SM_CYBORDER,
	SM_CXDLGFRAME, // = 7,
	SM_CXFIXEDFRAME = SM_CXDLGFRAME,
	SM_CYDLGFRAME, // =8,
	SM_CYFIXEDFRAME = SM_CYDLGFRAME,
	SM_CYVTHUMB = 9,
	SM_CXHTHUMB,
	SM_CXICON,
	SM_CYICON,
	SM_CXCURSOR,
	SM_CYCURSOR,
	SM_CYMENU,
	SM_CXFULLSCREEN,
	SM_CYFULLSCREEN,
	SM_CYKANJIWINDOW,
	SM_MOUSEPRESENT,
	SM_CYVSCROLL,
	SM_CXHSCROLL,
	SM_DEBUG,
	SM_SWAPBUTTON,
	SM_RESERVED1,
	SM_RESERVED2,
	SM_RESERVED3,
	SM_RESERVED4,
	SM_CXMIN,
	SM_CYMIN,
	SM_CXSIZE,
	SM_CYSIZE,
	SM_CXSIZEFRAME, // = 32,
	SM_CXFRAME = SM_CXSIZEFRAME,
	SM_CYSIZEFRAME, // = 33
	SM_CYFRAME = SM_CYSIZEFRAME,
	SM_CXMINTRACK,
	SM_CYMINTRACK,
	SM_CXDOUBLECLK,
	SM_CYDOUBLECLK,
	SM_CXICONSPACING,
	SM_CYICONSPACING,
	SM_MENUDROPALIGNMENT,
	SM_PENWINDOWS,
	SM_DBCSENABLED,
	SM_CMOUSEBUTTONS,
	SM_SECURE,
	SM_CXEDGE,
	SM_CYEDGE,
	SM_CXMINSPACING,
	SM_CYMINSPACING,
	SM_CXSMICON,
	SM_CYSMICON,
	SM_CYSMCAPTION,
	SM_CXSMSIZE,
	SM_CYSMSIZE,
	SM_CXMENUSIZE,
	SM_CYMENUSIZE,
	SM_ARRANGE,
	SM_CXMINIMIZED,
	SM_CYMINIMIZED,
	SM_CXMAXTRACK,
	SM_CYMAXTRACK,
	SM_CXMAXIMIZED,
	SM_CYMAXIMIZED,
	SM_NETWORK, // = 63
	SM_CLEANBOOT = 67,
	SM_CXDRAG,
	SM_CYDRAG,
	SM_SHOWSOUNDS,
	SM_CXMENUCHECK,
	SM_CYMENUCHECK,
	SM_SLOWMACHINE,
	SM_MIDEASTENABLED,
	// The next values aren't supported in Win95.
	SM_MOUSEWHEELPRESENT,
	SM_XVIRTUALSCREEN,
	SM_YVIRTUALSCREEN,
	SM_CXVIRTUALSCREEN,
	SM_CYVIRTUALSCREEN,
	SM_CMONITORS,
	SM_SAMEDISPLAYFORMAT,
	SM_IMMENABLED,
	SM_CXFOCUSBORDER,
	SM_CYFOCUSBORDER, // = 84
	SM_TABLETPC = 86,
	SM_MEDIACENTER = 87,
	SM_REMOTESESSION = 0x1000,
	// These are only for WinXP and later
	SM_SHUTTINGDOWN = 0x2000,
	SM_REMOTECONTROL = 0x2001
}

const ARW_BOTTOMLEFT=0;
const ARW_BOTTOMRIGHT=1;
const ARW_HIDE=8;
const ARW_TOPLEFT=2;
const ARW_TOPRIGHT=3;
const ARW_DOWN=4;
const ARW_LEFT=0;
const ARW_RIGHT=0;
const ARW_UP=4;

const UOI_FLAGS=1;
const UOI_NAME=2;
const UOI_TYPE=3;
const UOI_USER_SID=4;

// For the fuLoad parameter of LoadImage()
enum : UINT {
	LR_DEFAULTCOLOR     = 0,
	LR_MONOCHROME       = 1,
	LR_COLOR            = 2,
	LR_COPYRETURNORG    = 4,
	LR_COPYDELETEORG    = 8,
	LR_LOADFROMFILE     = 16,
	LR_LOADTRANSPARENT  = 32,
	LR_DEFAULTSIZE      = 64,
	LR_LOADREALSIZE     = 128,
	LR_LOADMAP3DCOLORS  = 4096,
	LR_CREATEDIBSECTION = 8192,
	LR_COPYFROMRESOURCE = 16384,
	LR_SHARED           = 32768
}

const KEYEVENTF_EXTENDEDKEY = 0x00000001;
const KEYEVENTF_KEYUP       = 00000002;
static if (_WIN32_WINNT >= 0x500) {
const KEYEVENTF_UNICODE     = 0x00000004;
const KEYEVENTF_SCANCODE    = 0x00000008;
}

const OBM_BTNCORNERS = 32758;
const OBM_BTSIZE = 32761;
const OBM_CHECK = 32760;
const OBM_CHECKBOXES = 32759;
const OBM_CLOSE = 32754;
const OBM_COMBO = 32738;
const OBM_DNARROW = 32752;
const OBM_DNARROWD = 32742;
const OBM_DNARROWI = 32736;
const OBM_LFARROW = 32750;
const OBM_LFARROWI = 32734;
const OBM_LFARROWD = 32740;
const OBM_MNARROW = 32739;
const OBM_OLD_CLOSE = 32767;
const OBM_OLD_DNARROW = 32764;
const OBM_OLD_LFARROW = 32762;
const OBM_OLD_REDUCE = 32757;
const OBM_OLD_RESTORE = 32755;
const OBM_OLD_RGARROW = 32763;
const OBM_OLD_UPARROW = 32765;
const OBM_OLD_ZOOM = 32756;
const OBM_REDUCE = 32749;
const OBM_REDUCED = 32746;
const OBM_RESTORE = 32747;
const OBM_RESTORED = 32744;
const OBM_RGARROW = 32751;
const OBM_RGARROWD = 32741;
const OBM_RGARROWI = 32735;
const OBM_SIZE = 32766;
const OBM_UPARROW = 32753;
const OBM_UPARROWD = 32743;
const OBM_UPARROWI = 32737;
const OBM_ZOOM = 32748;
const OBM_ZOOMD = 32745;

const OCR_NORMAL = 32512;
const OCR_IBEAM = 32513;
const OCR_WAIT = 32514;
const OCR_CROSS = 32515;
const OCR_UP = 32516;
const OCR_SIZE = 32640;
const OCR_ICON = 32641;
const OCR_SIZENWSE = 32642;
const OCR_SIZENESW = 32643;
const OCR_SIZEWE = 32644;
const OCR_SIZENS = 32645;
const OCR_SIZEALL = 32646;
const OCR_NO = 32648;
const OCR_APPSTARTING = 32650;

const OIC_SAMPLE = 32512;
const OIC_HAND = 32513;
const OIC_QUES = 32514;
const OIC_BANG = 32515;
const OIC_NOTE = 32516;
const OIC_WINLOGO = 32517;
const OIC_WARNING = OIC_BANG;
const OIC_ERROR = OIC_HAND;
const OIC_INFORMATION = OIC_NOTE;

const HELPINFO_MENUITEM = 2;
const HELPINFO_WINDOW = 1;

static if (_WIN32_WINNT >= 0x501) {

const WTS_CONSOLE_CONNECT = 0x1;
const WTS_CONSOLE_DISCONNECT = 0x2;
const WTS_REMOTE_CONNECT = 0x3;
const WTS_REMOTE_DISCONNECT = 0x4;
const WTS_SESSION_LOGON = 0x5;
const WTS_SESSION_LOGOFF = 0x6;
const WTS_SESSION_LOCK = 0x7;
const WTS_SESSION_UNLOCK = 0x8;
const WTS_SESSION_REMOTE_CONTROL = 0x9;

}

const MSGF_DIALOGBOX = 0;
const MSGF_MESSAGEBOX = 1;
const MSGF_MENU = 2;
const MSGF_MOVE = 3;
const MSGF_SIZE = 4;
const MSGF_SCROLLBAR = 5;
const MSGF_NEXTWINDOW = 6;
const MSGF_MAINLOOP = 8;
const MSGF_USER = 4096;

const MOUSEEVENTF_MOVE = 1;
const MOUSEEVENTF_LEFTDOWN = 2;
const MOUSEEVENTF_LEFTUP = 4;
const MOUSEEVENTF_RIGHTDOWN = 8;
const MOUSEEVENTF_RIGHTUP = 16;
const MOUSEEVENTF_MIDDLEDOWN = 32;
const MOUSEEVENTF_MIDDLEUP = 64;
const MOUSEEVENTF_WHEEL = 0x0800;
const MOUSEEVENTF_ABSOLUTE = 32768;

const PM_NOREMOVE = 0;
const PM_REMOVE = 1;
const PM_NOYIELD = 2;

static if (_WIN32_WINNT >= 0x500) {
const PM_QS_INPUT = (QS_INPUT << 16);
const PM_QS_POSTMESSAGE = ((QS_POSTMESSAGE|QS_HOTKEY|QS_TIMER) << 16);
const PM_QS_PAINT = (QS_PAINT << 16);
const PM_QS_SENDMESSAGE = (QS_SENDMESSAGE << 16);
}
const HWND
	HWND_BROADCAST = cast(HWND)0xffff,
	HWND_BOTTOM    = cast(HWND)1,
	HWND_NOTOPMOST = cast(HWND)(-2),
	HWND_TOP       = cast(HWND)0,
	HWND_TOPMOST   = cast(HWND)(-1),
	HWND_DESKTOP   = cast(HWND)0,
	HWND_MESSAGE   = cast(HWND)(-3);// w2k

const RDW_INVALIDATE      = 1;
const RDW_INTERNALPAINT   = 2;
const RDW_ERASE           = 4;
const RDW_VALIDATE        = 8;
const RDW_NOINTERNALPAINT = 16;
const RDW_NOERASE         = 32;
const RDW_NOCHILDREN      = 64;
const RDW_ALLCHILDREN     = 128;
const RDW_UPDATENOW       = 256;
const RDW_ERASENOW        = 512;
const RDW_FRAME           = 1024;
const RDW_NOFRAME         = 2048;

const SMTO_NORMAL      = 0;
const SMTO_BLOCK       = 1;
const SMTO_ABORTIFHUNG = 2;

const SIF_ALL = 23;
const SIF_PAGE = 2;
const SIF_POS = 4;
const SIF_RANGE = 1;
const SIF_DISABLENOSCROLL = 8;
const SIF_TRACKPOS = 16;

const SWP_DRAWFRAME = 32;
const SWP_FRAMECHANGED = 32;
const SWP_HIDEWINDOW = 128;
const SWP_NOACTIVATE = 16;
const SWP_NOCOPYBITS = 256;
const SWP_NOMOVE = 2;
const SWP_NOSIZE = 1;
const SWP_NOREDRAW = 8;
const SWP_NOZORDER = 4;
const SWP_SHOWWINDOW = 64;
const SWP_NOOWNERZORDER = 512;
const SWP_NOREPOSITION = 512;
const SWP_NOSENDCHANGING = 1024;
const SWP_DEFERERASE = 8192;
const SWP_ASYNCWINDOWPOS = 16384;

enum { // passed variously as int or WPARAM
	HSHELL_WINDOWCREATED    =     1,
	HSHELL_WINDOWDESTROYED,
	HSHELL_ACTIVATESHELLWINDOW,
	HSHELL_WINDOWACTIVATED,
	HSHELL_GETMINRECT,
	HSHELL_REDRAW,
	HSHELL_TASKMAN,
	HSHELL_LANGUAGE,     // =     8
	HSHELL_ENDTASK          =    10,
	HSHELL_ACCESSIBILITYSTATE,
	HSHELL_APPCOMMAND,   // =    12
	HSHELL_RUDEAPPACTIVATED = 32772,
	HSHELL_FLASH            = 32774
}

static if (_WIN32_WINNT >= 0x501) {
	enum {
		HSHELL_WINDOWREPLACED = 13,
		HSHELL_WINDOWREPLACING
	}
}

enum SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001;
enum SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000;

const SPI_GETACCESSTIMEOUT=60;
const SPI_GETACTIVEWNDTRKTIMEOUT=8194;
const SPI_GETANIMATION=72;
const SPI_GETBEEP=1;
const SPI_GETBORDER=5;
const SPI_GETDEFAULTINPUTLANG=89;
const SPI_GETDRAGFULLWINDOWS=38;
const SPI_GETFASTTASKSWITCH=35;
const SPI_GETFILTERKEYS=50;
const SPI_GETFONTSMOOTHING=74;
const SPI_GETGRIDGRANULARITY=18;
const SPI_GETHIGHCONTRAST=66;
const SPI_GETICONMETRICS=45;
const SPI_GETICONTITLELOGFONT=31;
const SPI_GETICONTITLEWRAP=25;
const SPI_GETKEYBOARDDELAY=22;
const SPI_GETKEYBOARDPREF=68;
const SPI_GETKEYBOARDSPEED=10;
const SPI_GETLOWPOWERACTIVE=83;
const SPI_GETLOWPOWERTIMEOUT=79;
const SPI_GETMENUDROPALIGNMENT=27;
const SPI_GETMINIMIZEDMETRICS=43;
const SPI_GETMOUSE=3;
const SPI_GETMOUSEKEYS=54;
const SPI_GETMOUSETRAILS=94;
const SPI_GETNONCLIENTMETRICS=41;
const SPI_GETPOWEROFFACTIVE=84;
const SPI_GETPOWEROFFTIMEOUT=80;
const SPI_GETSCREENREADER=70;
const SPI_GETSCREENSAVEACTIVE=16;
const SPI_GETSCREENSAVETIMEOUT=14;
const SPI_GETSERIALKEYS=62;
const SPI_GETSHOWSOUNDS=56;
const SPI_GETSOUNDSENTRY=64;
const SPI_GETSTICKYKEYS=58;
const SPI_GETTOGGLEKEYS=52;
const SPI_GETWHEELSCROLLLINES=104;
const SPI_GETWINDOWSEXTENSION=92;
const SPI_GETWORKAREA=48;
const SPI_ICONHORIZONTALSPACING=13;
const SPI_ICONVERTICALSPACING=24;
const SPI_LANGDRIVER=12;
const SPI_SCREENSAVERRUNNING=97;
const SPI_SETACCESSTIMEOUT=61;
const SPI_SETACTIVEWNDTRKTIMEOUT=8195;
const SPI_SETANIMATION=73;
const SPI_SETBEEP=2;
const SPI_SETBORDER=6;
const SPI_SETDEFAULTINPUTLANG=90;
const SPI_SETDESKPATTERN=21;
const SPI_SETDESKWALLPAPER=20;
const SPI_SETDOUBLECLICKTIME=32;
const SPI_SETDOUBLECLKHEIGHT=30;
const SPI_SETDOUBLECLKWIDTH=29;
const SPI_SETDRAGFULLWINDOWS=37;
const SPI_SETDRAGHEIGHT=77;
const SPI_SETDRAGWIDTH=76;
const SPI_SETFASTTASKSWITCH=36;
const SPI_SETFILTERKEYS=51;
const SPI_SETFONTSMOOTHING=75;
const SPI_SETGRIDGRANULARITY=19;
const SPI_SETHANDHELD=78;
const SPI_SETHIGHCONTRAST=67;
const SPI_SETICONMETRICS=46;
const SPI_SETICONTITLELOGFONT=34;
const SPI_SETICONTITLEWRAP=26;
const SPI_SETKEYBOARDDELAY=23;
const SPI_SETKEYBOARDPREF=69;
const SPI_SETKEYBOARDSPEED=11;
const SPI_SETLANGTOGGLE=91;
const SPI_SETLOWPOWERACTIVE=85;
const SPI_SETLOWPOWERTIMEOUT=81;
const SPI_SETMENUDROPALIGNMENT=28;
const SPI_SETMINIMIZEDMETRICS=44;
const SPI_SETMOUSE=4;
const SPI_SETMOUSEBUTTONSWAP=33;
const SPI_SETMOUSEKEYS=55;
const SPI_SETMOUSETRAILS=93;
const SPI_SETNONCLIENTMETRICS=42;
const SPI_SETPENWINDOWS=49;
const SPI_SETPOWEROFFACTIVE=86;
const SPI_SETPOWEROFFTIMEOUT=82;
const SPI_SETSCREENREADER=71;
const SPI_SETSCREENSAVEACTIVE=17;
const SPI_SETSCREENSAVERRUNNING=97;
const SPI_SETSCREENSAVETIMEOUT=15;
const SPI_SETSERIALKEYS=63;
const SPI_SETSHOWSOUNDS=57;
const SPI_SETSOUNDSENTRY=65;
const SPI_SETSTICKYKEYS=59;
const SPI_SETTOGGLEKEYS=53;
const SPI_SETWHEELSCROLLLINES=105;
const SPI_SETWORKAREA=47;

static if (_WIN32_WINNT >= 0x500) {
const SPI_GETDESKWALLPAPER=115;
const SPI_GETMOUSESPEED=112;
const SPI_GETSCREENSAVERRUNNING=114;
const SPI_GETACTIVEWINDOWTRACKING=0x1000;
const SPI_GETACTIVEWNDTRKZORDER=0x100C;
const SPI_GETCOMBOBOXANIMATION=0x1004;
const SPI_GETCURSORSHADOW=0x101A;
const SPI_GETGRADIENTCAPTIONS=0x1008;
const SPI_GETHOTTRACKING=0x100E;
const SPI_GETKEYBOARDCUES=0x100A;
const SPI_GETLISTBOXSMOOTHSCROLLING=0x1006;
const SPI_GETMENUANIMATION=0x1002;
const SPI_GETMENUFADE=0x1012;
const SPI_GETMENUUNDERLINES=0x100A;
const SPI_GETSELECTIONFADE=0x1014;
const SPI_GETTOOLTIPANIMATION=0x1016;
const SPI_GETTOOLTIPFADE=0x1018;
const SPI_SETACTIVEWINDOWTRACKING=0x1001;
const SPI_SETACTIVEWNDTRKZORDER=0x100D;
const SPI_SETCOMBOBOXANIMATION=0x1005;
const SPI_SETCURSORSHADOW=0x101B;
const SPI_SETGRADIENTCAPTIONS=0x1009;
const SPI_SETHOTTRACKING=0x100F;
const SPI_SETKEYBOARDCUES=0x100B;
const SPI_SETLISTBOXSMOOTHSCROLLING=0x1007;
const SPI_SETMENUANIMATION=0x1003;
const SPI_SETMENUFADE=0x1013;
const SPI_SETMENUUNDERLINES=0x100B;
const SPI_SETMOUSESPEED=113;
const SPI_SETSELECTIONFADE=0x1015;
const SPI_SETTOOLTIPANIMATION=0x1017;
const SPI_SETTOOLTIPFADE=0x1019;
}

const SPIF_UPDATEINIFILE=1;
const SPIF_SENDWININICHANGE=2;
const SPIF_SENDCHANGE=2;
// [Redefined] ATF_ONOFFFEEDBACK=2
// [Redefined] ATF_TIMEOUTON=1
const WM_APP=32768;
const WM_ACTIVATE=6;
const WM_ACTIVATEAPP=28;
// FIXME/CHECK: Are WM_AFX {FIRST, LAST} valid for _WIN32_WINNT < 0x400?
const WM_AFXFIRST=864;
const WM_AFXLAST=895;
const WM_ASKCBFORMATNAME=780;
const WM_CANCELJOURNAL=75;
const WM_CANCELMODE=31;
const WM_CAPTURECHANGED=533;
const WM_CHANGECBCHAIN=781;
const WM_CHAR=258;
const WM_CHARTOITEM=47;
const WM_CHILDACTIVATE=34;
const WM_CLEAR=771;
const WM_CLOSE=16;
const WM_COMMAND=273;
const WM_COMMNOTIFY=68; // obsolete
const WM_COMPACTING=65;
const WM_COMPAREITEM=57;
const WM_CONTEXTMENU=123;
const WM_COPY=769;
const WM_COPYDATA=74;
const WM_CREATE=1;
const WM_CTLCOLORBTN=309;
const WM_CTLCOLORDLG=310;
const WM_CTLCOLOREDIT=307;
const WM_CTLCOLORLISTBOX=308;
const WM_CTLCOLORMSGBOX=306;
const WM_CTLCOLORSCROLLBAR=311;
const WM_CTLCOLORSTATIC=312;
const WM_CUT=768;
const WM_DEADCHAR=259;
const WM_DELETEITEM=45;
const WM_DESTROY=2;
const WM_DESTROYCLIPBOARD=775;
const WM_DEVICECHANGE=537;
const WM_DEVMODECHANGE=27;
const WM_DISPLAYCHANGE=126;
const WM_DRAWCLIPBOARD=776;
const WM_DRAWITEM=43;
const WM_DROPFILES=563;
const WM_ENABLE=10;
const WM_ENDSESSION=22;
const WM_ENTERIDLE=289;
const WM_ENTERMENULOOP=529;
const WM_ENTERSIZEMOVE=561;
const WM_ERASEBKGND=20;
const WM_EXITMENULOOP=530;
const WM_EXITSIZEMOVE=562;
const WM_FONTCHANGE=29;
const WM_GETDLGCODE=135;
const WM_GETFONT=49;
const WM_GETHOTKEY=51;
const WM_GETICON=127;
const WM_GETMINMAXINFO=36;
const WM_GETTEXT=13;
const WM_GETTEXTLENGTH=14;
const WM_HANDHELDFIRST=856;
const WM_HANDHELDLAST=863;
const WM_HELP=83;
const WM_HOTKEY=786;
const WM_HSCROLL=276;
const WM_HSCROLLCLIPBOARD=782;
const WM_ICONERASEBKGND=39;
const WM_INITDIALOG=272;
const WM_INITMENU=278;
const WM_INITMENUPOPUP=279;
const WM_INPUTLANGCHANGE=81;
const WM_INPUTLANGCHANGEREQUEST=80;
const WM_KEYDOWN=256;
const WM_KEYUP=257;
const WM_KILLFOCUS=8;
const WM_MDIACTIVATE=546;
const WM_MDICASCADE=551;
const WM_MDICREATE=544;
const WM_MDIDESTROY=545;
const WM_MDIGETACTIVE=553;
const WM_MDIICONARRANGE=552;
const WM_MDIMAXIMIZE=549;
const WM_MDINEXT=548;
const WM_MDIREFRESHMENU=564;
const WM_MDIRESTORE=547;
const WM_MDISETMENU=560;
const WM_MDITILE=550;
const WM_MEASUREITEM=44;
static if (_WIN32_WINNT >= 0x500) {
	const WM_UNINITMENUPOPUP=0x0125;
	const WM_MENURBUTTONUP=290;
	const WM_MENUCOMMAND=0x0126;
	const WM_MENUGETOBJECT=0x0124;
	const WM_MENUDRAG=0x0123;
}

static if (_WIN32_WINNT >= 0x500) {

	enum {
		WM_CHANGEUISTATE	=	0x0127,
		WM_UPDATEUISTATE	=	0x0128,
		WM_QUERYUISTATE		=	0x0129
	}

	// LOWORD(wParam) values in WM_*UISTATE*
	enum {
		UIS_SET			=	1,
		UIS_CLEAR		=	2,
		UIS_INITIALIZE	=	3
	}

	// HIWORD(wParam) values in WM_*UISTATE*
	enum {
		UISF_HIDEFOCUS	=	0x1,
		UISF_HIDEACCEL	=	0x2
	}

}

static if (_WIN32_WINNT >= 0x501) {

	// HIWORD(wParam) values in WM_*UISTATE*
	enum {
		UISF_ACTIVE		=	0x4
	}

}

const WM_MENUCHAR=288;
const WM_MENUSELECT=287;
const WM_MOVE=3;
const WM_MOVING=534;
const WM_NCACTIVATE=134;
const WM_NCCALCSIZE=131;
const WM_NCCREATE=129;
const WM_NCDESTROY=130;
const WM_NCHITTEST=132;
const WM_NCLBUTTONDBLCLK=163;
const WM_NCLBUTTONDOWN=161;
const WM_NCLBUTTONUP=162;
const WM_NCMBUTTONDBLCLK=169;
const WM_NCMBUTTONDOWN=167;
const WM_NCMBUTTONUP=168;
static if (_WIN32_WINNT >= 0x500) {
const WM_NCXBUTTONDOWN=171;
const WM_NCXBUTTONUP=172;
const WM_NCXBUTTONDBLCLK=173;
const WM_NCMOUSEHOVER=0x02A0;
const WM_NCMOUSELEAVE=0x02A2;
}
const WM_NCMOUSEMOVE=160;
const WM_NCPAINT=133;
const WM_NCRBUTTONDBLCLK=166;
const WM_NCRBUTTONDOWN=164;
const WM_NCRBUTTONUP=165;
const WM_NEXTDLGCTL=40;
const WM_NEXTMENU=531;
const WM_NOTIFY=78;
const WM_NOTIFYFORMAT=85;
const WM_NULL=0;
const WM_PAINT=15;
const WM_PAINTCLIPBOARD=777;
const WM_PAINTICON=38;
const WM_PALETTECHANGED=785;
const WM_PALETTEISCHANGING=784;
const WM_PARENTNOTIFY=528;
const WM_PASTE=770;
const WM_PENWINFIRST=896;
const WM_PENWINLAST=911;
const WM_POWER=72;
const WM_POWERBROADCAST=536;
const WM_PRINT=791;
const WM_PRINTCLIENT=792;
const WM_APPCOMMAND = 0x0319;
const WM_QUERYDRAGICON=55;
const WM_QUERYENDSESSION=17;
const WM_QUERYNEWPALETTE=783;
const WM_QUERYOPEN=19;
const WM_QUEUESYNC=35;
const WM_QUIT=18;
const WM_RENDERALLFORMATS=774;
const WM_RENDERFORMAT=773;
const WM_SETCURSOR=32;
const WM_SETFOCUS=7;
const WM_SETFONT=48;
const WM_SETHOTKEY=50;
const WM_SETICON=128;
const WM_SETREDRAW=11;
const WM_SETTEXT=12;
const WM_SETTINGCHANGE=26;
const WM_SHOWWINDOW=24;
const WM_SIZE=5;
const WM_SIZECLIPBOARD=779;
const WM_SIZING=532;
const WM_SPOOLERSTATUS=42;
const WM_STYLECHANGED=125;
const WM_STYLECHANGING=124;
const WM_SYSCHAR=262;
const WM_SYSCOLORCHANGE=21;
const WM_SYSCOMMAND=274;
const WM_SYSDEADCHAR=263;
const WM_SYSKEYDOWN=260;
const WM_SYSKEYUP=261;
static if(_WIN32_WINNT >= 0x501) {
const WM_TABLET_FIRST=704;
const WM_TABLET_LAST=735;
}
const WM_TCARD=82;
const WM_THEMECHANGED=794;
const WM_TIMECHANGE=30;
const WM_TIMER=275;
const WM_UNDO=772;
const WM_USER=1024;
const WM_USERCHANGED=84;
const WM_VKEYTOITEM=46;
const WM_VSCROLL=277;
const WM_VSCROLLCLIPBOARD=778;
const WM_WINDOWPOSCHANGED=71;
const WM_WINDOWPOSCHANGING=70;
const WM_WININICHANGE=26;
static if(_WIN32_WINNT >= 0x501) {
const WM_WTSSESSION_CHANGE=689;
}
const WM_INPUT=255;
const WM_KEYFIRST=256;
static if(_WIN32_WINNT >= 0x501) {
const WM_UNICHAR=265;
const WM_KEYLAST=265;
const UNICODE_NOCHAR=0xFFFF;
} else {
const WM_KEYLAST=264;
}
const WM_SYNCPAINT=136;
const WM_MOUSEACTIVATE=33;
const WM_MOUSEMOVE=512;
const WM_LBUTTONDOWN=513;
const WM_LBUTTONUP=514;
const WM_LBUTTONDBLCLK=515;
const WM_RBUTTONDOWN=516;
const WM_RBUTTONUP=517;
const WM_RBUTTONDBLCLK=518;
const WM_MBUTTONDOWN=519;
const WM_MBUTTONUP=520;
const WM_MBUTTONDBLCLK=521;
const WM_MOUSEWHEEL=522;
const WM_MOUSEFIRST=512;
static if (_WIN32_WINNT >= 0x600) {
const WM_XBUTTONDOWN=523;
const WM_XBUTTONUP=524;
const WM_XBUTTONDBLCLK=525;
const WM_MOUSEHWHEEL=526;
const WM_MOUSELAST=526;
}
else static if (_WIN32_WINNT >= 0x500) {
const WM_XBUTTONDOWN=523;
const WM_XBUTTONUP=524;
const WM_XBUTTONDBLCLK=525;
const WM_MOUSELAST=525;
} else {
const WM_MOUSELAST=522;
}
const WM_MOUSEHOVER=0x2A1;
const WM_MOUSELEAVE=0x2A3;
static if (_WIN32_WINNT >= 0x400) {
const WHEEL_DELTA=120;

SHORT GET_WHEEL_DELTA_WPARAM(WPARAM wparam)
{
return cast(SHORT) HIWORD(wparam);
}

const WHEEL_PAGESCROLL = uint.max;
}
const BM_CLICK=245;
const BM_GETCHECK=240;
const BM_GETIMAGE=246;
const BM_GETSTATE=242;
const BM_SETCHECK=241;
const BM_SETIMAGE=247;
static if(_WIN32_WINNT >= 0x600) {
	const BM_SETDONTCLICK = 248;
}
const BM_SETSTATE=243;
const BM_SETSTYLE=244;
const BN_CLICKED=0;
const BN_DBLCLK=5;
const BN_DISABLE=4;
const BN_DOUBLECLICKED=5;
const BN_HILITE=2;
const BN_KILLFOCUS=7;
const BN_PAINT=1;
const BN_PUSHED=2;
const BN_SETFOCUS=6;
const BN_UNHILITE=3;
const BN_UNPUSHED=3;
const CB_ADDSTRING=323;
const CB_DELETESTRING=324;
const CB_DIR=325;
const CB_FINDSTRING=332;
const CB_FINDSTRINGEXACT=344;
const CB_GETCOUNT=326;
const CB_GETCURSEL=327;
const CB_GETDROPPEDCONTROLRECT=338;
const CB_GETDROPPEDSTATE=343;
const CB_GETDROPPEDWIDTH=351;
const CB_GETEDITSEL=320;
const CB_GETEXTENDEDUI=342;
const CB_GETHORIZONTALEXTENT=349;
const CB_GETITEMDATA=336;
const CB_GETITEMHEIGHT=340;
const CB_GETLBTEXT=328;
const CB_GETLBTEXTLEN=329;
const CB_GETLOCALE=346;
const CB_GETTOPINDEX=347;
const CB_INITSTORAGE=353;
const CB_INSERTSTRING=330;
const CB_LIMITTEXT=321;
const CB_RESETCONTENT=331;
const CB_SELECTSTRING=333;
const CB_SETCURSEL=334;
const CB_SETDROPPEDWIDTH=352;
const CB_SETEDITSEL=322;
const CB_SETEXTENDEDUI=341;
const CB_SETHORIZONTALEXTENT=350;
const CB_SETITEMDATA=337;
const CB_SETITEMHEIGHT=339;
const CB_SETLOCALE=345;
const CB_SETTOPINDEX=348;
const CB_SHOWDROPDOWN=335;

static if(_WIN32_WINNT >= 0x501) {
const CB_GETCOMBOBOXINFO = 356;
}

const CBN_CLOSEUP=8;
const CBN_DBLCLK=2;
const CBN_DROPDOWN=7;
const CBN_EDITCHANGE=5;
const CBN_EDITUPDATE=6;
const CBN_ERRSPACE=(-1);
const CBN_KILLFOCUS=4;
const CBN_SELCHANGE=1;
const CBN_SELENDCANCEL=10;
const CBN_SELENDOK=9;
const CBN_SETFOCUS=3;

const EM_CANUNDO=198;
const EM_CHARFROMPOS=215;
const EM_EMPTYUNDOBUFFER=205;
const EM_FMTLINES=200;
const EM_GETFIRSTVISIBLELINE=206;
const EM_GETHANDLE=189;
const EM_GETLIMITTEXT=213;
const EM_GETLINE=196;
const EM_GETLINECOUNT=186;
const EM_GETMARGINS=212;
const EM_GETMODIFY=184;
const EM_GETPASSWORDCHAR=210;
const EM_GETRECT=178;
const EM_GETSEL=176;
const EM_GETTHUMB=190;
const EM_GETWORDBREAKPROC=209;
const EM_LIMITTEXT=197;
const EM_LINEFROMCHAR=201;
const EM_LINEINDEX=187;
const EM_LINELENGTH=193;
const EM_LINESCROLL=182;
const EM_POSFROMCHAR=214;
const EM_REPLACESEL=194;
const EM_SCROLL=181;
const EM_SCROLLCARET=183;
const EM_SETHANDLE=188;
const EM_SETLIMITTEXT=197;
const EM_SETMARGINS=211;
const EM_SETMODIFY=185;
const EM_SETPASSWORDCHAR=204;
const EM_SETREADONLY=207;
const EM_SETRECT=179;
const EM_SETRECTNP=180;
const EM_SETSEL=177;
const EM_SETTABSTOPS=203;
const EM_SETWORDBREAKPROC=208;
const EM_UNDO=199;

static if(_WIN32_WINNT >= 0x500) {
	const EM_SETIMESTATUS=216;
	const EM_GETIMESTATUS=217;
}

const EN_CHANGE=768;
const EN_ERRSPACE=1280;
const EN_HSCROLL=1537;
const EN_KILLFOCUS=512;
const EN_MAXTEXT=1281;
const EN_SETFOCUS=256;
const EN_UPDATE=1024;
const EN_VSCROLL=1538;

const LB_ADDFILE=406;
const LB_ADDSTRING=384;
const LB_DELETESTRING=386;
const LB_DIR=397;
const LB_FINDSTRING=399;
const LB_FINDSTRINGEXACT=418;
const LB_GETANCHORINDEX=413;
const LB_GETCARETINDEX=415;
const LB_GETCOUNT=395;
const LB_GETCURSEL=392;
const LB_GETHORIZONTALEXTENT=403;
const LB_GETITEMDATA=409;
const LB_GETITEMHEIGHT=417;
const LB_GETITEMRECT=408;
const LB_GETLOCALE=422;
const LB_GETSEL=391;
const LB_GETSELCOUNT=400;
const LB_GETSELITEMS=401;
const LB_GETTEXT=393;
const LB_GETTEXTLEN=394;
const LB_GETTOPINDEX=398;
const LB_INITSTORAGE=424;
const LB_INSERTSTRING=385;
const LB_ITEMFROMPOINT=425;
const LB_RESETCONTENT=388;
const LB_SELECTSTRING=396;
const LB_SELITEMRANGE=411;
const LB_SELITEMRANGEEX=387;
const LB_SETANCHORINDEX=412;
const LB_SETCARETINDEX=414;
const LB_SETCOLUMNWIDTH=405;
const LB_SETCOUNT=423;
const LB_SETCURSEL=390;
const LB_SETHORIZONTALEXTENT=404;
const LB_SETITEMDATA=410;
const LB_SETITEMHEIGHT=416;
const LB_SETLOCALE=421;
const LB_SETSEL=389;
const LB_SETTABSTOPS=402;
const LB_SETTOPINDEX=407;
static if(_WIN32_WINNT >= 0x501) {
const LB_GETLISTBOXINFO=434;
}

const LBN_DBLCLK=2;
const LBN_ERRSPACE=-2;
const LBN_KILLFOCUS=5;
const LBN_SELCANCEL=3;
const LBN_SELCHANGE=1;
const LBN_SETFOCUS=4;

const SBM_ENABLE_ARROWS=228;
const SBM_GETPOS=225;
const SBM_GETRANGE=227;
const SBM_GETSCROLLINFO=234;
const SBM_SETPOS=224;
const SBM_SETRANGE=226;
const SBM_SETRANGEREDRAW=230;
const SBM_SETSCROLLINFO=233;
static if(_WIN32_WINNT >= 0x501) {
const SBM_GETSCROLLBARINFO=235;
}

const STM_GETICON=369;
const STM_GETIMAGE=371;
const STM_SETICON=368;
const STM_SETIMAGE=370;
const STN_CLICKED=0;
const STN_DBLCLK=1;
const STN_DISABLE=3;
const STN_ENABLE=2;

const DM_GETDEFID   = WM_USER;
const DM_SETDEFID   = WM_USER+1;
const DM_REPOSITION = WM_USER+2;

const PSM_PAGEINFO  = WM_USER+100;
const PSM_SHEETINFO = WM_USER+101;

const PSI_SETACTIVE=1;
const PSI_KILLACTIVE=2;
const PSI_APPLY=3;
const PSI_RESET=4;
const PSI_HASHELP=5;
const PSI_HELP=6;
const PSI_CHANGED=1;
const PSI_GUISTART=2;
const PSI_REBOOT=3;
const PSI_GETSIBLINGS=4;

const DCX_WINDOW=1;
const DCX_CACHE=2;
const DCX_PARENTCLIP=32;
const DCX_CLIPSIBLINGS=16;
const DCX_CLIPCHILDREN=8;
const DCX_NORESETATTRS=4;
const DCX_INTERSECTUPDATE=0x200;
const DCX_LOCKWINDOWUPDATE=0x400;
const DCX_EXCLUDERGN=64;
const DCX_INTERSECTRGN=128;
const DCX_VALIDATE=0x200000;

const GMDI_GOINTOPOPUPS=2;
const GMDI_USEDISABLED=1;
const FKF_AVAILABLE=2;
const FKF_CLICKON=64;
const FKF_FILTERKEYSON=1;
const FKF_HOTKEYACTIVE=4;
const FKF_HOTKEYSOUND=16;
const FKF_CONFIRMHOTKEY=8;
const FKF_INDICATOR=32;
const HCF_HIGHCONTRASTON=1;
const HCF_AVAILABLE=2;
const HCF_HOTKEYACTIVE=4;
const HCF_CONFIRMHOTKEY=8;
const HCF_HOTKEYSOUND=16;
const HCF_INDICATOR=32;
const HCF_HOTKEYAVAILABLE=64;
const MKF_AVAILABLE=2;
const MKF_CONFIRMHOTKEY=8;
const MKF_HOTKEYACTIVE=4;
const MKF_HOTKEYSOUND=16;
const MKF_INDICATOR=32;
const MKF_MOUSEKEYSON=1;
const MKF_MODIFIERS=64;
const MKF_REPLACENUMBERS=128;
const SERKF_ACTIVE=8;  // May be obsolete. Not in recent MS docs.
const SERKF_AVAILABLE=2;
const SERKF_INDICATOR=4;
const SERKF_SERIALKEYSON=1;
const SSF_AVAILABLE=2;
const SSF_SOUNDSENTRYON=1;
const SSTF_BORDER=2;
const SSTF_CHARS=1;
const SSTF_DISPLAY=3;
const SSTF_NONE=0;
const SSGF_DISPLAY=3;
const SSGF_NONE=0;
const SSWF_CUSTOM=4;
const SSWF_DISPLAY=3;
const SSWF_NONE=0;
const SSWF_TITLE=1;
const SSWF_WINDOW=2;
const SKF_AUDIBLEFEEDBACK=64;
const SKF_AVAILABLE=2;
const SKF_CONFIRMHOTKEY=8;
const SKF_HOTKEYACTIVE=4;
const SKF_HOTKEYSOUND=16;
const SKF_INDICATOR=32;
const SKF_STICKYKEYSON=1;
const SKF_TRISTATE=128;
const SKF_TWOKEYSOFF=256;
const TKF_AVAILABLE=2;
const TKF_CONFIRMHOTKEY=8;
const TKF_HOTKEYACTIVE=4;
const TKF_HOTKEYSOUND=16;
const TKF_TOGGLEKEYSON=1;
const MDITILE_SKIPDISABLED=2;
const MDITILE_HORIZONTAL=1;
const MDITILE_VERTICAL=0;

enum {
	VK_LBUTTON = 0x01,
	VK_RBUTTON = 0x02,
	VK_CANCEL = 0x03,
	VK_MBUTTON = 0x04,
	//static if (_WIN32_WINNT > =  0x500) {
	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_LSHIFT = 0xA0,
	VK_RSHIFT = 0xA1,
	VK_LCONTROL = 0xA2,
	VK_RCONTROL = 0xA3,
	VK_LMENU = 0xA4,
	VK_RMENU = 0xA5,
	//static if (_WIN32_WINNT > =  0x500) {
	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,
	//static if (_WIN32_WINNT > =  0x500) {
	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_OEM_4 = 0xDB,
	VK_OEM_5 = 0xDC,
	VK_OEM_6 = 0xDD,
	VK_OEM_7 = 0xDE,
	VK_OEM_8 = 0xDF,
	//static if (_WIN32_WINNT > = 0x500) {
	VK_OEM_102 = 0xE2,
	//}
	VK_PROCESSKEY = 0xE5,
	//static if (_WIN32_WINNT > = 0x500) {
	VK_PACKET = 0xE7,
	//}
	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,
}

const TME_HOVER=1;
const TME_LEAVE=2;
const TME_QUERY=0x40000000;
const TME_CANCEL=0x80000000;

const HOVER_DEFAULT=0xFFFFFFFF;

const MK_LBUTTON=1;
const MK_RBUTTON=2;
const MK_SHIFT=4;
const MK_CONTROL=8;
const MK_MBUTTON=16;
static if (_WIN32_WINNT >= 0x500) {
	const MK_XBUTTON1 = 32;
	const MK_XBUTTON2 = 64;
}
const TPM_CENTERALIGN=4;
const TPM_LEFTALIGN=0;
const TPM_RIGHTALIGN=8;
const TPM_LEFTBUTTON=0;
const TPM_RIGHTBUTTON=2;
const TPM_HORIZONTAL=0;
const TPM_VERTICAL=64;
const TPM_TOPALIGN=0;
const TPM_VCENTERALIGN=16;
const TPM_BOTTOMALIGN=32;
const TPM_NONOTIFY=128;
const TPM_RETURNCMD=256;
static if (_WIN32_WINNT >= 0x410) {
	const TPM_RECURSE = 1;
}

const HELP_COMMAND=0x102;
const HELP_CONTENTS=3;
const HELP_CONTEXT=1;
const HELP_CONTEXTPOPUP=8;
const HELP_FORCEFILE=9;
const HELP_HELPONHELP=4;
const HELP_INDEX=3;
const HELP_KEY=0x101;
const HELP_MULTIKEY=0x201;
const HELP_PARTIALKEY=0x105;
const HELP_QUIT=2;
const HELP_SETCONTENTS=5;
const HELP_SETINDEX=5;
const HELP_SETWINPOS=0x203;
const HELP_CONTEXTMENU=0xa;
const HELP_FINDER=0xb;
const HELP_WM_HELP=0xc;
const HELP_TCARD=0x8000;
const HELP_TCARD_DATA=16;
const HELP_TCARD_OTHER_CALLER=0x11;

const IDH_NO_HELP=28440;
const IDH_MISSING_CONTEXT=28441;
const IDH_GENERIC_HELP_BUTTON=28442;
const IDH_OK=28443;
const IDH_CANCEL=28444;
const IDH_HELP=28445;

const LB_CTLCODE=0;
const LB_OKAY=0;
const LB_ERR=-1;
const LB_ERRSPACE=-2;

const CB_OKAY=0;
const CB_ERR=-1;
const CB_ERRSPACE=-2;

const HIDE_WINDOW=0;

const SHOW_OPENWINDOW=1;
const SHOW_ICONWINDOW=2;
const SHOW_FULLSCREEN=3;
const SHOW_OPENNOACTIVATE=4;

const SW_PARENTCLOSING=1;
const SW_OTHERZOOM=2;
const SW_PARENTOPENING=3;
const SW_OTHERUNZOOM=4;

const KF_EXTENDED=256;
const KF_DLGMODE=2048;
const KF_MENUMODE=4096;
const KF_ALTDOWN=8192;
const KF_REPEAT=16384;
const KF_UP=32768;

const WSF_VISIBLE=1;

const PWR_OK=1;
const PWR_FAIL=-1;
const PWR_SUSPENDREQUEST=1;
const PWR_SUSPENDRESUME=2;
const PWR_CRITICALRESUME=3;

const NFR_ANSI=1;
const NFR_UNICODE=2;
const NF_QUERY=3;
const NF_REQUERY=4;

const MENULOOP_WINDOW=0;
const MENULOOP_POPUP=1;

const WMSZ_LEFT=1;
const WMSZ_RIGHT=2;
const WMSZ_TOP=3;
const WMSZ_TOPLEFT=4;
const WMSZ_TOPRIGHT=5;
const WMSZ_BOTTOM=6;
const WMSZ_BOTTOMLEFT=7;
const WMSZ_BOTTOMRIGHT=8;

const HTERROR=-2;
const HTTRANSPARENT=-1;
const HTNOWHERE=0;
const HTCLIENT=1;
const HTCAPTION=2;
const HTSYSMENU=3;
const HTGROWBOX=4;
const HTSIZE=4;
const HTMENU=5;
const HTHSCROLL=6;
const HTVSCROLL=7;
const HTMINBUTTON=8;
const HTMAXBUTTON=9;
const HTREDUCE=8;
const HTZOOM=9;
const HTLEFT=10;
const HTSIZEFIRST=10;
const HTRIGHT=11;
const HTTOP=12;
const HTTOPLEFT=13;
const HTTOPRIGHT=14;
const HTBOTTOM=15;
const HTBOTTOMLEFT=16;
const HTBOTTOMRIGHT=17;
const HTSIZELAST=17;
const HTBORDER=18;
const HTOBJECT=19;
const HTCLOSE=20;
const HTHELP=21;

const MA_ACTIVATE=1;
const MA_ACTIVATEANDEAT=2;
const MA_NOACTIVATE=3;
const MA_NOACTIVATEANDEAT=4;

const SIZE_RESTORED=0;
const SIZE_MINIMIZED=1;
const SIZE_MAXIMIZED=2;
const SIZE_MAXSHOW=3;
const SIZE_MAXHIDE=4;

const SIZENORMAL=0;
const SIZEICONIC=1;
const SIZEFULLSCREEN=2;
const SIZEZOOMSHOW=3;
const SIZEZOOMHIDE=4;

const WVR_ALIGNTOP=16;
const WVR_ALIGNLEFT=32;
const WVR_ALIGNBOTTOM=64;
const WVR_ALIGNRIGHT=128;
const WVR_HREDRAW=256;
const WVR_VREDRAW=512;
const WVR_REDRAW=(WVR_HREDRAW|WVR_VREDRAW);
const WVR_VALIDRECTS=1024;

const PRF_CHECKVISIBLE=1;
const PRF_NONCLIENT=2;
const PRF_CLIENT=4;
const PRF_ERASEBKGND=8;
const PRF_CHILDREN=16;
const PRF_OWNED=32;

const IDANI_OPEN=1;
const IDANI_CLOSE=2;
const IDANI_CAPTION=3;

const WPF_RESTORETOMAXIMIZED=2;
const WPF_SETMINPOSITION=1;

const ODT_MENU=1;
const ODT_LISTBOX=2;
const ODT_COMBOBOX=3;
const ODT_BUTTON=4;
const ODT_STATIC=5;
const ODA_DRAWENTIRE=1;
const ODA_SELECT=2;
const ODA_FOCUS=4;
const ODS_SELECTED=1;
const ODS_GRAYED=2;
const ODS_DISABLED=4;
const ODS_CHECKED=8;
const ODS_FOCUS=16;
const ODS_DEFAULT=32;
const ODS_COMBOBOXEDIT=4096;

const IDHOT_SNAPWINDOW=-1;
const IDHOT_SNAPDESKTOP=-2;

const DBWF_LPARAMPOINTER=0x8000;
const DLGWINDOWEXTRA=30;
const MNC_IGNORE=0;
const MNC_CLOSE=1;
const MNC_EXECUTE=2;
const MNC_SELECT=3;
const DOF_EXECUTABLE=0x8001;
const DOF_DOCUMENT=0x8002;
const DOF_DIRECTORY=0x8003;
const DOF_MULTIPLE=0x8004;
const DOF_PROGMAN=1;
const DOF_SHELLDATA=2;
const DO_DROPFILE=0x454C4946;
const DO_PRINTFILE=0x544E5250;

const SW_SCROLLCHILDREN=1;
const SW_INVALIDATE=2;
const SW_ERASE=4;

const SC_SIZE=0xF000;
const SC_MOVE=0xF010;
const SC_MINIMIZE=0xF020;
const SC_ICON=0xf020;
const SC_MAXIMIZE=0xF030;
const SC_ZOOM=0xF030;
const SC_NEXTWINDOW=0xF040;
const SC_PREVWINDOW=0xF050;
const SC_CLOSE=0xF060;
const SC_VSCROLL=0xF070;
const SC_HSCROLL=0xF080;
const SC_MOUSEMENU=0xF090;
const SC_KEYMENU=0xF100;
const SC_ARRANGE=0xF110;
const SC_RESTORE=0xF120;
const SC_TASKLIST=0xF130;
const SC_SCREENSAVE=0xF140;
const SC_HOTKEY=0xF150;
const SC_DEFAULT=0xF160;
const SC_MONITORPOWER=0xF170;
const SC_CONTEXTHELP=0xF180;
const SC_SEPARATOR=0xF00F;

const EC_LEFTMARGIN=1;
const EC_RIGHTMARGIN=2;
const EC_USEFONTINFO=0xffff;

const DC_HASDEFID=0x534B;

const DLGC_WANTARROWS=1;
const DLGC_WANTTAB=2;
const DLGC_WANTALLKEYS=4;
const DLGC_WANTMESSAGE=4;
const DLGC_HASSETSEL=8;
const DLGC_DEFPUSHBUTTON=16;
const DLGC_UNDEFPUSHBUTTON=32;
const DLGC_RADIOBUTTON=64;
const DLGC_WANTCHARS=128;
const DLGC_STATIC=256;
const DLGC_BUTTON=0x2000;

const WA_INACTIVE=0;
const WA_ACTIVE=1;
const WA_CLICKACTIVE=2;

const ICON_SMALL=0;
const ICON_BIG=1;
static if (_WIN32_WINNT >= 0x501) {
const ICON_SMALL2=2;
}

const HBITMAP
	HBMMENU_CALLBACK = cast(HBITMAP)-1,
	HBMMENU_SYSTEM = cast(HBITMAP)1,
	HBMMENU_MBAR_RESTORE = cast(HBITMAP)2,
	HBMMENU_MBAR_MINIMIZE = cast(HBITMAP)3,
	HBMMENU_MBAR_CLOSE = cast(HBITMAP)5,
	HBMMENU_MBAR_CLOSE_D = cast(HBITMAP)6,
	HBMMENU_MBAR_MINIMIZE_D = cast(HBITMAP)7,
	HBMMENU_POPUP_CLOSE = cast(HBITMAP)8,
	HBMMENU_POPUP_RESTORE = cast(HBITMAP)9,
	HBMMENU_POPUP_MAXIMIZE = cast(HBITMAP)10,
	HBMMENU_POPUP_MINIMIZE = cast(HBITMAP)11;

const MOD_ALT=1;
const MOD_CONTROL=2;
const MOD_SHIFT=4;
const MOD_WIN=8;
const MOD_IGNORE_ALL_MODIFIER=1024;
const MOD_ON_KEYUP=2048;
const MOD_RIGHT=16384;
const MOD_LEFT=32768;

const LLKHF_EXTENDED=(KF_EXTENDED >> 8);
const LLKHF_INJECTED=0x00000010;
const LLKHF_ALTDOWN=(KF_ALTDOWN >> 8);
const LLKHF_UP=(KF_UP >> 8);

static if (_WIN32_WINNT >= 0x500) {
	const FLASHW_STOP=0;
	const FLASHW_CAPTION=1;
	const FLASHW_TRAY=2;
	const FLASHW_ALL=(FLASHW_CAPTION|FLASHW_TRAY);
	const FLASHW_TIMER=4;
	const FLASHW_TIMERNOFG=12;
}

const CURSOR_SHOWING=0x00000001;
const WS_ACTIVECAPTION=0x00000001;
static if (_WIN32_WINNT >= 0x403) {
	const INPUT_MOUSE=0x00000000;
	const INPUT_KEYBOARD=0x00000001;
	const INPUT_HARDWARE=0x00000002;
}
const ENDSESSION_LOGOFF = 0x80000000;

static if (_WIN32_WINNT >= 0x500) {
const CHILDID_SELF   = 0;
const OBJID_WINDOW   = 0x00000000;
const OBJID_SYSMENU  = 0xFFFFFFFF;
const OBJID_TITLEBAR = 0xFFFFFFFE;
const OBJID_MENU     = 0xFFFFFFFD;
const OBJID_CLIENT   = 0xFFFFFFFC;
const OBJID_VSCROLL  = 0xFFFFFFFB;
const OBJID_HSCROLL  = 0xFFFFFFFA;
const OBJID_SIZEGRIP = 0xFFFFFFF9;
const OBJID_CARET    = 0xFFFFFFF8;
const OBJID_CURSOR   = 0xFFFFFFF7;
const OBJID_ALERT    = 0xFFFFFFF6;
const OBJID_SOUND    = 0xFFFFFFF5;

const GUI_CARETBLINKING  = 0x00000001;
const GUI_INMOVESIZE     = 0x00000002;
const GUI_INMENUMODE     = 0x00000004;
const GUI_SYSTEMMENUMODE = 0x00000008;
const GUI_POPUPMENUMODE  = 0x00000010;

static if (_WIN32_WINNT >= 0x501) {
const GUI_16BITTASK      = 0x00000020;
}
const WINEVENT_OUTOFCONTEXT=0x0000;
const WINEVENT_SKIPOWNTHREAD=0x0001;
const WINEVENT_SKIPOWNPROCESS=0x0002;
const WINEVENT_INCONTEXT=0x0004;
const AW_HOR_POSITIVE=0x00000001;
const AW_HOR_NEGATIVE=0x00000002;
const AW_VER_POSITIVE=0x00000004;
const AW_VER_NEGATIVE=0x00000008;
const AW_CENTER=0x00000010;
const AW_HIDE=0x00010000;
const AW_ACTIVATE=0x00020000;
const AW_SLIDE=0x00040000;
const AW_BLEND=0x00080000;
const DEVICE_NOTIFY_WINDOW_HANDLE=0x00000000;
const DEVICE_NOTIFY_SERVICE_HANDLE=0x00000001;

static if (_WIN32_WINNT >= 0x501) {
const DEVICE_NOTIFY_ALL_INTERFACE_CLASSES=0x00000004;
}

const EVENT_MIN = 0x00000001;
const EVENT_SYSTEM_SOUND = 0x00000001;
const EVENT_SYSTEM_ALERT = 0x00000002;
const EVENT_SYSTEM_FOREGROUND = 0x00000003;
const EVENT_SYSTEM_MENUSTART = 0x00000004;
const EVENT_SYSTEM_MENUEND = 0x00000005;
const EVENT_SYSTEM_MENUPOPUPSTART = 0x00000006;
const EVENT_SYSTEM_MENUPOPUPEND = 0x00000007;
const EVENT_SYSTEM_CAPTURESTART = 0x00000008;
const EVENT_SYSTEM_CAPTUREEND = 0x00000009;
const EVENT_SYSTEM_MOVESIZESTART = 0x0000000a;
const EVENT_SYSTEM_MOVESIZEEND = 0x0000000b;
const EVENT_SYSTEM_CONTEXTHELPSTART = 0x0000000c;
const EVENT_SYSTEM_CONTEXTHELPEND = 0x0000000d;
const EVENT_SYSTEM_DRAGDROPSTART = 0x0000000e;
const EVENT_SYSTEM_DRAGDROPEND = 0x0000000f;
const EVENT_SYSTEM_DIALOGSTART = 0x00000010;
const EVENT_SYSTEM_DIALOGEND = 0x00000011;
const EVENT_SYSTEM_SCROLLINGSTART = 0x00000012;
const EVENT_SYSTEM_SCROLLINGEND = 0x00000013;
const EVENT_SYSTEM_SWITCHSTART = 0x00000014;
const EVENT_SYSTEM_SWITCHEND = 0x00000015;
const EVENT_SYSTEM_MINIMIZESTART = 0x00000016;
const EVENT_SYSTEM_MINIMIZEEND = 0x00000017;

const EVENT_OBJECT_CREATE = 0x00008000;
const EVENT_OBJECT_DESTROY = 0x00008001;
const EVENT_OBJECT_SHOW = 0x00008002;
const EVENT_OBJECT_HIDE = 0x00008003;
const EVENT_OBJECT_REORDER = 0x00008004;
const EVENT_OBJECT_FOCUS = 0x00008005;
const EVENT_OBJECT_SELECTION = 0x00008006;
const EVENT_OBJECT_SELECTIONADD = 0x00008007;
const EVENT_OBJECT_SELECTIONREMOVE = 0x00008008;
const EVENT_OBJECT_SELECTIONWITHIN = 0x00008009;
const EVENT_OBJECT_STATECHANGE = 0x0000800a;
const EVENT_OBJECT_LOCATIONCHANGE = 0x0000800b;
const EVENT_OBJECT_NAMECHANGE = 0x0000800c;
const EVENT_OBJECT_DESCRIPTIONCHANGE = 0x0000800d;
const EVENT_OBJECT_VALUECHANGE = 0x0000800e;
const EVENT_OBJECT_PARENTCHANGE = 0x0000800f;
const EVENT_OBJECT_HELPCHANGE = 0x00008010;
const EVENT_OBJECT_DEFACTIONCHANGE = 0x00008011;
const EVENT_OBJECT_ACCELERATORCHANGE = 0x00008012;

static if (_WIN32_WINNT >= 0x501) {
const EVENT_CONSOLE_CARET             = 0x00004001;
const EVENT_CONSOLE_UPDATE_REGION     = 0x00004002;
const EVENT_CONSOLE_UPDATE_SIMPLE     = 0x00004003;
const EVENT_CONSOLE_UPDATE_SCROLL     = 0x00004004;
const EVENT_CONSOLE_LAYOUT            = 0x00004005;
const EVENT_CONSOLE_START_APPLICATION = 0x00004006;
const EVENT_CONSOLE_END_APPLICATION   = 0x00004007;

const CONSOLE_CARET_SELECTION   = 0x00000001;
const CONSOLE_CARET_VISIBLE     = 0x00000002;

const CONSOLE_APPLICATION_16BIT = 0x00000001;

}
const EVENT_MAX=0x7fffffff;

}//(_WIN32_WINNT >= 0x500)

static if (_WIN32_WINNT >= 0x500) {
	const DWORD ASFW_ANY = -1;
	enum : UINT {
		LSFW_LOCK = 1,
		LSFW_UNLOCK
	}

	const LWA_COLORKEY = 0x01;
	const LWA_ALPHA    = 0x02;
	const ULW_COLORKEY = 0x01;
	const ULW_ALPHA    = 0x02;
	const ULW_OPAQUE   = 0x04;
}

const GA_PARENT    = 1;
const GA_ROOT      = 2;
const GA_ROOTOWNER = 3;

static if (_WIN32_WINNT >= 0x500) {
	enum : DWORD {
		MONITOR_DEFAULTTONULL,
		MONITOR_DEFAULTTOPRIMARY,
		MONITOR_DEFAULTTONEAREST // = 2
	}
	const MONITORINFOF_PRIMARY = 1;

	const EDS_RAWMODE = 0x00000002;

	const ISMEX_NOSEND   = 0x00000000;
	const ISMEX_SEND     = 0x00000001;
	const ISMEX_NOTIFY   = 0x00000002;
	const ISMEX_CALLBACK = 0x00000004;
	const ISMEX_REPLIED  = 0x00000008;

	const GR_GDIOBJECTS  = 0;
	const GR_USEROBJECTS = 1;

	const GMMP_USE_DISPLAY_POINTS         = 1;
	const GMMP_USE_HIGH_RESOLUTION_POINTS = 2;
}

static if (_WIN32_WINNT >= 0x501) {
	const PW_CLIENTONLY               = 0x00000001;
	const RIM_INPUT                   = 0x00000000;
	const RIM_INPUTSINK               = 0x00000001;
	const RIM_TYPEMOUSE               = 0x00000000;
	const RIM_TYPEKEYBOARD            = 0x00000001;
	const RIM_TYPEHID                 = 0x00000002;
	const MOUSE_MOVE_RELATIVE         = 0x00000000;
	const MOUSE_MOVE_ABSOLUTE         = 0x00000001;
	const MOUSE_VIRTUAL_DESKTOP       = 0x00000002;
	const MOUSE_ATTRIBUTES_CHANGED    = 0x00000004;
	const RI_MOUSE_LEFT_BUTTON_DOWN   = 0x0001;
	const RI_MOUSE_LEFT_BUTTON_UP     = 0x0002;
	const RI_MOUSE_RIGHT_BUTTON_DOWN  = 0x0004;
	const RI_MOUSE_RIGHT_BUTTON_UP    = 0x0008;
	const RI_MOUSE_MIDDLE_BUTTON_DOWN = 0x0010;
	const RI_MOUSE_MIDDLE_BUTTON_UP   = 0x0020;
	const RI_MOUSE_BUTTON_1_DOWN = RI_MOUSE_LEFT_BUTTON_DOWN;
	const RI_MOUSE_BUTTON_1_UP   = RI_MOUSE_LEFT_BUTTON_UP;
	const RI_MOUSE_BUTTON_2_DOWN = RI_MOUSE_RIGHT_BUTTON_DOWN;
	const RI_MOUSE_BUTTON_2_UP   = RI_MOUSE_RIGHT_BUTTON_UP;
	const RI_MOUSE_BUTTON_3_DOWN = RI_MOUSE_MIDDLE_BUTTON_DOWN;
	const RI_MOUSE_BUTTON_3_UP   = RI_MOUSE_MIDDLE_BUTTON_UP;
	const RI_MOUSE_BUTTON_4_DOWN = 0x0040;
	const RI_MOUSE_BUTTON_4_UP   = 0x0080;
	const RI_MOUSE_BUTTON_5_DOWN = 0x0100;
	const RI_MOUSE_BUTTON_5_UP   = 0x0200;
	const RI_MOUSE_WHEEL         = 0x0400;
	const KEYBOARD_OVERRUN_MAKE_CODE = 0x00ff;
	const RI_KEY_MAKE            = 0x0000;
	const RI_KEY_BREAK           = 0x0001;
	const RI_KEY_E0              = 0x0002;
	const RI_KEY_E1              = 0x0004;
	const RI_KEY_TERMSRV_SET_LED = 0x0008;
	const RI_KEY_TERMSRV_SHADOW  = 0x0010;

	const RID_INPUT          = 0x10000003;
	const RID_HEADER         = 0x10000005;

	const RIDI_PREPARSEDDATA = 0x20000005;
	const RIDI_DEVICENAME    = 0x20000007;
	const RIDI_DEVICEINFO    = 0x2000000b;

	const RIDEV_REMOVE       = 0x00000001;
	const RIDEV_EXCLUDE      = 0x00000010;
	const RIDEV_PAGEONLY     = 0x00000020;
	const RIDEV_NOLEGACY     = 0x00000030;
	const RIDEV_INPUTSINK    = 0x00000100;
	const RIDEV_CAPTUREMOUSE = 0x00000200;
	const RIDEV_NOHOTKEYS    = 0x00000200;
	const RIDEV_APPKEYS      = 0x00000400;
}

// Callbacks
// ---------
extern (Windows) {
	alias INT_PTR function (HWND, UINT, WPARAM, LPARAM) DLGPROC;
	alias void function (HWND, UINT, UINT_PTR, DWORD)   TIMERPROC;
	alias BOOL function (HDC, LPARAM, int)              GRAYSTRINGPROC;
	alias LRESULT function (int, WPARAM, LPARAM)        HOOKPROC;
	alias BOOL function (HWND, LPCSTR, HANDLE)          PROPENUMPROCA;
	alias BOOL function (HWND, LPCWSTR, HANDLE)         PROPENUMPROCW;
	alias BOOL function (HWND, LPSTR, HANDLE, ULONG_PTR)    PROPENUMPROCEXA;
	alias BOOL function (HWND, LPWSTR, HANDLE, ULONG_PTR)   PROPENUMPROCEXW;
	alias int function (LPSTR, int, int, int)           EDITWORDBREAKPROCA;
	alias int function (LPWSTR, int, int, int)          EDITWORDBREAKPROCW;
	alias LRESULT function (HWND, UINT, WPARAM, LPARAM) WNDPROC;
	alias BOOL function (HDC, LPARAM, WPARAM, int, int) DRAWSTATEPROC;
	alias BOOL function (HWND, LPARAM)                  WNDENUMPROC;
	alias BOOL function (HWND, LPARAM)                  ENUMWINDOWSPROC;
	alias void function (LPHELPINFO)                    MSGBOXCALLBACK;

	static if (_WIN32_WINNT >= 0x410) {
		alias BOOL function (HMONITOR, HDC, LPRECT, LPARAM) MONITORENUMPROC;
	}
	alias BOOL function (LPSTR, LPARAM)                 NAMEENUMPROCA;
	alias BOOL function (LPWSTR, LPARAM)                NAMEENUMPROCW;
	alias void function (HWND, UINT, ULONG_PTR, LRESULT)    SENDASYNCPROC;

	alias NAMEENUMPROCA DESKTOPENUMPROCA;
	alias NAMEENUMPROCW DESKTOPENUMPROCW;
	alias NAMEENUMPROCA WINSTAENUMPROCA;
	alias NAMEENUMPROCW WINSTAENUMPROCW;
}

alias TypeDef!(HANDLE) HHOOK;
alias TypeDef!(HANDLE) HDWP;
alias TypeDef!(HANDLE) HDEVNOTIFY;

struct ACCEL {
	BYTE fVirt;
	WORD key;
	WORD cmd;
}
alias ACCEL* LPACCEL;

struct ACCESSTIMEOUT {
	UINT  cbSize = ACCESSTIMEOUT.sizeof;
	DWORD dwFlags;
	DWORD iTimeOutMSec;
}
alias ACCESSTIMEOUT* LPACCESSTIMEOUT;

struct ANIMATIONINFO {
	UINT cbSize = ANIMATIONINFO.sizeof;
	int  iMinAnimate;
}
alias ANIMATIONINFO* LPANIMATIONINFO;

struct CREATESTRUCTA {
	LPVOID    lpCreateParams;
	HINSTANCE hInstance;
	HMENU     hMenu;
	HWND      hwndParent;
	int       cy;
	int       cx;
	int       y;
	int       x;
	LONG      style;
	LPCSTR    lpszName;
	LPCSTR    lpszClass;
	DWORD     dwExStyle;
}
alias CREATESTRUCTA* LPCREATESTRUCTA;

struct CREATESTRUCTW {
	LPVOID    lpCreateParams;
	HINSTANCE hInstance;
	HMENU     hMenu;
	HWND      hwndParent;
	int       cy;
	int       cx;
	int       y;
	int       x;
	LONG      style;
	LPCWSTR   lpszName;
	LPCWSTR   lpszClass;
	DWORD     dwExStyle;
}
alias CREATESTRUCTW* LPCREATESTRUCTW;

struct CBT_CREATEWNDA {
	LPCREATESTRUCTA lpcs;
	HWND            hwndInsertAfter;
}
alias CBT_CREATEWNDA* LPCBT_CREATEWNDA;

struct CBT_CREATEWNDW {
	LPCREATESTRUCTW lpcs;
	HWND            hwndInsertAfter;
}
alias CBT_CREATEWNDW* LPCBT_CREATEWNDW;

struct CBTACTIVATESTRUCT {
	BOOL fMouse;
	HWND hWndActive;
}
alias CBTACTIVATESTRUCT* LPCBTACTIVATESTRUCT;

static if (_WIN32_WINNT >= 0x501) {

struct WTSSESSION_NOTIFICATION
{
    DWORD cbSize;
    DWORD dwSessionId;
}
alias WTSSESSION_NOTIFICATION* PWTSSESSION_NOTIFICATION;

}

struct CLIENTCREATESTRUCT {
	HANDLE hWindowMenu;
	UINT   idFirstChild;
}
alias CLIENTCREATESTRUCT* LPCLIENTCREATESTRUCT;

struct COMPAREITEMSTRUCT {
	UINT  CtlType;
	UINT  CtlID;
	HWND  hwndItem;
	UINT  itemID1;
	DWORD itemData1;
	UINT  itemID2;
	DWORD itemData2;
	DWORD dwLocaleId;
}
alias COMPAREITEMSTRUCT* LPCOMPAREITEMSTRUCT;

struct COPYDATASTRUCT {
	DWORD dwData;
	DWORD cbData;
	PVOID lpData;
}
alias COPYDATASTRUCT* PCOPYDATASTRUCT;

struct CURSORSHAPE {
	int xHotSpot;
	int yHotSpot;
	int cx;
	int cy;
	int cbWidth;
	BYTE Planes;
	BYTE BitsPixel;
}
alias CURSORSHAPE* LPCURSORSHAPE;

struct CWPRETSTRUCT {
	LRESULT lResult;
	LPARAM lParam;
	WPARAM wParam;
	DWORD message;
	HWND hwnd;
}

struct CWPSTRUCT {
	LPARAM lParam;
	WPARAM wParam;
	UINT message;
	HWND hwnd;
}
alias CWPSTRUCT* PCWPSTRUCT;

struct DEBUGHOOKINFO {
	DWORD idThread;
	DWORD idThreadInstaller;
	LPARAM lParam;
	WPARAM wParam;
	int code;
}
alias DEBUGHOOKINFO* PDEBUGHOOKINFO, LPDEBUGHOOKINFO;

struct DELETEITEMSTRUCT {
	UINT CtlType;
	UINT CtlID;
	UINT itemID;
	HWND hwndItem;
	UINT itemData;
}
alias DELETEITEMSTRUCT* PDELETEITEMSTRUCT, LPDELETEITEMSTRUCT;

align(2):
struct DLGITEMTEMPLATE {
	DWORD style;
	DWORD dwExtendedStyle;
	short x;
	short y;
	short cx;
	short cy;
	WORD id;
}
alias DLGITEMTEMPLATE* LPDLGITEMTEMPLATE;

struct DLGTEMPLATE {
	DWORD style;
	DWORD dwExtendedStyle;
	WORD  cdit;
	short x;
	short y;
	short cx;
	short cy;
}
alias DLGTEMPLATE*        LPDLGTEMPLATE, LPDLGTEMPLATEA, LPDLGTEMPLATEW;
alias const(DLGTEMPLATE)* LPCDLGTEMPLATE;

align:

struct DRAWITEMSTRUCT {
	UINT  CtlType;
	UINT  CtlID;
	UINT  itemID;
	UINT  itemAction;
	UINT  itemState;
	HWND  hwndItem;
	HDC   hDC;
	RECT  rcItem;
	DWORD itemData;
}
alias DRAWITEMSTRUCT* LPDRAWITEMSTRUCT, PDRAWITEMSTRUCT;

struct DRAWTEXTPARAMS {
	UINT cbSize = DRAWTEXTPARAMS.sizeof;
	int  iTabLength;
	int  iLeftMargin;
	int  iRightMargin;
	UINT uiLengthDrawn;
}
alias DRAWTEXTPARAMS* LPDRAWTEXTPARAMS;

struct PAINTSTRUCT {
	HDC      hdc;
	BOOL     fErase;
	RECT     rcPaint;
	BOOL     fRestore;
	BOOL     fIncUpdate;
	BYTE[32] rgbReserved;
}
alias PAINTSTRUCT* LPPAINTSTRUCT;

struct MSG {
	HWND   hwnd;
	UINT   message;
	WPARAM wParam;
	LPARAM lParam;
	DWORD  time;
	POINT  pt;
}
alias MSG* LPMSG, PMSG;

struct ICONINFO {
	BOOL    fIcon;
	DWORD   xHotspot;
	DWORD   yHotspot;
	HBITMAP hbmMask;
	HBITMAP hbmColor;
}
alias ICONINFO* PICONINFO;

struct NMHDR {
	HWND hwndFrom;
	UINT_PTR idFrom;
	UINT code;
}
alias NMHDR* LPNMHDR;

struct WNDCLASSA {
	UINT      style;
	WNDPROC   lpfnWndProc;
	int       cbClsExtra;
	int       cbWndExtra;
	HINSTANCE hInstance;
	HICON     hIcon;
	HCURSOR   hCursor;
	HBRUSH    hbrBackground;
	LPCSTR    lpszMenuName;
	LPCSTR    lpszClassName;
}
alias WNDCLASSA* LPWNDCLASSA, PWNDCLASSA;

struct WNDCLASSW {
	UINT      style;
	WNDPROC   lpfnWndProc;
	int       cbClsExtra;
	int       cbWndExtra;
	HINSTANCE hInstance;
	HICON     hIcon;
	HCURSOR   hCursor;
	HBRUSH    hbrBackground;
	LPCWSTR   lpszMenuName;
	LPCWSTR   lpszClassName;
}
alias WNDCLASSW* LPWNDCLASSW, PWNDCLASSW;

struct WNDCLASSEXA {
	UINT      cbSize = WNDCLASSEXA.sizeof;
	UINT      style;
	WNDPROC   lpfnWndProc;
	int       cbClsExtra;
	int       cbWndExtra;
	HINSTANCE hInstance;
	HICON     hIcon;
	HCURSOR   hCursor;
	HBRUSH    hbrBackground;
	LPCSTR    lpszMenuName;
	LPCSTR    lpszClassName;
	HICON     hIconSm;
}
alias WNDCLASSEXA* LPWNDCLASSEXA, PWNDCLASSEXA;

struct WNDCLASSEXW {
	UINT      cbSize = WNDCLASSEXW.sizeof;
	UINT      style;
	WNDPROC   lpfnWndProc;
	int       cbClsExtra;
	int       cbWndExtra;
	HINSTANCE hInstance;
	HICON     hIcon;
	HCURSOR   hCursor;
	HBRUSH    hbrBackground;
	LPCWSTR   lpszMenuName;
	LPCWSTR   lpszClassName;
	HICON     hIconSm;
}
alias WNDCLASSEXW* LPWNDCLASSEXW, PWNDCLASSEXW;

static if(_WIN32_WINNT >= 0x500) {

struct MENUGETOBJECTINFO
{
    DWORD dwFlags;
    UINT uPos;
    HMENU hmenu;
    PVOID riid;
    PVOID pvObj;
}
alias MENUGETOBJECTINFO* PMENUGETOBJECTINFO;

}

struct MENUITEMINFOA {
	UINT    cbSize = MENUITEMINFOA.sizeof;
	UINT    fMask;
	UINT    fType;
	UINT    fState;
	UINT    wID;
	HMENU   hSubMenu;
	HBITMAP hbmpChecked;
	HBITMAP hbmpUnchecked;
	DWORD   dwItemData;
	LPSTR   dwTypeData;
	UINT    cch;
	static if (_WIN32_WINNT >= 0x500) {
		HBITMAP hbmpItem;
	}
}
alias MENUITEMINFOA*        LPMENUITEMINFOA;
alias const(MENUITEMINFOA)* LPCMENUITEMINFOA;

struct MENUITEMINFOW {
	UINT    cbSize = MENUITEMINFOW.sizeof;
	UINT    fMask;
	UINT    fType;
	UINT    fState;
	UINT    wID;
	HMENU   hSubMenu;
	HBITMAP hbmpChecked;
	HBITMAP hbmpUnchecked;
	DWORD   dwItemData;
	LPWSTR  dwTypeData;
	UINT    cch;
	static if (_WIN32_WINNT >= 0x500) {
		HBITMAP hbmpItem;
	}
}
alias MENUITEMINFOW*        LPMENUITEMINFOW;
alias const(MENUITEMINFOW)* LPCMENUITEMINFOW;

struct SCROLLINFO {
	UINT cbSize = this.sizeof;
	UINT fMask;
	int nMin;
	int nMax;
	UINT nPage;
	int nPos;
	int nTrackPos;
}
alias SCROLLINFO*        LPSCROLLINFO;
alias const(SCROLLINFO)* LPCSCROLLINFO;

struct WINDOWPLACEMENT {
	UINT length;
	UINT flags;
	UINT showCmd;
	POINT ptMinPosition;
	POINT ptMaxPosition;
	RECT rcNormalPosition;
}
alias WINDOWPLACEMENT* LPWINDOWPLACEMENT, PWINDOWPLACEMENT;

struct MENUITEMTEMPLATEHEADER {
	WORD versionNumber;
	WORD offset;
}

struct MENUITEMTEMPLATE {
	WORD mtOption;
	WORD mtID;
	WCHAR[1] mtString;
}

alias void MENUTEMPLATE, MENUTEMPLATEA, MENUTEMPLATEW;

alias MENUTEMPLATE* LPMENUTEMPLATEA, LPMENUTEMPLATEW, LPMENUTEMPLATE;

struct HELPINFO {
	UINT cbSize = this.sizeof;
	int iContextType;
	int iCtrlId;
	HANDLE hItemHandle;
	DWORD dwContextId;
	POINT MousePos;
}
alias HELPINFO* LPHELPINFO;

struct MSGBOXPARAMSA {
	UINT cbSize = this.sizeof;
	HWND hwndOwner;
	HINSTANCE hInstance;
	LPCSTR lpszText;
	LPCSTR lpszCaption;
	DWORD dwStyle;
	LPCSTR lpszIcon;
	DWORD dwContextHelpId;
	MSGBOXCALLBACK lpfnMsgBoxCallback;
	DWORD dwLanguageId;
}
alias MSGBOXPARAMSA* PMSGBOXPARAMSA, LPMSGBOXPARAMSA;

struct MSGBOXPARAMSW {
	UINT cbSize = this.sizeof;
	HWND hwndOwner;
	HINSTANCE hInstance;
	LPCWSTR lpszText;
	LPCWSTR lpszCaption;
	DWORD dwStyle;
	LPCWSTR lpszIcon;
	DWORD dwContextHelpId;
	MSGBOXCALLBACK lpfnMsgBoxCallback;
	DWORD dwLanguageId;
}
alias MSGBOXPARAMSW* PMSGBOXPARAMSW, LPMSGBOXPARAMSW;

struct USEROBJECTFLAGS {
	BOOL fInherit;
	BOOL fReserved;
	DWORD dwFlags;
}

struct FILTERKEYS {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	DWORD iWaitMSec;
	DWORD iDelayMSec;
	DWORD iRepeatMSec;
	DWORD iBounceMSec;
}

struct HIGHCONTRASTA {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	LPSTR lpszDefaultScheme;
}
alias HIGHCONTRASTA* LPHIGHCONTRASTA;

struct HIGHCONTRASTW {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	LPWSTR lpszDefaultScheme;
}
alias HIGHCONTRASTW* LPHIGHCONTRASTW;

struct ICONMETRICSA {
	UINT cbSize = this.sizeof;
	int iHorzSpacing;
	int iVertSpacing;
	int iTitleWrap;
	LOGFONTA lfFont;
}
alias ICONMETRICSA* LPICONMETRICSA;

struct ICONMETRICSW {
	UINT cbSize = this.sizeof;
	int iHorzSpacing;
	int iVertSpacing;
	int iTitleWrap;
	LOGFONTW lfFont;
}
alias ICONMETRICSW* LPICONMETRICSW;

struct MINIMIZEDMETRICS {
	UINT cbSize = this.sizeof;
	int iWidth;
	int iHorzGap;
	int iVertGap;
	int iArrange;
}
alias MINIMIZEDMETRICS* LPMINIMIZEDMETRICS;

struct MOUSEKEYS {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	DWORD iMaxSpeed;
	DWORD iTimeToMaxSpeed;
	DWORD iCtrlSpeed;
	DWORD dwReserved1;
	DWORD dwReserved2;
}
alias MOUSEKEYS* LPMOUSEKEYS;

struct NONCLIENTMETRICSA {
	UINT cbSize = this.sizeof;
	int iBorderWidth;
	int iScrollWidth;
	int iScrollHeight;
	int iCaptionWidth;
	int iCaptionHeight;
	LOGFONTA lfCaptionFont;
	int iSmCaptionWidth;
	int iSmCaptionHeight;
	LOGFONTA lfSmCaptionFont;
	int iMenuWidth;
	int iMenuHeight;
	LOGFONTA lfMenuFont;
	LOGFONTA lfStatusFont;
	LOGFONTA lfMessageFont;
}
alias NONCLIENTMETRICSA* LPNONCLIENTMETRICSA;

struct NONCLIENTMETRICSW {
	UINT cbSize = this.sizeof;
	int iBorderWidth;
	int iScrollWidth;
	int iScrollHeight;
	int iCaptionWidth;
	int iCaptionHeight;
	LOGFONTW lfCaptionFont;
	int iSmCaptionWidth;
	int iSmCaptionHeight;
	LOGFONTW lfSmCaptionFont;
	int iMenuWidth;
	int iMenuHeight;
	LOGFONTW lfMenuFont;
	LOGFONTW lfStatusFont;
	LOGFONTW lfMessageFont;
}
alias NONCLIENTMETRICSW* LPNONCLIENTMETRICSW;

struct SERIALKEYSA {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	LPSTR lpszActivePort;
	LPSTR lpszPort;
	UINT iBaudRate;
	UINT iPortState;
	UINT iActive;
}
alias SERIALKEYSA* LPSERIALKEYSA;

struct SERIALKEYSW {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	LPWSTR lpszActivePort;
	LPWSTR lpszPort;
	UINT iBaudRate;
	UINT iPortState;
	UINT iActive;
}
alias SERIALKEYSW* LPSERIALKEYSW;

struct SOUNDSENTRYA {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	DWORD iFSTextEffect;
	DWORD iFSTextEffectMSec;
	DWORD iFSTextEffectColorBits;
	DWORD iFSGrafEffect;
	DWORD iFSGrafEffectMSec;
	DWORD iFSGrafEffectColor;
	DWORD iWindowsEffect;
	DWORD iWindowsEffectMSec;
	LPSTR lpszWindowsEffectDLL;
	DWORD iWindowsEffectOrdinal;
}
alias SOUNDSENTRYA* LPSOUNDSENTRYA;

struct SOUNDSENTRYW {
	UINT cbSize = this.sizeof;
	DWORD dwFlags;
	DWORD iFSTextEffect;
	DWORD iFSTextEffectMSec;
	DWORD iFSTextEffectColorBits;
	DWORD iFSGrafEffect;
	DWORD iFSGrafEffectMSec;
	DWORD iFSGrafEffectColor;
	DWORD iWindowsEffect;
	DWORD iWindowsEffectMSec;
	LPWSTR lpszWindowsEffectDLL;
	DWORD iWindowsEffectOrdinal;
}
alias SOUNDSENTRYW* LPSOUNDSENTRYW;

struct STICKYKEYS {
	DWORD cbSize = this.sizeof;
	DWORD dwFlags;
}
alias STICKYKEYS* LPSTICKYKEYS;

struct TOGGLEKEYS {
	DWORD cbSize = this.sizeof;
	DWORD dwFlags;
}

struct MOUSEHOOKSTRUCT {
	POINT pt;
	HWND hwnd;
	UINT wHitTestCode;
	DWORD dwExtraInfo;
}
alias MOUSEHOOKSTRUCT* LPMOUSEHOOKSTRUCT, PMOUSEHOOKSTRUCT;

struct TRACKMOUSEEVENT {
	DWORD cbSize = this.sizeof;
	DWORD dwFlags;
	HWND  hwndTrack;
	DWORD dwHoverTime;
}
alias TRACKMOUSEEVENT* LPTRACKMOUSEEVENT;

struct TPMPARAMS {
	UINT cbSize = this.sizeof;
	RECT rcExclude;
}
alias TPMPARAMS* LPTPMPARAMS;

struct EVENTMSG {
	UINT message;
	UINT paramL;
	UINT paramH;
	DWORD time;
	HWND hwnd;
}
alias EVENTMSG* PEVENTMSGMSG, LPEVENTMSGMSG, PEVENTMSG, LPEVENTMSG;

struct WINDOWPOS {
	HWND hwnd;
	HWND hwndInsertAfter;
	int x;
	int y;
	int cx;
	int cy;
	UINT flags;
}
alias WINDOWPOS* PWINDOWPOS, LPWINDOWPOS;

struct NCCALCSIZE_PARAMS {
	RECT[3] rgrc;
	PWINDOWPOS lppos;
}
alias NCCALCSIZE_PARAMS* LPNCCALCSIZE_PARAMS;

struct MDICREATESTRUCTA {
	LPCSTR szClass;
	LPCSTR szTitle;
	HANDLE hOwner;
	int x;
	int y;
	int cx;
	int cy;
	DWORD style;
	LPARAM lParam;
}
alias MDICREATESTRUCTA* LPMDICREATESTRUCTA;

struct MDICREATESTRUCTW {
	LPCWSTR szClass;
	LPCWSTR szTitle;
	HANDLE hOwner;
	int x;
	int y;
	int cx;
	int cy;
	DWORD style;
	LPARAM lParam;
}
alias MDICREATESTRUCTW* LPMDICREATESTRUCTW;

struct MINMAXINFO {
	POINT ptReserved;
	POINT ptMaxSize;
	POINT ptMaxPosition;
	POINT ptMinTrackSize;
	POINT ptMaxTrackSize;
}
alias MINMAXINFO* PMINMAXINFO, LPMINMAXINFO;

struct MDINEXTMENU {
	HMENU hmenuIn;
	HMENU hmenuNext;
	HWND hwndNext;
}
alias MDINEXTMENU* PMDINEXTMENU, LPMDINEXTMENU;

struct MEASUREITEMSTRUCT {
	UINT CtlType;
	UINT CtlID;
	UINT itemID;
	UINT itemWidth;
	UINT itemHeight;
	DWORD itemData;
}
alias MEASUREITEMSTRUCT* PMEASUREITEMSTRUCT, LPMEASUREITEMSTRUCT;

struct DROPSTRUCT {
	HWND hwndSource;
	HWND hwndSink;
	DWORD wFmt;
	DWORD dwData;
	POINT ptDrop;
	DWORD dwControlData;
}
alias DROPSTRUCT* PDROPSTRUCT, LPDROPSTRUCT;

alias DWORD HELPPOLY;

struct MULTIKEYHELPA {
	DWORD mkSize;
	CHAR mkKeylist;
	CHAR[1] szKeyphrase;
}
alias MULTIKEYHELPA* PMULTIKEYHELPA, LPMULTIKEYHELPA;

struct MULTIKEYHELPW {
	DWORD mkSize;
	WCHAR mkKeylist;
	WCHAR[1] szKeyphrase;
}
alias MULTIKEYHELPW* PMULTIKEYHELPW, LPMULTIKEYHELPW;

struct HELPWININFOA {
	int wStructSize;
	int x;
	int y;
	int dx;
	int dy;
	int wMax;
	CHAR[2] rgchMember;
}
alias HELPWININFOA* PHELPWININFOA, LPHELPWININFOA;

struct HELPWININFOW {
	int wStructSize;
	int x;
	int y;
	int dx;
	int dy;
	int wMax;
	WCHAR[2] rgchMember;
}
alias HELPWININFOW* PHELPWININFOW, LPHELPWININFOW;

struct STYLESTRUCT {
	DWORD styleOld;
	DWORD styleNew;
}
alias STYLESTRUCT* LPSTYLESTRUCT;

struct ALTTABINFO {
	DWORD cbSize = this.sizeof;
	int   cItems;
	int   cColumns;
	int   cRows;
	int   iColFocus;
	int   iRowFocus;
	int   cxItem;
	int   cyItem;
	POINT ptStart;
}
alias ALTTABINFO* PALTTABINFO, LPALTTABINFO;

struct COMBOBOXINFO {
	DWORD cbSize = this.sizeof;
	RECT rcItem;
	RECT rcButton;
	DWORD stateButton;
	HWND hwndCombo;
	HWND hwndItem;
	HWND hwndList;
}
alias COMBOBOXINFO* PCOMBOBOXINFO, LPCOMBOBOXINFO;

struct CURSORINFO {
	DWORD cbSize = this.sizeof;
	DWORD flags;
	HCURSOR hCursor;
	POINT ptScreenPos;
}
alias CURSORINFO* PCURSORINFO, LPCURSORINFO;

struct MENUBARINFO {
	DWORD cbSize = this.sizeof;
	RECT  rcBar;
	HMENU hMenu;
	HWND  hwndMenu;
	byte bf_; // Simulated bitfield
//	BOOL  fBarFocused:1;
//	BOOL  fFocused:1;
	bool fBarFocused() { return (bf_ & 1) == 1; }
	bool fFocused() { return (bf_ & 2) == 2; }
	void fBarFocused(bool b) { bf_ = cast(byte)((bf_ & 0xFE) | b); }
	void fFocused(bool b) { bf_ = cast(byte)(b ? (bf_ | 2) : bf_ & 0xFD); }
}
alias MENUBARINFO* PMENUBARINFO;

struct MENUINFO {
	DWORD cbSize = this.sizeof;
	DWORD fMask;
	DWORD dwStyle;
	UINT cyMax;
	HBRUSH  hbrBack;
	DWORD   dwContextHelpID;
	ULONG_PTR dwMenuData;
}
alias MENUINFO*        LPMENUINFO;
alias const(MENUINFO)* LPCMENUINFO;


const CCHILDREN_SCROLLBAR=5;

struct SCROLLBARINFO {
	DWORD cbSize = this.sizeof;
	RECT  rcScrollBar;
	int   dxyLineButton;
	int   xyThumbTop;
	int   xyThumbBottom;
	int   reserved;
	DWORD[CCHILDREN_SCROLLBAR+1] rgstate;
}
alias SCROLLBARINFO* PSCROLLBARINFO, LPSCROLLBARINFO;

const CCHILDREN_TITLEBAR=5;

struct TITLEBARINFO {
	DWORD cbSize = TITLEBARINFO.sizeof;
	RECT  rcTitleBar;
	DWORD[CCHILDREN_TITLEBAR+1] rgstate;
}
alias TITLEBARINFO* PTITLEBARINFO, LPTITLEBARINFO;

struct WINDOWINFO {
	DWORD cbSize = WINDOWINFO.sizeof;
	RECT  rcWindow;
	RECT  rcClient;
	DWORD dwStyle;
	DWORD dwExStyle;
	DWORD dwWindowStatus;
	UINT  cxWindowBorders;
	UINT  cyWindowBorders;
	ATOM  atomWindowType;
	WORD  wCreatorVersion;
}
alias WINDOWINFO* PWINDOWINFO, LPWINDOWINFO;

struct LASTINPUTINFO {
	UINT cbSize = this.sizeof;
	DWORD dwTime;
}
alias LASTINPUTINFO* PLASTINPUTINFO;

struct MONITORINFO {
	DWORD cbSize = this.sizeof;
	RECT rcMonitor;
	RECT rcWork;
	DWORD dwFlags;
}
alias MONITORINFO* LPMONITORINFO;

const CCHDEVICENAME=32;

struct MONITORINFOEXA {
	DWORD cbSize = MONITORINFOEXA.sizeof;
	RECT  rcMonitor;
	RECT  rcWork;
	DWORD dwFlags;
	CHAR[CCHDEVICENAME] szDevice;
}
alias MONITORINFOEXA* LPMONITORINFOEXA;

struct MONITORINFOEXW {
	DWORD cbSize = MONITORINFOEXW.sizeof;
	RECT  rcMonitor;
	RECT  rcWork;
	DWORD dwFlags;
	WCHAR[CCHDEVICENAME] szDevice;
}
alias MONITORINFOEXW* LPMONITORINFOEXW;

struct KBDLLHOOKSTRUCT {
	DWORD vkCode;
	DWORD scanCode;
	DWORD flags;
	DWORD time;
	DWORD dwExtraInfo;
}
alias KBDLLHOOKSTRUCT* LPKBDLLHOOKSTRUCT, PKBDLLHOOKSTRUCT;

static if (_WIN32_WINNT >= 0x501) {
	struct FLASHWINFO {
		UINT  cbSize = this.sizeof;
		HWND  hwnd;
		DWORD dwFlags;
		UINT  uCount;
		DWORD dwTimeout;
	}
	alias FLASHWINFO* PFLASHWINFO;
}

static if (_WIN32_WINNT >= 0x500) {

	struct MOUSEMOVEPOINT {
		int x;
		int y;
		DWORD time;
		ULONG_PTR dwExtraInfo;
	}
	alias MOUSEMOVEPOINT* PMOUSEMOVEPOINT, LPMOUSEMOVEPOINT;
}

static if (_WIN32_WINNT >= 0x403) {
	struct MOUSEINPUT {
		LONG dx;
		LONG dy;
		DWORD mouseData;
		DWORD dwFlags;
		DWORD time;
		ULONG_PTR dwExtraInfo;
	}
	alias MOUSEINPUT* PMOUSEINPUT;

	struct KEYBDINPUT {
		WORD wVk;
		WORD wScan;
		DWORD dwFlags;
		DWORD time;
		ULONG_PTR dwExtraInfo;
	}
	alias KEYBDINPUT* PKEYBDINPUT;

	struct HARDWAREINPUT {
		DWORD uMsg;
		WORD wParamL;
		WORD wParamH;
	}
	alias HARDWAREINPUT* PHARDWAREINPUT;

	struct INPUT {
		DWORD type;
		union {
			MOUSEINPUT mi;
			KEYBDINPUT ki;
			HARDWAREINPUT hi;
		}
	}
	alias INPUT* PINPUT, LPINPUT;
}// (_WIN32_WINNT >= 0x403)

static if (_WIN32_WINNT >= 0x500) {
	struct GUITHREADINFO {
		DWORD cbSize = this.sizeof;
		DWORD flags;
		HWND hwndActive;
		HWND hwndFocus;
		HWND hwndCapture;
		HWND hwndMenuOwner;
		HWND hwndMoveSize;
		HWND hwndCaret;
		RECT rcCaret;
	}
	alias GUITHREADINFO* PGUITHREADINFO, LPGUITHREADINFO;
	extern (Windows) {
		alias void function (HWINEVENTHOOK, DWORD, HWND, LONG, LONG, DWORD, DWORD) WINEVENTPROC;
	}

}// (_WIN32_WINNT >= 0x500)

static if (_WIN32_WINNT >= 0x501) {
	struct BSMINFO {
		UINT  cbSize = this.sizeof;
		HDESK hdesk;
		HWND  hwnd;
		LUID  luid;
	}
	alias BSMINFO* PBSMINFO;

	alias TypeDef!(HANDLE) HRAWINPUT;

	struct RAWINPUTHEADER {
		DWORD dwType;
		DWORD dwSize;
		HANDLE hDevice;
		WPARAM wParam;
	}
	alias RAWINPUTHEADER* PRAWINPUTHEADER;

	struct RAWMOUSE {
		USHORT usFlags;
		union {
			ULONG ulButtons;
			struct {
				USHORT usButtonFlags;
				USHORT usButtonData;
			}
		}
		ULONG ulRawButtons;
		LONG lLastX;
		LONG lLastY;
		ULONG ulExtraInformation;
	}
	alias RAWMOUSE* PRAWMOUSE, LPRAWMOUSE;

	struct RAWKEYBOARD {
		USHORT MakeCode;
		USHORT Flags;
		USHORT Reserved;
		USHORT VKey;
		UINT Message;
		ULONG ExtraInformation;
	}
	alias RAWKEYBOARD* PRAWKEYBOARD, LPRAWKEYBOARD;

	struct RAWHID {
		DWORD dwSizeHid;
		DWORD dwCount;
		BYTE bRawData;
	}
	alias RAWHID* PRAWHID, LPRAWHID;

	struct RAWINPUT {
		RAWINPUTHEADER header;
		union _data {
			RAWMOUSE    mouse;
			RAWKEYBOARD keyboard;
			RAWHID      hid;
		}
		_data data;
	}
	alias RAWINPUT* PRAWINPUT, LPRAWINPUT;

	struct RAWINPUTDEVICE {
		USHORT usUsagePage;
		USHORT usUsage;
		DWORD dwFlags;
		HWND hwndTarget;
	}
	alias RAWINPUTDEVICE*        PRAWINPUTDEVICE, LPRAWINPUTDEVICE;
	alias const(RAWINPUTDEVICE)* PCRAWINPUTDEVICE;

	struct RAWINPUTDEVICELIST {
		HANDLE hDevice;
		DWORD dwType;
	}
	alias RAWINPUTDEVICELIST* PRAWINPUTDEVICELIST;

	struct RID_DEVICE_INFO_MOUSE {
		DWORD dwId;
		DWORD dwNumberOfButtons;
		DWORD dwSampleRate;
		BOOL  fHasHorizontalWheel;
	}

	struct RID_DEVICE_INFO_KEYBOARD {
		DWORD dwType;
		DWORD dwSubType;
		DWORD dwKeyboardMode;
		DWORD dwNumberOfFunctionKeys;
		DWORD dwNumberOfIndicators;
		DWORD dwNumberOfKeysTotal;
	}

	struct RID_DEVICE_INFO_HID {
		DWORD dwVendorId;
		DWORD dwProductId;
		DWORD dwVersionNumber;
		USHORT usUsagePage;
		USHORT usUsage;
	}

	struct RID_DEVICE_INFO {
		DWORD cbSize = this.sizeof;
		DWORD dwType;
		union {
			RID_DEVICE_INFO_MOUSE mouse;
			RID_DEVICE_INFO_KEYBOARD keyboard;
			RID_DEVICE_INFO_HID hid;
		}
	}
}// (_WIN32_WINNT >= 0x501)

struct MSLLHOOKSTRUCT {
	POINT pt;
	DWORD mouseData;
	DWORD flags;
	DWORD time;
	ULONG_PTR dwExtraInfo;
}
alias MSLLHOOKSTRUCT* PMSLLHOOKSTRUCT;

alias CharToOemA AnsiToOem;
alias OemToCharA OemToAnsi;
alias CharToOemBuffA AnsiToOemBuff;
alias OemToCharBuffA OemToAnsiBuff;
alias CharUpperA AnsiUpper;
alias CharUpperBuffA AnsiUpperBuff;
alias CharLowerA AnsiLower;
alias CharLowerBuffA AnsiLowerBuff;
alias CharNextA AnsiNext;
alias CharPrevA AnsiPrev;

alias MAKELONG MAKEWPARAM;
alias MAKELONG MAKELPARAM;
alias MAKELONG MAKELRESULT;

//MACRO #define POINTSTOPOINT(p, ps) { (p).x=LOWORD(*(DWORD*)&ps); (p).y=HIWORD(*(DWORD*)&ps); }
//MACRO #define POINTTOPOINTS(p) ((POINTS)MAKELONG((p).x, (p).y))

extern (Windows) {

	HKL ActivateKeyboardLayout(HKL, UINT);
	BOOL AdjustWindowRect(LPRECT, DWORD, BOOL);
	BOOL AdjustWindowRectEx(LPRECT, DWORD, BOOL, DWORD);
	BOOL AnyPopup();
	BOOL AppendMenuA(HMENU, UINT, UINT_PTR, LPCSTR);
	BOOL AppendMenuW(HMENU, UINT, UINT_PTR, LPCWSTR);
	UINT ArrangeIconicWindows(HWND);
	BOOL AttachThreadInput(DWORD, DWORD, BOOL);
	HDWP BeginDeferWindowPos(int);
	HDC BeginPaint(HWND, LPPAINTSTRUCT);
	BOOL BringWindowToTop(HWND);
	BOOL CallMsgFilterA(LPMSG, INT);
	BOOL CallMsgFilterW(LPMSG, INT);
	LRESULT CallNextHookEx(HHOOK, int, WPARAM, LPARAM);
	LRESULT CallWindowProcA(WNDPROC, HWND, UINT, WPARAM, LPARAM);
	LRESULT CallWindowProcW(WNDPROC, HWND, UINT, WPARAM, LPARAM);
	WORD CascadeWindows(HWND, UINT, LPCRECT, UINT, const(HWND)*);
	BOOL ChangeClipboardChain(HWND, HWND);

	LONG ChangeDisplaySettingsA(PDEVMODEA, DWORD);
	LONG ChangeDisplaySettingsW(PDEVMODEW, DWORD);
	LONG ChangeDisplaySettingsExA(LPCSTR, LPDEVMODEA, HWND, DWORD, LPVOID);
	LONG ChangeDisplaySettingsExW(LPCWSTR, LPDEVMODEW, HWND, DWORD, LPVOID);

	BOOL ChangeMenuA(HMENU, UINT, LPCSTR, UINT, UINT);
	BOOL ChangeMenuW(HMENU, UINT, LPCWSTR, UINT, UINT);
	LPSTR CharLowerA(LPSTR);
	LPWSTR CharLowerW(LPWSTR);
	DWORD CharLowerBuffA(LPSTR, DWORD);
	DWORD CharLowerBuffW(LPWSTR, DWORD);
	LPSTR CharNextA(LPCSTR);
	LPWSTR CharNextW(LPCWSTR);
	LPSTR CharNextExA(WORD, LPCSTR, DWORD);
	LPWSTR CharNextExW(WORD, LPCWSTR, DWORD);
	LPSTR CharPrevA(LPCSTR, LPCSTR);
	LPWSTR CharPrevW(LPCWSTR, LPCWSTR);
	LPSTR CharPrevExA(WORD, LPCSTR, LPCSTR, DWORD);
	LPWSTR CharPrevExW(WORD, LPCWSTR, LPCWSTR, DWORD);
	BOOL CharToOemA(LPCSTR, LPSTR);
	BOOL CharToOemW(LPCWSTR, LPSTR);
	BOOL CharToOemBuffA(LPCSTR, LPSTR, DWORD);
	BOOL CharToOemBuffW(LPCWSTR, LPSTR, DWORD);
	LPSTR CharUpperA(LPSTR);
	LPWSTR CharUpperW(LPWSTR);
	DWORD CharUpperBuffA(LPSTR, DWORD);
	DWORD CharUpperBuffW(LPWSTR, DWORD);
	BOOL CheckDlgButton(HWND, int, UINT);
	DWORD CheckMenuItem(HMENU, UINT, UINT);
	BOOL CheckMenuRadioItem(HMENU, UINT, UINT, UINT, UINT);
	BOOL CheckRadioButton(HWND, int, int, int);
	HWND ChildWindowFromPoint(HWND, POINT);
	HWND ChildWindowFromPointEx(HWND, POINT, UINT);
	BOOL ClientToScreen(HWND, LPPOINT);
	BOOL ClipCursor(LPCRECT);
	BOOL CloseClipboard();
	BOOL CloseDesktop(HDESK);
	BOOL CloseWindow(HWND);
	BOOL CloseWindowStation(HWINSTA);
	int CopyAcceleratorTableA(HACCEL, LPACCEL, int);
	int CopyAcceleratorTableW(HACCEL, LPACCEL, int);

	HICON CopyIcon(HICON);
	HANDLE CopyImage(HANDLE, UINT, int, int, UINT);
	BOOL CopyRect(LPRECT, LPCRECT);
	int CountClipboardFormats();
	HACCEL CreateAcceleratorTableA(LPACCEL, int);
	HACCEL CreateAcceleratorTableW(LPACCEL, int);
	BOOL CreateCaret(HWND, HBITMAP, int, int);
	HCURSOR CreateCursor(HINSTANCE, int, int, int, int, PCVOID, PCVOID);

	HDESK CreateDesktopA(LPCSTR, LPCSTR, LPDEVMODEA, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES);
	HDESK CreateDesktopW(LPCWSTR, LPCWSTR, LPDEVMODEW, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES);

	HWND CreateDialogParamA(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM);
	HWND CreateDialogParamW(HINSTANCE, LPCWSTR, HWND, DLGPROC, LPARAM);
	HWND CreateDialogIndirectParamA(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);
	HWND CreateDialogIndirectParamW(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);

	HICON CreateIcon(HINSTANCE, int, int, BYTE, BYTE, const(BYTE)*, BYTE*);
	HICON CreateIconFromResource(PBYTE, DWORD, BOOL, DWORD);
	HICON CreateIconFromResourceEx(PBYTE, DWORD, BOOL, DWORD, int, int, UINT);
	HICON CreateIconIndirect(PICONINFO);
	HWND CreateMDIWindowA(LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HINSTANCE, LPARAM);
	HWND CreateMDIWindowW(LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HINSTANCE, LPARAM);
	HMENU CreateMenu();
	HMENU CreatePopupMenu();

	HWND CreateWindowExA(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);
	HWND CreateWindowExW(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);

	HWINSTA CreateWindowStationA(LPSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES);
	HWINSTA CreateWindowStationW(LPWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES);
	LRESULT DefDlgProcA(HWND, UINT, WPARAM, LPARAM);
	LRESULT DefDlgProcW(HWND, UINT, WPARAM, LPARAM);
	HDWP DeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT);
	LRESULT DefFrameProcA(HWND, HWND, UINT, WPARAM, LPARAM);
	LRESULT DefFrameProcW(HWND, HWND, UINT, WPARAM, LPARAM);

	LRESULT DefMDIChildProcA(HWND, UINT, WPARAM, LPARAM);
	LRESULT DefMDIChildProcW(HWND, UINT, WPARAM, LPARAM);
	LRESULT DefWindowProcA(HWND, UINT, WPARAM, LPARAM);
	LRESULT DefWindowProcW(HWND, UINT, WPARAM, LPARAM);
	BOOL DeleteMenu(HMENU, UINT, UINT);
	BOOL DeregisterShellHookWindow(HWND);
	BOOL DestroyAcceleratorTable(HACCEL);
	BOOL DestroyCaret();
	BOOL DestroyCursor(HCURSOR);
	BOOL DestroyIcon(HICON);
	BOOL DestroyMenu(HMENU);
	BOOL DestroyWindow(HWND);

	INT_PTR DialogBoxParamA(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM);
	INT_PTR DialogBoxParamW(HINSTANCE, LPCWSTR, HWND, DLGPROC, LPARAM);
	INT_PTR DialogBoxIndirectParamA(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);
	INT_PTR DialogBoxIndirectParamW(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);

} // extern (Windows)

HCURSOR CopyCursor()(HCURSOR c) {
	return cast(HCURSOR)CopyIcon(cast(HICON)c);
}

HWND CreateDialogA()(HINSTANCE h, LPCSTR n, HWND w, DLGPROC f) {
	return CreateDialogParamA(h, n, w, f, 0);
}

HWND CreateDialogW()(HINSTANCE h, LPCWSTR n, HWND w, DLGPROC f) {
	return CreateDialogParamW(h, n, w, f, 0);
}

HWND CreateDialogIndirectA()(HINSTANCE h, LPCDLGTEMPLATE t, HWND w, DLGPROC f) {
	return CreateDialogIndirectParamA(h, t, w, f, 0);
}

HWND CreateDialogIndirectW()(HINSTANCE h, LPCDLGTEMPLATE t, HWND w, DLGPROC f) {
	return CreateDialogIndirectParamW(h, t, w, f, 0);
}

HWND CreateWindowA()(LPCSTR a, LPCSTR b, DWORD c, int d, int e, int f, int g, HWND h, HMENU i, HINSTANCE j, LPVOID k) {
	return CreateWindowExA(0, a, b, c, d, e, f, g, h, i, j, k);
}

HWND CreateWindowW()(LPCWSTR a, LPCWSTR b, DWORD c, int d, int e, int f, int g, HWND h, HMENU i, HINSTANCE j, LPVOID k) {
	return CreateWindowExW(0, a, b, c, d, e, f, g, h, i, j, k);
}

INT_PTR DialogBoxA()(HINSTANCE i, LPCSTR t, HWND p, DLGPROC f) {
	return DialogBoxParamA(i, t, p, f, 0);
}

INT_PTR DialogBoxW()(HINSTANCE i, LPCWSTR t, HWND p, DLGPROC f) {
	return DialogBoxParamW(i, t, p, f, 0);
}

INT_PTR DialogBoxIndirectA()(HINSTANCE i, LPCDLGTEMPLATE t, HWND p, DLGPROC f) {
	return DialogBoxIndirectParamA(i, t, p, f, 0);
}

INT_PTR DialogBoxIndirectW()(HINSTANCE i, LPCDLGTEMPLATE t, HWND p, DLGPROC f) {
	return DialogBoxIndirectParamW(i, t, p, f, 0);
}

BOOL ExitWindows()(UINT r, DWORD c) {
	return ExitWindowsEx(EWX_LOGOFF, 0);
}
alias GetWindow GetNextWindow;

extern (Windows):
LONG DispatchMessageA(const(MSG)*);
LONG DispatchMessageW(const(MSG)*);
int DlgDirListA(HWND, LPSTR, int, int, UINT);
int DlgDirListW(HWND, LPWSTR, int, int, UINT);
int DlgDirListComboBoxA(HWND, LPSTR, int, int, UINT);
int DlgDirListComboBoxW(HWND, LPWSTR, int, int, UINT);
BOOL DlgDirSelectComboBoxExA(HWND, LPSTR, int, int);
BOOL DlgDirSelectComboBoxExW(HWND, LPWSTR, int, int);
BOOL DlgDirSelectExA(HWND, LPSTR, int, int);
BOOL DlgDirSelectExW(HWND, LPWSTR, int, int);
BOOL DragDetect(HWND, POINT);
DWORD DragObject(HWND, HWND, UINT, DWORD, HCURSOR);
BOOL DrawAnimatedRects(HWND, int, LPCRECT, LPCRECT);
BOOL DrawCaption(HWND, HDC, LPCRECT, UINT);
BOOL DrawEdge(HDC, LPRECT, UINT, UINT);
BOOL DrawFocusRect(HDC, LPCRECT);
BOOL DrawFrameControl(HDC, LPRECT, UINT, UINT);
BOOL DrawIcon(HDC, int, int, HICON);
BOOL DrawIconEx(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT);
BOOL DrawMenuBar(HWND);
BOOL DrawStateA(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT);
BOOL DrawStateW(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT);
int DrawTextA(HDC, LPCSTR, int, LPRECT, UINT);
int DrawTextW(HDC, LPCWSTR, int, LPRECT, UINT);
int DrawTextExA(HDC, LPSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
int DrawTextExW(HDC, LPWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
BOOL EmptyClipboard();
BOOL EnableMenuItem(HMENU, UINT, UINT);
BOOL EnableScrollBar(HWND, UINT, UINT);
BOOL EnableWindow(HWND, BOOL);
BOOL EndDeferWindowPos(HDWP);
BOOL EndDialog(HWND, INT_PTR);
BOOL EndMenu();
BOOL EndPaint(HWND, const(PAINTSTRUCT)*);
BOOL EnumChildWindows(HWND, ENUMWINDOWSPROC, LPARAM);
UINT EnumClipboardFormats(UINT);
BOOL EnumDesktopsA(HWINSTA, DESKTOPENUMPROCA, LPARAM);
BOOL EnumDesktopsW(HWINSTA, DESKTOPENUMPROCW, LPARAM);
BOOL EnumDesktopWindows(HDESK, ENUMWINDOWSPROC, LPARAM);
BOOL EnumDisplaySettingsA(LPCSTR, DWORD, PDEVMODEA);
BOOL EnumDisplaySettingsW(LPCWSTR, DWORD, PDEVMODEW);

BOOL EnumDisplayDevicesA(LPCSTR, DWORD, PDISPLAY_DEVICEA, DWORD);
BOOL EnumDisplayDevicesW(LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD);

int EnumPropsA(HWND, PROPENUMPROCA);
int EnumPropsW(HWND, PROPENUMPROCW);
int EnumPropsExA(HWND, PROPENUMPROCEXA, LPARAM);
int EnumPropsExW(HWND, PROPENUMPROCEXW, LPARAM);

BOOL EnumThreadWindows(DWORD, WNDENUMPROC, LPARAM);
BOOL EnumWindows(WNDENUMPROC, LPARAM);
BOOL EnumWindowStationsA(WINSTAENUMPROCA, LPARAM);
BOOL EnumWindowStationsW(WINSTAENUMPROCW, LPARAM);
BOOL EqualRect(LPCRECT, LPCRECT);

BOOL ExitWindowsEx(UINT, DWORD);
HWND FindWindowA(LPCSTR, LPCSTR);
HWND FindWindowExA(HWND, HWND, LPCSTR, LPCSTR);
HWND FindWindowExW(HWND, HWND, LPCWSTR, LPCWSTR);
HWND FindWindowW(LPCWSTR, LPCWSTR);
BOOL FlashWindow(HWND, BOOL);

int FrameRect(HDC, LPCRECT, HBRUSH);
BOOL FrameRgn(HDC, HRGN, HBRUSH, int, int);
HWND GetActiveWindow();
HWND GetAncestor(HWND, UINT);
SHORT GetAsyncKeyState(int);
HWND GetCapture();
UINT GetCaretBlinkTime();
BOOL GetCaretPos(LPPOINT);
BOOL GetClassInfoA(HINSTANCE, LPCSTR, LPWNDCLASSA);
BOOL GetClassInfoExA(HINSTANCE, LPCSTR, LPWNDCLASSEXA);
BOOL GetClassInfoW(HINSTANCE, LPCWSTR, LPWNDCLASSW);
BOOL GetClassInfoExW(HINSTANCE, LPCWSTR, LPWNDCLASSEXW);
DWORD GetClassLongA(HWND, int);
DWORD GetClassLongW(HWND, int);
int GetClassNameA(HWND, LPSTR, int);
int GetClassNameW(HWND, LPWSTR, int);
WORD GetClassWord(HWND, int);
BOOL GetClientRect(HWND, LPRECT);
HANDLE GetClipboardData(UINT);
int GetClipboardFormatNameA(UINT, LPSTR, int);
int GetClipboardFormatNameW(UINT, LPWSTR, int);
HWND GetClipboardOwner();
HWND GetClipboardViewer();
BOOL GetClipCursor(LPRECT);
BOOL GetCursorPos(LPPOINT);
HDC GetDC(HWND);
HDC GetDCEx(HWND, HRGN, DWORD);
HWND GetDesktopWindow();
int GetDialogBaseUnits();
int GetDlgCtrlID(HWND);
HWND GetDlgItem(HWND, int);
UINT GetDlgItemInt(HWND, int, PBOOL, BOOL);
UINT GetDlgItemTextA(HWND, int, LPSTR, int);
UINT GetDlgItemTextW(HWND, int, LPWSTR, int);
UINT GetDoubleClickTime();
HWND GetFocus();
HWND GetForegroundWindow();

BOOL GetIconInfo(HICON, PICONINFO);
BOOL GetInputState();
UINT GetKBCodePage();
HKL GetKeyboardLayout(DWORD);
UINT GetKeyboardLayoutList(int, HKL*);
BOOL GetKeyboardLayoutNameA(LPSTR);
BOOL GetKeyboardLayoutNameW(LPWSTR);
BOOL GetKeyboardState(PBYTE);
int GetKeyboardType(int);
int GetKeyNameTextA(LONG, LPSTR, int);
int GetKeyNameTextW(LONG, LPWSTR, int);
SHORT GetKeyState(int);
HWND GetLastActivePopup(HWND);
HMENU GetMenu(HWND);
LONG GetMenuCheckMarkDimensions();
DWORD GetMenuContextHelpId(HMENU);
UINT GetMenuDefaultItem(HMENU, UINT, UINT);
int GetMenuItemCount(HMENU);
UINT GetMenuItemID(HMENU, int);
BOOL GetMenuItemInfoA(HMENU, UINT, BOOL, LPMENUITEMINFOA);
BOOL GetMenuItemInfoW(HMENU, UINT, BOOL, LPMENUITEMINFOW);
BOOL GetMenuItemRect(HWND, HMENU, UINT, LPRECT);
UINT GetMenuState(HMENU, UINT, UINT);
int GetMenuStringA(HMENU, UINT, LPSTR, int, UINT);
int GetMenuStringW(HMENU, UINT, LPWSTR, int, UINT);
BOOL GetMessageA(LPMSG, HWND, UINT, UINT);
BOOL GetMessageW(LPMSG, HWND, UINT, UINT);
LONG GetMessageExtraInfo();
DWORD GetMessagePos();
LONG GetMessageTime();

HWND GetNextDlgGroupItem(HWND, HWND, BOOL);
HWND GetNextDlgTabItem(HWND, HWND, BOOL);

HWND GetOpenClipboardWindow();
HWND GetParent(HWND);
int GetPriorityClipboardFormat(UINT*, int);
HANDLE GetPropA(HWND, LPCSTR);
HANDLE GetPropW(HWND, LPCWSTR);

DWORD GetQueueStatus(UINT);
BOOL GetScrollInfo(HWND, int, LPSCROLLINFO);
int GetScrollPos(HWND, int);
BOOL GetScrollRange(HWND, int, LPINT, LPINT);

HMENU GetSubMenu(HMENU, int);
DWORD GetSysColor(int);
HBRUSH GetSysColorBrush(int);

HMENU GetSystemMenu(HWND, BOOL);
int GetSystemMetrics(int);
DWORD GetTabbedTextExtentA(HDC, LPCSTR, int, int, LPINT);
DWORD GetTabbedTextExtentW(HDC, LPCWSTR, int, int, LPINT);
LONG GetWindowLongA(HWND, int);
LONG GetWindowLongW(HWND, int);

HDESK GetThreadDesktop(DWORD);
HWND GetTopWindow(HWND);
BOOL GetUpdateRect(HWND, LPRECT, BOOL);
int GetUpdateRgn(HWND, HRGN, BOOL);
BOOL GetUserObjectInformationA(HANDLE, int, PVOID, DWORD, PDWORD);
BOOL GetUserObjectInformationW(HANDLE, int, PVOID, DWORD, PDWORD);
BOOL GetUserObjectSecurity(HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD);
HWND GetWindow(HWND, UINT);
DWORD GetWindowContextHelpId(HWND);
HDC GetWindowDC(HWND);
BOOL GetWindowPlacement(HWND, WINDOWPLACEMENT*);
BOOL GetWindowRect(HWND, LPRECT);
int GetWindowRgn(HWND, HRGN);
int GetWindowTextA(HWND, LPSTR, int);
int GetWindowTextLengthA(HWND);
int GetWindowTextLengthW(HWND);
int GetWindowTextW(HWND, LPWSTR, int);
WORD GetWindowWord(HWND, int);
BOOL GetAltTabInfoA(HWND, int, PALTTABINFO, LPSTR, UINT);
BOOL GetAltTabInfoW(HWND, int, PALTTABINFO, LPWSTR, UINT);
BOOL GetComboBoxInfo(HWND, PCOMBOBOXINFO);
BOOL GetCursorInfo(PCURSORINFO);
BOOL GetLastInputInfo(PLASTINPUTINFO);
DWORD GetListBoxInfo(HWND);
BOOL GetMenuBarInfo(HWND, LONG, LONG, PMENUBARINFO);
BOOL GetMenuInfo(HMENU, LPMENUINFO);
BOOL GetScrollBarInfo(HWND, LONG, PSCROLLBARINFO);
BOOL GetTitleBarInfo(HWND, PTITLEBARINFO);
BOOL GetWindowInfo(HWND, PWINDOWINFO);
UINT GetWindowModuleFileNameA(HWND, LPSTR, UINT);
UINT GetWindowModuleFileNameW(HWND, LPWSTR, UINT);
BOOL GrayStringA(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int);
BOOL GrayStringW(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int);
BOOL HideCaret(HWND);
BOOL HiliteMenuItem(HWND, HMENU, UINT, UINT);
BOOL InflateRect(LPRECT, int, int);
BOOL InSendMessage();
BOOL InsertMenuA(HMENU, UINT, UINT, UINT_PTR, LPCSTR);
BOOL InsertMenuW(HMENU, UINT, UINT, UINT_PTR, LPCWSTR);
BOOL InsertMenuItemA(HMENU, UINT, BOOL, LPCMENUITEMINFOA);
BOOL InsertMenuItemW(HMENU, UINT, BOOL, LPCMENUITEMINFOW);
INT InternalGetWindowText(HWND, LPWSTR, INT);
BOOL IntersectRect(LPRECT, LPCRECT, LPCRECT);
BOOL InvalidateRect(HWND, LPCRECT, BOOL);
BOOL InvalidateRgn(HWND, HRGN, BOOL);
BOOL InvertRect(HDC, LPCRECT);
BOOL IsCharAlphaA(CHAR ch);
BOOL IsCharAlphaNumericA(CHAR);
BOOL IsCharAlphaNumericW(WCHAR);
BOOL IsCharAlphaW(WCHAR);
BOOL IsCharLowerA(CHAR);
BOOL IsCharLowerW(WCHAR);
BOOL IsCharUpperA(CHAR);
BOOL IsCharUpperW(WCHAR);
BOOL IsChild(HWND, HWND);
BOOL IsClipboardFormatAvailable(UINT);
BOOL IsDialogMessageA(HWND, LPMSG);
BOOL IsDialogMessageW(HWND, LPMSG);
UINT IsDlgButtonChecked(HWND, int);
BOOL IsIconic(HWND);
BOOL IsMenu(HMENU);
BOOL IsRectEmpty(LPCRECT);
BOOL IsWindow(HWND);
BOOL IsWindowEnabled(HWND);
BOOL IsWindowUnicode(HWND);
BOOL IsWindowVisible(HWND);
BOOL IsZoomed(HWND);
void keybd_event(BYTE, BYTE, DWORD, DWORD);
BOOL KillTimer(HWND, UINT_PTR);
HACCEL LoadAcceleratorsA(HINSTANCE, LPCSTR);
HACCEL LoadAcceleratorsW(HINSTANCE, LPCWSTR);
HBITMAP LoadBitmapA(HINSTANCE, LPCSTR);
HBITMAP LoadBitmapW(HINSTANCE, LPCWSTR);
HCURSOR LoadCursorA(HINSTANCE, LPCSTR);
HCURSOR LoadCursorFromFileA(LPCSTR);
HCURSOR LoadCursorFromFileW(LPCWSTR);
HCURSOR LoadCursorW(HINSTANCE, LPCWSTR);
HICON LoadIconA(HINSTANCE, LPCSTR);
HICON LoadIconW(HINSTANCE, LPCWSTR);
HANDLE LoadImageA(HINSTANCE, LPCSTR, UINT, int, int, UINT);
HANDLE LoadImageW(HINSTANCE, LPCWSTR, UINT, int, int, UINT);
HKL LoadKeyboardLayoutA(LPCSTR, UINT);
HKL LoadKeyboardLayoutW(LPCWSTR, UINT);
HMENU LoadMenuA(HINSTANCE, LPCSTR);
HMENU LoadMenuIndirectA(const(MENUTEMPLATE)*);
HMENU LoadMenuIndirectW(const(MENUTEMPLATE)*);
HMENU LoadMenuW(HINSTANCE, LPCWSTR);
int LoadStringA(HINSTANCE, UINT, LPSTR, int);
int LoadStringW(HINSTANCE, UINT, LPWSTR, int);
BOOL LockWindowUpdate(HWND);
int LookupIconIdFromDirectory(PBYTE, BOOL);
int LookupIconIdFromDirectoryEx(PBYTE, BOOL, int, int, UINT);
BOOL MapDialogRect(HWND, LPRECT);
UINT MapVirtualKeyA(UINT, UINT);
UINT MapVirtualKeyExA(UINT, UINT, HKL);
UINT MapVirtualKeyExW(UINT, UINT, HKL);
UINT MapVirtualKeyW(UINT, UINT);
int MapWindowPoints(HWND, HWND, LPPOINT, UINT);
int MenuItemFromPoint(HWND, HMENU, POINT);
BOOL MessageBeep(UINT);
int MessageBoxA(HWND, LPCSTR, LPCSTR, UINT);
int MessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT);
int MessageBoxExA(HWND, LPCSTR, LPCSTR, UINT, WORD);
int MessageBoxExW(HWND, LPCWSTR, LPCWSTR, UINT, WORD);
int MessageBoxIndirectA(const(MSGBOXPARAMSA)*);
int MessageBoxIndirectW(const(MSGBOXPARAMSW)*);
BOOL ModifyMenuA(HMENU, UINT, UINT, UINT_PTR, LPCSTR);
BOOL ModifyMenuW(HMENU, UINT, UINT, UINT_PTR, LPCWSTR);
void mouse_event(DWORD, DWORD, DWORD, DWORD, ULONG_PTR);
BOOL MoveWindow(HWND, int, int, int, int, BOOL);
DWORD MsgWaitForMultipleObjects(DWORD, const(HANDLE)*, BOOL, DWORD, DWORD);
DWORD MsgWaitForMultipleObjectsEx(DWORD, const(HANDLE)*, DWORD, DWORD, DWORD);
DWORD OemKeyScan(WORD);
BOOL OemToCharA(LPCSTR, LPSTR);
BOOL OemToCharBuffA(LPCSTR, LPSTR, DWORD);
BOOL OemToCharBuffW(LPCSTR, LPWSTR, DWORD);
BOOL OemToCharW(LPCSTR, LPWSTR);
BOOL OffsetRect(LPRECT, int, int);
BOOL OpenClipboard(HWND);
HDESK OpenDesktopA(LPSTR, DWORD, BOOL, DWORD);
HDESK OpenDesktopW(LPWSTR, DWORD, BOOL, DWORD);
BOOL OpenIcon(HWND);
HDESK OpenInputDesktop(DWORD, BOOL, DWORD);
HWINSTA OpenWindowStationA(LPSTR, BOOL, DWORD);
HWINSTA OpenWindowStationW(LPWSTR, BOOL, DWORD);
BOOL PaintDesktop(HDC);
BOOL PeekMessageA(LPMSG, HWND, UINT, UINT, UINT);
BOOL PeekMessageW(LPMSG, HWND, UINT, UINT, UINT);
BOOL PostMessageA(HWND, UINT, WPARAM, LPARAM);
BOOL PostMessageW(HWND, UINT, WPARAM, LPARAM);
void PostQuitMessage(int);
BOOL PostThreadMessageA(DWORD, UINT, WPARAM, LPARAM);
BOOL PostThreadMessageW(DWORD, UINT, WPARAM, LPARAM);
BOOL PtInRect(LPCRECT, POINT);
HWND RealChildWindowFromPoint(HWND, POINT);
UINT RealGetWindowClassA(HWND, LPSTR, UINT);
UINT RealGetWindowClassW(HWND, LPWSTR, UINT);
BOOL RedrawWindow(HWND, LPCRECT, HRGN, UINT);
ATOM RegisterClassA(const(WNDCLASSA)*);
ATOM RegisterClassW(const(WNDCLASSW)*);
ATOM RegisterClassExA(const(WNDCLASSEXA)*);
ATOM RegisterClassExW(const(WNDCLASSEXW)*);
UINT RegisterClipboardFormatA(LPCSTR);
UINT RegisterClipboardFormatW(LPCWSTR);
BOOL RegisterHotKey(HWND, int, UINT, UINT);
UINT RegisterWindowMessageA(LPCSTR);
UINT RegisterWindowMessageW(LPCWSTR);
BOOL ReleaseCapture();
int ReleaseDC(HWND, HDC);
BOOL RemoveMenu(HMENU, UINT, UINT);
HANDLE RemovePropA(HWND, LPCSTR);
HANDLE RemovePropW(HWND, LPCWSTR);
BOOL ReplyMessage(LRESULT);
BOOL ScreenToClient(HWND, LPPOINT);
BOOL ScrollDC(HDC, int, int, LPCRECT, LPCRECT, HRGN, LPRECT);
BOOL ScrollWindow(HWND, int, int, LPCRECT, LPCRECT);
int ScrollWindowEx(HWND, int, int, LPCRECT, LPCRECT, HRGN, LPRECT, UINT);
LONG SendDlgItemMessageA(HWND, int, UINT, WPARAM, LPARAM);
LONG SendDlgItemMessageW(HWND, int, UINT, WPARAM, LPARAM);
LRESULT SendMessageA(HWND, UINT, WPARAM, LPARAM);
BOOL SendMessageCallbackA(HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, DWORD);
BOOL SendMessageCallbackW(HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, DWORD);
LRESULT SendMessageTimeoutA(HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD);
LRESULT SendMessageTimeoutW(HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD);
LRESULT SendMessageW(HWND, UINT, WPARAM, LPARAM);
BOOL SendNotifyMessageA(HWND, UINT, WPARAM, LPARAM);
BOOL SendNotifyMessageW(HWND, UINT, WPARAM, LPARAM);
HWND SetActiveWindow(HWND);
HWND SetCapture(HWND hWnd);
BOOL SetCaretBlinkTime(UINT);
BOOL SetCaretPos(int, int);
DWORD SetClassLongA(HWND, int, LONG);
DWORD SetClassLongW(HWND, int, LONG);
WORD SetClassWord(HWND, int, WORD);
HANDLE SetClipboardData(UINT, HANDLE);
HWND SetClipboardViewer(HWND);
HCURSOR SetCursor(HCURSOR);
BOOL SetCursorPos(int, int);
void SetDebugErrorLevel(DWORD);
BOOL SetDlgItemInt(HWND, int, UINT, BOOL);
BOOL SetDlgItemTextA(HWND, int, LPCSTR);
BOOL SetDlgItemTextW(HWND, int, LPCWSTR);
BOOL SetDoubleClickTime(UINT);
HWND SetFocus(HWND);
BOOL SetForegroundWindow(HWND);
BOOL SetKeyboardState(PBYTE);
BOOL SetMenu(HWND, HMENU);
BOOL SetMenuContextHelpId(HMENU, DWORD);
BOOL SetMenuDefaultItem(HMENU, UINT, UINT);
BOOL SetMenuInfo(HMENU, LPCMENUINFO);
BOOL SetMenuItemBitmaps(HMENU, UINT, UINT, HBITMAP, HBITMAP);
BOOL SetMenuItemInfoA(HMENU, UINT, BOOL, LPCMENUITEMINFOA);
BOOL SetMenuItemInfoW(HMENU, UINT, BOOL, LPCMENUITEMINFOW);
LPARAM SetMessageExtraInfo(LPARAM);
BOOL SetMessageQueue(int);
HWND SetParent(HWND, HWND);
BOOL SetProcessWindowStation(HWINSTA);
BOOL SetPropA(HWND, LPCSTR, HANDLE);
BOOL SetPropW(HWND, LPCWSTR, HANDLE);
BOOL SetRect(LPRECT, int, int, int, int);
BOOL SetRectEmpty(LPRECT);
int SetScrollInfo(HWND, int, LPCSCROLLINFO, BOOL);
int SetScrollPos(HWND, int, int, BOOL);
BOOL SetScrollRange(HWND, int, int, int, BOOL);
BOOL SetSysColors(int, const(INT)*, const(COLORREF)*);
BOOL SetSystemCursor(HCURSOR, DWORD);
BOOL SetThreadDesktop(HDESK);
UINT_PTR SetTimer(HWND, UINT_PTR, UINT, TIMERPROC);
BOOL SetUserObjectInformationA(HANDLE, int, PVOID, DWORD);
BOOL SetUserObjectInformationW(HANDLE, int, PVOID, DWORD);
BOOL SetUserObjectSecurity(HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR);
BOOL SetWindowContextHelpId(HWND, DWORD);
LONG SetWindowLongA(HWND, int, LONG);
LONG SetWindowLongW(HWND, int, LONG);
BOOL SetWindowPlacement(HWND hWnd, const(WINDOWPLACEMENT)*);
BOOL SetWindowPos(HWND, HWND, int, int, int, int, UINT);
int SetWindowRgn(HWND, HRGN, BOOL);
HHOOK SetWindowsHookA(int, HOOKPROC);
HHOOK SetWindowsHookW(int, HOOKPROC);
HHOOK SetWindowsHookExA(int, HOOKPROC, HINSTANCE, DWORD);
HHOOK SetWindowsHookExW(int, HOOKPROC, HINSTANCE, DWORD);
BOOL SetWindowTextA(HWND, LPCSTR);
BOOL SetWindowTextW(HWND, LPCWSTR);
WORD SetWindowWord(HWND, int, WORD);
BOOL ShowCaret(HWND);
int ShowCursor(BOOL);
BOOL ShowOwnedPopups(HWND, BOOL);
BOOL ShowScrollBar(HWND, int, BOOL);
BOOL ShowWindow(HWND, int);
BOOL ShowWindowAsync(HWND, int);
BOOL SubtractRect(LPRECT, LPCRECT, LPCRECT);
BOOL SwapMouseButton(BOOL);
BOOL SwitchDesktop(HDESK);
BOOL SystemParametersInfoA(UINT, UINT, PVOID, UINT);
BOOL SystemParametersInfoW(UINT, UINT, PVOID, UINT);
LONG TabbedTextOutA(HDC, int, int, LPCSTR, int, int, LPINT, int);
LONG TabbedTextOutW(HDC, int, int, LPCWSTR, int, int, LPINT, int);
WORD TileWindows(HWND, UINT, LPCRECT, UINT, const(HWND)*);
int ToAscii(UINT, UINT, PBYTE, LPWORD, UINT);
int ToAsciiEx(UINT, UINT, PBYTE, LPWORD, UINT, HKL);
int ToUnicode(UINT, UINT, PBYTE, LPWSTR, int, UINT);
int ToUnicodeEx(UINT, UINT, PBYTE, LPWSTR, int, UINT, HKL);
BOOL TrackMouseEvent(LPTRACKMOUSEEVENT);
BOOL TrackPopupMenu(HMENU, UINT, int, int, int, HWND, LPCRECT);
BOOL TrackPopupMenuEx(HMENU, UINT, int, int, HWND, LPTPMPARAMS);
int TranslateAcceleratorA(HWND, HACCEL, LPMSG);
int TranslateAcceleratorW(HWND, HACCEL, LPMSG);
BOOL TranslateMDISysAccel(HWND, LPMSG);
BOOL TranslateMessage(const(MSG)*);
BOOL UnhookWindowsHook(int, HOOKPROC);
BOOL UnhookWindowsHookEx(HHOOK);
BOOL UnionRect(LPRECT, LPCRECT, LPCRECT);
BOOL UnloadKeyboardLayout(HKL);
BOOL UnregisterClassA(LPCSTR, HINSTANCE);
BOOL UnregisterClassW(LPCWSTR, HINSTANCE);
BOOL UnregisterHotKey(HWND, int);
BOOL UpdateWindow(HWND);
BOOL ValidateRect(HWND, LPCRECT);
BOOL ValidateRgn(HWND, HRGN);
SHORT VkKeyScanA(CHAR);
SHORT VkKeyScanExA(CHAR, HKL);
SHORT VkKeyScanExW(WCHAR, HKL);
SHORT VkKeyScanW(WCHAR);
DWORD WaitForInputIdle(HANDLE, DWORD);
BOOL WaitMessage();
HWND WindowFromDC(HDC hDC);
HWND WindowFromPoint(POINT);
UINT WinExec(LPCSTR, UINT);
BOOL WinHelpA(HWND, LPCSTR, UINT, DWORD);
BOOL WinHelpW(HWND, LPCWSTR, UINT, DWORD);

extern (C) {
	int wsprintfA(LPSTR, LPCSTR, ...);
	int wsprintfW(LPWSTR, LPCWSTR, ...);
}


// These shouldn't be necessary for D.
alias TypeDef!(char*) va_list_;
int wvsprintfA(LPSTR, LPCSTR, va_list_ arglist);
int wvsprintfW(LPWSTR, LPCWSTR, va_list_ arglist);


int BroadcastSystemMessageA(DWORD, LPDWORD, UINT, WPARAM, LPARAM);
int BroadcastSystemMessageW(DWORD, LPDWORD, UINT, WPARAM, LPARAM);

static if (_WIN32_WINNT >= 0x403) {
	UINT SendInput(UINT, LPINPUT, int);
}

static if (_WIN32_WINNT >= 0x410) {
	BOOL EnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
	BOOL GetMonitorInfoA(HMONITOR, LPMONITORINFO);
	BOOL GetMonitorInfoA(HMONITOR, LPMONITORINFOEXA);
	BOOL GetMonitorInfoW(HMONITOR, LPMONITORINFO);
	BOOL GetMonitorInfoW(HMONITOR, LPMONITORINFOEXW);
	HMONITOR MonitorFromPoint(POINT, DWORD);
	HMONITOR MonitorFromRect(LPCRECT, DWORD);
	HMONITOR MonitorFromWindow(HWND, DWORD);
}

static if (_WIN32_WINNT >= 0x500) {
	BOOL AllowSetForegroundWindow(DWORD);
	BOOL AnimateWindow(HWND, DWORD, DWORD);
	BOOL EndTask(HWND, BOOL, BOOL);
	BOOL EnumDisplaySettingsExA(LPCSTR, DWORD, LPDEVMODEA, DWORD);
	BOOL EnumDisplaySettingsExW(LPCWSTR, DWORD, LPDEVMODEW, DWORD);
	DWORD GetClipboardSequenceNumber();
	DWORD GetGuiResources(HANDLE, DWORD);
	BOOL GetGUIThreadInfo(DWORD, LPGUITHREADINFO);
	int GetMouseMovePointsEx(UINT, LPMOUSEMOVEPOINT, LPMOUSEMOVEPOINT, int, DWORD);
	BOOL GetProcessDefaultLayout(DWORD*);
	HWND GetShellWindow();
	BOOL IsHungAppWindow(HWND);
	DWORD InSendMessageEx(LPVOID);
	BOOL LockSetForegroundWindow(UINT);
	BOOL LockWorkStation();
	void NotifyWinEvent(DWORD, HWND, LONG, LONG);
	HDEVNOTIFY RegisterDeviceNotificationA(HANDLE, LPVOID, DWORD);
	HDEVNOTIFY RegisterDeviceNotificationW(HANDLE, LPVOID, DWORD);
	BOOL SetProcessDefaultLayout(DWORD);
	HWINEVENTHOOK SetWinEventHook(UINT, UINT, HMODULE, WINEVENTPROC, DWORD, DWORD, UINT);
	void SwitchToThisWindow(HWND, BOOL);
	BOOL SetLayeredWindowAttributes(HWND, COLORREF, BYTE, DWORD);
	BOOL UpdateLayeredWindow(HWND, HDC, POINT*, SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD);
	BOOL UserHandleGrantAccess(HANDLE, HANDLE, BOOL);
	BOOL UnhookWinEvent(HWINEVENTHOOK);
	BOOL UnregisterDeviceNotification(HANDLE);
}

static if (_WIN32_WINNT >= 0x501) {
	int BroadcastSystemMessageExA(DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO);
	int BroadcastSystemMessageExW(DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO);
	LRESULT DefRawInputProc(PRAWINPUT*, INT, UINT);
	BOOL FlashWindowEx(PFLASHWINFO);
	BOOL GetLayeredWindowAttributes(HWND, COLORREF*, BYTE*, DWORD*);
	UINT GetRawInputBuffer(PRAWINPUT, PUINT, UINT);
	UINT GetRawInputData(HRAWINPUT, UINT, LPVOID, PUINT, UINT);
	UINT GetRawInputDeviceInfoA(HANDLE, UINT, LPVOID, PUINT);
	UINT GetRawInputDeviceInfoW(HANDLE, UINT, LPVOID, PUINT);
	UINT GetRawInputDeviceList(PRAWINPUTDEVICELIST, PUINT, UINT);
	UINT GetRegisteredRawInputDevices(PRAWINPUTDEVICE, PUINT, UINT);
	BOOL IsGUIThread(BOOL);
	BOOL IsWinEventHookInstalled(DWORD);
	BOOL PrintWindow(HWND, HDC, UINT);
	BOOL RegisterRawInputDevices(PCRAWINPUTDEVICE, UINT, UINT);
}

version (Win64) {
	LONG_PTR GetWindowLongPtrA(HWND, int);
	LONG_PTR GetWindowLongPtrW(HWND, int);
	LONG_PTR SetWindowLongPtrA(HWND, int, LONG_PTR);
	LONG_PTR SetWindowLongPtrW(HWND, int, LONG_PTR);
} else {
	alias GetWindowLongA GetWindowLongPtrA;
	alias GetWindowLongW GetWindowLongPtrW;
	alias SetWindowLongA SetWindowLongPtrA;
	alias SetWindowLongW SetWindowLongPtrW;
}


// -----
// Aliases for Unicode or Ansi
version(Unicode) {

	alias EDITWORDBREAKPROCW EDITWORDBREAKPROC;
	alias PROPENUMPROCW PROPENUMPROC;
	alias PROPENUMPROCEXW PROPENUMPROCEX;
	alias DESKTOPENUMPROCW DESKTOPENUMPROC;
	alias WINSTAENUMPROCW WINSTAENUMPROC;
	alias MAKEINTRESOURCEW MAKEINTRESOURCE;

	alias WNDCLASSW WNDCLASS;
	alias WNDCLASSEXW WNDCLASSEX;
	alias MENUITEMINFOW MENUITEMINFO;
	alias LPCMENUITEMINFOW LPCMENUITEMINFO;
	alias MSGBOXPARAMSW MSGBOXPARAMS;
	alias HIGHCONTRASTW HIGHCONTRAST;
	alias SERIALKEYSW SERIALKEYS;
	alias SOUNDSENTRYW SOUNDSENTRY;
	alias CREATESTRUCTW CREATESTRUCT;
	alias CBT_CREATEWNDW CBT_CREATEWND;
	alias MDICREATESTRUCTW MDICREATESTRUCT;
	alias MULTIKEYHELPW MULTIKEYHELP;
	alias MONITORINFOEXW MONITORINFOEX;
	alias ICONMETRICSW ICONMETRICS;
	alias NONCLIENTMETRICSW NONCLIENTMETRICS;

	alias AppendMenuW AppendMenu;
	alias BroadcastSystemMessageW BroadcastSystemMessage;
	static if (_WIN32_WINNT >= 0x501) {
		alias BroadcastSystemMessageExW BroadcastSystemMessageEx;
	}
	alias CallMsgFilterW CallMsgFilter;
	alias CallWindowProcW CallWindowProc;
	alias ChangeMenuW ChangeMenu;
	alias CharLowerW CharLower;
	alias CharLowerBuffW CharLowerBuff;
	alias CharNextW CharNext;
	alias CharNextExW CharNextEx;
	alias CharPrevW CharPrev;
	alias CharPrevExW CharPrevEx;
	alias CharToOemW CharToOem;
	alias CharToOemBuffW CharToOemBuff;
	alias CharUpperW CharUpper;
	alias CharUpperBuffW CharUpperBuff;
	alias CopyAcceleratorTableW CopyAcceleratorTable;
	alias CreateAcceleratorTableW CreateAcceleratorTable;
	alias CreateDialogW CreateDialog;
	alias CreateDialogIndirectW CreateDialogIndirect;
	alias CreateDialogIndirectParamW CreateDialogIndirectParam;
	alias CreateDialogParamW CreateDialogParam;
	alias CreateMDIWindowW CreateMDIWindow;
	alias CreateWindowW CreateWindow;
	alias CreateWindowExW CreateWindowEx;
	alias CreateWindowStationW CreateWindowStation;
	alias DefDlgProcW DefDlgProc;
	alias DefFrameProcW DefFrameProc;
	alias DefMDIChildProcW DefMDIChildProc;
	alias DefWindowProcW DefWindowProc;
	alias DialogBoxW DialogBox;
	alias DialogBoxIndirectW DialogBoxIndirect;
	alias DialogBoxIndirectParamW DialogBoxIndirectParam;
	alias DialogBoxParamW DialogBoxParam;
	alias DispatchMessageW DispatchMessage;
	alias DlgDirListW DlgDirList;
	alias DlgDirListComboBoxW DlgDirListComboBox;
	alias DlgDirSelectComboBoxExW DlgDirSelectComboBoxEx;
	alias DlgDirSelectExW DlgDirSelectEx;
	alias DrawStateW DrawState;
	alias DrawTextW DrawText;
	alias DrawTextExW DrawTextEx;
	alias EnumDesktopsW EnumDesktops;
	alias EnumPropsW EnumProps;
	alias EnumPropsExW EnumPropsEx;
	alias EnumWindowStationsW EnumWindowStations;
	alias FindWindowW FindWindow;
	alias FindWindowExW FindWindowEx;
	alias GetClassInfoW GetClassInfo;
	alias GetClassInfoExW GetClassInfoEx;
	alias GetClassLongW GetClassLong;
	alias GetClassNameW GetClassName;
	alias GetClipboardFormatNameW GetClipboardFormatName;
	alias GetDlgItemTextW GetDlgItemText;
	alias GetKeyboardLayoutNameW GetKeyboardLayoutName;
	alias GetKeyNameTextW GetKeyNameText;
	alias GetMenuItemInfoW GetMenuItemInfo;
	alias GetMenuStringW GetMenuString;
	alias GetMessageW GetMessage;
	static if (_WIN32_WINNT >= 0x410) {
		alias GetMonitorInfoW GetMonitorInfo;
	}
	alias GetPropW GetProp;
	static if (_WIN32_WINNT >= 0x501) {
		alias GetRawInputDeviceInfoW GetRawInputDeviceInfo;
	}
	alias GetTabbedTextExtentW GetTabbedTextExtent;
	alias GetUserObjectInformationW GetUserObjectInformation;
	alias GetWindowLongW GetWindowLong;
	alias GetWindowLongPtrW GetWindowLongPtr;
	alias GetWindowTextW GetWindowText;
	alias GetWindowTextLengthW GetWindowTextLength;
	alias GetAltTabInfoW GetAltTabInfo;
	alias GetWindowModuleFileNameW GetWindowModuleFileName;
	alias GrayStringW GrayString;
	alias InsertMenuW InsertMenu;
	alias InsertMenuItemW InsertMenuItem;
	alias IsCharAlphaW IsCharAlpha;
	alias IsCharAlphaNumericW IsCharAlphaNumeric;
	alias IsCharLowerW IsCharLower;
	alias IsCharUpperW IsCharUpper;
	alias IsDialogMessageW IsDialogMessage;
	alias LoadAcceleratorsW LoadAccelerators;
	alias LoadBitmapW LoadBitmap;
	alias LoadCursorW LoadCursor;
	alias LoadCursorFromFileW LoadCursorFromFile;
	alias LoadIconW LoadIcon;
	alias LoadImageW LoadImage;
	alias LoadKeyboardLayoutW LoadKeyboardLayout;
	alias LoadMenuW LoadMenu;
	alias LoadMenuIndirectW LoadMenuIndirect;
	alias LoadStringW LoadString;
	alias MapVirtualKeyW MapVirtualKey;
	alias MapVirtualKeyExW MapVirtualKeyEx;
	alias MessageBoxW MessageBox;
	alias MessageBoxExW MessageBoxEx;
	alias MessageBoxIndirectW MessageBoxIndirect;
	alias ModifyMenuW ModifyMenu;
	alias OemToCharW OemToChar;
	alias OemToCharBuffW OemToCharBuff;
	alias OpenDesktopW OpenDesktop;
	alias OpenWindowStationW OpenWindowStation;
	alias PeekMessageW PeekMessage;
	alias PostMessageW PostMessage;
	alias PostThreadMessageW PostThreadMessage;
	alias RealGetWindowClassW RealGetWindowClass;
	alias RegisterClassW RegisterClass;
	alias RegisterClassExW RegisterClassEx;
	alias RegisterClipboardFormatW RegisterClipboardFormat;
	static if (_WIN32_WINNT >= 0x500) {
		alias RegisterDeviceNotificationW RegisterDeviceNotification;
	}
	alias RegisterWindowMessageW RegisterWindowMessage;
	alias RemovePropW RemoveProp;
	alias SendDlgItemMessageW SendDlgItemMessage;
	alias SendMessageW SendMessage;
	alias SendMessageCallbackW SendMessageCallback;
	alias SendMessageTimeoutW SendMessageTimeout;
	alias SendNotifyMessageW SendNotifyMessage;
	alias SetClassLongW SetClassLong;
	alias SetDlgItemTextW SetDlgItemText;
	alias SetMenuItemInfoW SetMenuItemInfo;
	alias SetPropW SetProp;
	alias SetUserObjectInformationW SetUserObjectInformation;
	alias SetWindowLongW SetWindowLong;
	alias SetWindowLongPtrW SetWindowLongPtr;
	alias SetWindowsHookW SetWindowsHook;
	alias SetWindowsHookExW SetWindowsHookEx;
	alias SetWindowTextW SetWindowText;
	alias SystemParametersInfoW SystemParametersInfo;
	alias TabbedTextOutW TabbedTextOut;
	alias TranslateAcceleratorW TranslateAccelerator;
	alias UnregisterClassW UnregisterClass;
	alias VkKeyScanW VkKeyScan;
	alias VkKeyScanExW VkKeyScanEx;
	alias WinHelpW WinHelp;
	alias wsprintfW wsprintf;
	alias wvsprintfW wvsprintf;

	alias ChangeDisplaySettingsW ChangeDisplaySettings;
	alias ChangeDisplaySettingsExW ChangeDisplaySettingsEx;
	alias CreateDesktopW CreateDesktop;
	alias EnumDisplaySettingsW EnumDisplaySettings;
	static if (_WIN32_WINNT >= 0x500) {
		alias EnumDisplaySettingsExW EnumDisplaySettingsEx;
	}
	alias EnumDisplayDevicesW EnumDisplayDevices;

} else { // ANSI

	alias EDITWORDBREAKPROCA EDITWORDBREAKPROC;
	alias PROPENUMPROCA PROPENUMPROC;
	alias PROPENUMPROCEXA PROPENUMPROCEX;
	alias DESKTOPENUMPROCA DESKTOPENUMPROC;
	alias WINSTAENUMPROCA WINSTAENUMPROC;
	alias MAKEINTRESOURCEA MAKEINTRESOURCE;

	alias WNDCLASSA WNDCLASS;
	alias WNDCLASSEXA WNDCLASSEX;
	alias MENUITEMINFOA MENUITEMINFO;
	alias LPCMENUITEMINFOA LPCMENUITEMINFO;
	alias MSGBOXPARAMSA MSGBOXPARAMS;
	alias HIGHCONTRASTA HIGHCONTRAST;
	alias SERIALKEYSA SERIALKEYS;
	alias SOUNDSENTRYA SOUNDSENTRY;
	alias CREATESTRUCTA CREATESTRUCT;
	alias CBT_CREATEWNDA CBT_CREATEWND;
	alias MDICREATESTRUCTA MDICREATESTRUCT;
	alias MULTIKEYHELPA MULTIKEYHELP;
	alias MONITORINFOEXA MONITORINFOEX;
	alias ICONMETRICSA ICONMETRICS;
	alias NONCLIENTMETRICSA NONCLIENTMETRICS;

	alias AppendMenuA AppendMenu;
	alias BroadcastSystemMessageA BroadcastSystemMessage;
	static if (_WIN32_WINNT >= 0x501) {
		alias BroadcastSystemMessageExA BroadcastSystemMessageEx;
	}
	alias CallMsgFilterA CallMsgFilter;
	alias CallWindowProcA CallWindowProc;
	alias ChangeMenuA ChangeMenu;
	alias CharLowerA CharLower;
	alias CharLowerBuffA CharLowerBuff;
	alias CharNextA CharNext;
	alias CharNextExA CharNextEx;
	alias CharPrevA CharPrev;
	alias CharPrevExA CharPrevEx;
	alias CharToOemA CharToOem;
	alias CharToOemBuffA CharToOemBuff;
	alias CharUpperA CharUpper;
	alias CharUpperBuffA CharUpperBuff;
	alias CopyAcceleratorTableA CopyAcceleratorTable;
	alias CreateAcceleratorTableA CreateAcceleratorTable;
	alias CreateDialogA CreateDialog;
	alias CreateDialogIndirectA CreateDialogIndirect;
	alias CreateDialogIndirectParamA CreateDialogIndirectParam;
	alias CreateDialogParamA CreateDialogParam;
	alias CreateMDIWindowA CreateMDIWindow;
	alias CreateWindowA CreateWindow;
	alias CreateWindowExA CreateWindowEx;
	alias CreateWindowStationA CreateWindowStation;
	alias DefDlgProcA DefDlgProc;
	alias DefFrameProcA DefFrameProc;
	alias DefMDIChildProcA DefMDIChildProc;
	alias DefWindowProcA DefWindowProc;
	alias DialogBoxA DialogBox;
	alias DialogBoxIndirectA DialogBoxIndirect;
	alias DialogBoxIndirectParamA DialogBoxIndirectParam;
	alias DialogBoxParamA DialogBoxParam;
	alias DispatchMessageA DispatchMessage;
	alias DlgDirListA DlgDirList;
	alias DlgDirListComboBoxA DlgDirListComboBox;
	alias DlgDirSelectComboBoxExA DlgDirSelectComboBoxEx;
	alias DlgDirSelectExA DlgDirSelectEx;
	alias DrawStateA DrawState;
	alias DrawTextA DrawText;
	alias DrawTextExA DrawTextEx;
	alias EnumDesktopsA EnumDesktops;
	alias EnumPropsA EnumProps;
	alias EnumPropsExA EnumPropsEx;
	alias EnumWindowStationsA EnumWindowStations;
	alias FindWindowA FindWindow;
	alias FindWindowExA FindWindowEx;
	alias GetClassInfoA GetClassInfo;
	alias GetClassInfoExA GetClassInfoEx;
	alias GetClassLongA GetClassLong;
	alias GetClassNameA GetClassName;
	alias GetClipboardFormatNameA GetClipboardFormatName;
	alias GetDlgItemTextA GetDlgItemText;
	alias GetKeyboardLayoutNameA GetKeyboardLayoutName;
	alias GetKeyNameTextA GetKeyNameText;
	alias GetMenuItemInfoA GetMenuItemInfo;
	alias GetMenuStringA GetMenuString;
	alias GetMessageA GetMessage;
	static if (_WIN32_WINNT >= 0x410) {
		alias GetMonitorInfoA GetMonitorInfo;
	}
	alias GetPropA GetProp;
	static if (_WIN32_WINNT >= 0x501) {
		alias GetRawInputDeviceInfoA GetRawInputDeviceInfo;
	}
	alias GetTabbedTextExtentA GetTabbedTextExtent;
	alias GetUserObjectInformationA GetUserObjectInformation;
	alias GetWindowLongA GetWindowLong;
	alias GetWindowLongPtrA GetWindowLongPtr;
	alias GetWindowTextA GetWindowText;
	alias GetWindowTextLengthA GetWindowTextLength;
	alias GetAltTabInfoA GetAltTabInfo;
	alias GetWindowModuleFileNameA GetWindowModuleFileName;
	alias GrayStringA GrayString;
	alias InsertMenuA InsertMenu;
	alias InsertMenuItemA InsertMenuItem;
	alias IsCharAlphaA IsCharAlpha;
	alias IsCharAlphaNumericA IsCharAlphaNumeric;
	alias IsCharLowerA IsCharLower;
	alias IsCharUpperA IsCharUpper;
	alias IsDialogMessageA IsDialogMessage;
	alias LoadAcceleratorsA LoadAccelerators;
	alias LoadBitmapA LoadBitmap;
	alias LoadCursorA LoadCursor;
	alias LoadIconA LoadIcon;
	alias LoadCursorFromFileA LoadCursorFromFile;
	alias LoadImageA LoadImage;
	alias LoadKeyboardLayoutA LoadKeyboardLayout;
	alias LoadMenuA LoadMenu;
	alias LoadMenuIndirectA LoadMenuIndirect;
	alias LoadStringA LoadString;
	alias MapVirtualKeyA MapVirtualKey;
	alias MapVirtualKeyExA MapVirtualKeyEx;
	alias MessageBoxA MessageBox;
	alias MessageBoxExA MessageBoxEx;
	alias MessageBoxIndirectA MessageBoxIndirect;
	alias ModifyMenuA ModifyMenu;
	alias OemToCharA OemToChar;
	alias OemToCharBuffA OemToCharBuff;
	alias OpenDesktopA OpenDesktop;
	alias OpenWindowStationA OpenWindowStation;
	alias PeekMessageA PeekMessage;
	alias PostMessageA PostMessage;
	alias PostThreadMessageA PostThreadMessage;
	alias RealGetWindowClassA RealGetWindowClass;
	alias RegisterClassA RegisterClass;
	alias RegisterClassExA RegisterClassEx;
	alias RegisterClipboardFormatA RegisterClipboardFormat;
	static if (_WIN32_WINNT >= 0x500) {
		alias RegisterDeviceNotificationA RegisterDeviceNotification;
	}
	alias RegisterWindowMessageA RegisterWindowMessage;
	alias RemovePropA RemoveProp;
	alias SendDlgItemMessageA SendDlgItemMessage;
	alias SendMessageA SendMessage;
	alias SendMessageCallbackA SendMessageCallback;
	alias SendMessageTimeoutA SendMessageTimeout;
	alias SendNotifyMessageA SendNotifyMessage;
	alias SetClassLongA SetClassLong;
	alias SetDlgItemTextA SetDlgItemText;
	alias SetMenuItemInfoA SetMenuItemInfo;
	alias SetPropA SetProp;
	alias SetUserObjectInformationA SetUserObjectInformation;
	alias SetWindowLongA SetWindowLong;
	alias SetWindowLongPtrA SetWindowLongPtr;
	alias SetWindowsHookA SetWindowsHook;
	alias SetWindowsHookExA SetWindowsHookEx;
	alias SetWindowTextA SetWindowText;
	alias SystemParametersInfoA SystemParametersInfo;
	alias TabbedTextOutA TabbedTextOut;
	alias TranslateAcceleratorA TranslateAccelerator;
	alias UnregisterClassA UnregisterClass;
	alias VkKeyScanA VkKeyScan;
	alias VkKeyScanExA VkKeyScanEx;
	alias WinHelpA WinHelp;
	alias wsprintfA wsprintf;
	alias wvsprintfA wvsprintf;

	alias ChangeDisplaySettingsA ChangeDisplaySettings;
	alias ChangeDisplaySettingsExA ChangeDisplaySettingsEx;
	alias CreateDesktopA CreateDesktop;
	alias EnumDisplaySettingsA EnumDisplaySettings;
	static if (_WIN32_WINNT >= 0x500) {
		alias EnumDisplaySettingsExA EnumDisplaySettingsEx;
	}
	alias EnumDisplayDevicesA EnumDisplayDevices;
}

alias WNDCLASS* LPWNDCLASS, PWNDCLASS;
alias WNDCLASSEX* LPWNDCLASSEX, PWNDCLASSEX;
alias MENUITEMINFO* LPMENUITEMINFO;
alias MSGBOXPARAMS* PMSGBOXPARAMS, LPMSGBOXPARAMS;
alias HIGHCONTRAST* LPHIGHCONTRAST;
alias SERIALKEYS* LPSERIALKEYS;
alias SOUNDSENTRY* LPSOUNDSENTRY;
alias CREATESTRUCT* LPCREATESTRUCT;
alias CBT_CREATEWND* LPCBT_CREATEWND;
alias MDICREATESTRUCT* LPMDICREATESTRUCT;
alias MULTIKEYHELP* PMULTIKEYHELP, LPMULTIKEYHELP;
alias MONITORINFOEX* LPMONITORINFOEX;
alias ICONMETRICS* LPICONMETRICS;
alias NONCLIENTMETRICS* LPNONCLIENTMETRICS;
