Mercurial > projects > dynamin
diff dynamin/c/windows.d @ 0:aa4efef0f0b1
Initial commit of code.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Mon, 15 Jun 2009 22:10:48 -0500 |
parents | |
children | c41eb8d907b2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dynamin/c/windows.d Mon Jun 15 22:10:48 2009 -0500 @@ -0,0 +1,1944 @@ +module dynamin.c.windows; + +/* + * A binding to at least the part of the Windows API that Dynamin uses. This + * binding is obviously very incomplete but does contain several functions + * that the standard Windows binding does not contain. + */ + +version(Windows) { +} else { + static assert(0); +} + +version(build) { pragma(link, gdi32, comdlg32, shell32, ole32, winmm); } + +extern(Windows): + +version = UNICODE; +alias char* LPSTR; +alias wchar* LPWSTR; +alias char* LPCSTR; +alias wchar* LPCWSTR; +version(UNICODE) { + alias wchar TCHAR; + alias LPWSTR LPTSTR; + alias LPCWSTR LPCTSTR; +} else { + alias char TCHAR; + alias LPSTR LPTSTR; + alias LPCSTR LPCTSTR; +} + +alias VOID* HANDLE; +alias HANDLE HBITMAP; +alias HANDLE HBRUSH; +alias HANDLE HICON; +alias HICON HCURSOR; +alias HANDLE HDC; +alias HANDLE HGDIOBJ; +alias HANDLE HGLOBAL; +alias int HFILE; +alias HANDLE HFONT; +alias HANDLE HINSTANCE; +alias HANDLE HKEY; +alias HANDLE HMENU; +alias HINSTANCE HMODULE; +alias int HRESULT; +alias HANDLE HRGN; +alias HANDLE HTHEME; +alias HANDLE HWND; + +version(Win64) { + alias int HALF_PTR; + alias uint UHALF_PTR; + alias long INT_PTR; + alias ulong UINT_PTR; + alias long LONG_PTR; + alias ulong ULONG_PTR; +} else { + alias short HALF_PTR; + alias ushort UHALF_PTR; + alias int INT_PTR; + alias uint UINT_PTR; + alias int LONG_PTR; + alias uint ULONG_PTR; +} + +alias INT_PTR function() FARPROC; +alias int BOOL; +alias ubyte BYTE; +alias char CHAR; +alias wchar WCHAR; +alias uint DWORD; +alias ulong DWORDLONG; +alias uint DWORD32; +alias ulong DWORD64; +alias float FLOAT; +alias int INT; +alias int INT32; +alias long INT64; +alias int LONG; +alias int LONG32; +alias long LONG64; +alias UINT_PTR WPARAM; +alias LONG_PTR LPARAM; +alias LONG_PTR LRESULT; +alias char UCHAR; +alias uint UINT; +alias uint UINT32; +alias ulong UINT64; +alias uint ULONG; +alias uint ULONG32; +alias ulong ULONG64; +alias short SHORT; +alias ushort USHORT; +alias void VOID; +alias ushort WORD; +alias WORD ATOM; +alias ULONG_PTR SIZE_T; +alias DWORD COLORREF; +alias LONG NTSTATUS; + +const HRESULT S_OK = 0; +const HRESULT S_FALSE = 1; +const HRESULT NOERROR = 0; + +const int MAX_PATH = 260; + +alias UINT_PTR function(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) LPOFNHOOKPROC; +alias LRESULT function(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) WNDPROC; +alias int function(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) BFFCALLBACK; + +public import tango.sys.win32.Macros; +//public import tango.sys.win32.UserGdi : LOWORD, HIWORD, RGB; + +WORD MAKEWORD(BYTE a, BYTE b) { return cast(WORD)a | cast(WORD)b << 8; } +LONG MAKELONG(WORD a, WORD b) { return cast(WORD)a | cast(WORD)b << 16; } +BYTE LOBYTE(WORD w) { return cast(BYTE)(w & 0xff); } +BYTE HIBYTE(WORD w) { return cast(BYTE)(w >> 8); } +LPWSTR MAKEINTRESOURCE(int i) { return cast(LPWSTR)cast(WORD)i; } +BYTE GetRValue(DWORD rgb) { return LOBYTE(rgb); } +BYTE GetGValue(DWORD rgb) { return LOBYTE(cast(WORD)rgb >> 8); } +BYTE GetBValue(DWORD rgb) { return LOBYTE(rgb >> 16); } + +int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); +int MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); + +DWORD GetLastError(); + +int MultiByteToWideChar( + UINT CodePage, + DWORD dwFlags, + LPCSTR lpMultiByteStr, + int cbMultiByte, + LPWSTR lpWideCharStr, + int cchWideChar); + +int WideCharToMultiByte( + UINT CodePage, + DWORD dwFlags, + LPCWSTR lpWideCharStr, + int cchWideChar, + LPSTR lpMultiByteStr, + int cbMultiByte, + LPCSTR lpDefaultChar, + BOOL* lpUsedDefaultChar); + +//{{{ memory functions +HANDLE GetProcessHeap(); + +VOID* HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes); + +VOID* HeapReAlloc(HANDLE hHeap, DWORD dwFlags, VOID* lpMem, SIZE_T dwBytes); + +BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, VOID* lpMem); + +SIZE_T HeapSize(HANDLE hHeap, DWORD dwFlags, /*const*/ VOID* lpMem); + +enum { + HEAP_ZERO_MEMORY = 0x0008, + HEAP_REALLOC_IN_PLACE_ONLY = 0x0010 +} + +HGLOBAL GlobalAlloc(UINT uFlags, SIZE_T dwBytes); + +HGLOBAL GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes, UINT uFlags); + +HGLOBAL GlobalFree(HGLOBAL hMem); + +VOID* GlobalLock(HGLOBAL hMem); + +BOOL GlobalUnlock(HGLOBAL hMem); + +enum { + GMEM_FIXED = 0x0000, + GMEM_MOVEABLE = 0x0002, + GMEM_ZEROINIT = 0x0040, + GPTR = 0x0040, + GHND = 0x0042 +} +//}}} + +//{{{ window functions +enum { + CS_VREDRAW = 0x0001, + CS_HREDRAW = 0x0002, + CS_DBLCLKS = 0x0008, + CS_OWNDC = 0x0020, + CS_CLASSDC = 0x0040, + CS_PARENTDC = 0x0080, + CS_NOCLOSE = 0x0200, + CS_SAVEBITS = 0x0800, + CS_BYTEALIGNCLIENT = 0x1000, + CS_BYTEALIGNWINDOW = 0x2000, + CS_GLOBALCLASS = 0x4000, + //Windows XP required + CS_DROPSHADOW = 0x00020000 + +} +ATOM RegisterClassExA(/*const*/ WNDCLASSEX* lpwcx); +ATOM RegisterClassExW(/*const*/ WNDCLASSEX* lpwcx); + +LRESULT DefWindowProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +//{{{ window styles +enum { + WS_OVERLAPPED = 0x00000000, + WS_MAXIMIZEBOX = 0x00010000, + WS_TABSTOP = 0x00010000, + WS_GROUP = 0x00020000, + WS_MINIMIZEBOX = 0x00020000, + WS_THICKFRAME = 0x00040000, + WS_SYSMENU = 0x00080000, + WS_HSCROLL = 0x00100000, + WS_VSCROLL = 0x00200000, + WS_DLGFRAME = 0x00400000, + WS_BORDER = 0x00800000, + WS_CAPTION = 0x00C00000, + WS_MAXIMIZE = 0x01000000, + WS_CLIPCHILDREN = 0x02000000, + WS_CLIPSIBLINGS = 0x04000000, + WS_DISABLED = 0x08000000, + WS_VISIBLE = 0x10000000, + WS_MINIMIZE = 0x20000000, + WS_CHILD = 0x40000000, + WS_POPUP = 0x80000000, + WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | + WS_CAPTION | + WS_SYSMENU | + WS_THICKFRAME | + WS_MINIMIZEBOX | + WS_MAXIMIZEBOX, + WS_POPUPWINDOW = WS_POPUP | + WS_BORDER | + WS_SYSMENU, + WS_CHILDWINDOW = WS_CHILD, + WS_TILED = WS_OVERLAPPED, + WS_ICONIC = WS_MINIMIZE, + WS_SIZEBOX = WS_THICKFRAME, + WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW +} +//}}} + +//{{{ extended window styles +enum { + WS_EX_DLGMODALFRAME = 0x00000001, + WS_EX_TOPMOST = 0x00000008, + WS_EX_TOOLWINDOW = 0x00000080, + WS_EX_WINDOWEDGE = 0x00000100, + WS_EX_CLIENTEDGE = 0x00000200, + WS_EX_CONTROLPARENT = 0x00010000, + WS_EX_STATICEDGE = 0x00020000, + WS_EX_APPWINDOW = 0x00040000, + WS_EX_LAYERED = 0x00080000, + WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE, + WS_EX_COMPOSITED = 0x02000000 +} +//}}} + +//{{{ CreateWindowEx() +HWND CreateWindowExA( + DWORD dwExStyle, + LPCSTR lpClassName, + LPCSTR lpWindowName, + DWORD dwStyle, + int x, + int y, + int nWidth, + int nHeight, + HWND hWndParent, + HMENU hMenu, + HINSTANCE hInstance, + VOID* lpParam); +HWND CreateWindowExW( + DWORD dwExStyle, + LPCWSTR lpClassName, + LPCWSTR lpWindowName, + DWORD dwStyle, + int x, + int y, + int nWidth, + int nHeight, + HWND hWndParent, + HMENU hMenu, + HINSTANCE hInstance, + VOID* lpParam); +//}}} + +BOOL DestroyWindow(HWND hWnd); + +BOOL ClientToScreen(HWND hWnd, POINT* lpPoint); + +BOOL ScreenToClient(HWND hWnd, POINT* lpPoint); + +//{{{ messages +enum { + WM_NULL = 0x0000, + WM_CREATE = 0x0001, + WM_DESTROY = 0x0002, + WM_MOVE = 0x0003, + WM_SIZE = 0x0005, + WM_ACTIVATE = 0x0006, + WM_SETFOCUS = 0x0007, + WM_KILLFOCUS = 0x0008, + WM_ENABLE = 0x000A, + WM_SETREDRAW = 0x000B, + WM_SETTEXT = 0x000C, + WM_GETTEXT = 0x000D, + WM_GETTEXTLENGTH = 0x000E, + WM_PAINT = 0x000F, + WM_CLOSE = 0x0010, + WM_QUERYENDSESSION = 0x0011, + WM_QUERYOPEN = 0x0013, + WM_ENDSESSION = 0x0016, + WM_QUIT = 0x0012, + WM_ERASEBKGND = 0x0014, + WM_SYSCOLORCHANGE = 0x0015, + WM_SHOWWINDOW = 0x0018, + WM_WININICHANGE = 0x001A, + WM_SETTINGCHANGE = WM_WININICHANGE, + WM_DEVMODECHANGE = 0x001B, + WM_ACTIVATEAPP = 0x001C, + WM_FONTCHANGE = 0x001D, + WM_TIMECHANGE = 0x001E, + WM_CANCELMODE = 0x001F, + WM_SETCURSOR = 0x0020, + WM_MOUSEACTIVATE = 0x0021, + WM_CHILDACTIVATE = 0x0022, + WM_QUEUESYNC = 0x0023, + WM_GETMINMAXINFO = 0x0024, + WM_PAINTICON = 0x0026, + WM_ICONERASEBKGND = 0x0027, + WM_NEXTDLGCTL = 0x0028, + WM_SPOOLERSTATUS = 0x002A, + WM_DRAWITEM = 0x002B, + WM_MEASUREITEM = 0x002C, + WM_DELETEITEM = 0x002D, + WM_VKEYTOITEM = 0x002E, + WM_CHARTOITEM = 0x002F, + WM_SETFONT = 0x0030, + WM_GETFONT = 0x0031, + WM_SETHOTKEY = 0x0032, + WM_GETHOTKEY = 0x0033, + WM_QUERYDRAGICON = 0x0037, + WM_COMPAREITEM = 0x0039, + WM_GETOBJECT = 0x003D, + WM_COMPACTING = 0x0041, + WM_WINDOWPOSCHANGING = 0x0046, + WM_WINDOWPOSCHANGED = 0x0047, + WM_POWER = 0x0048, + WM_COPYDATA = 0x004A, + WM_CANCELJOURNAL = 0x004B, + WM_NOTIFY = 0x004E, + WM_INPUTLANGCHANGEREQUEST = 0x0050, + WM_INPUTLANGCHANGE = 0x0051, + WM_TCARD = 0x0052, + WM_HELP = 0x0053, + WM_USERCHANGED = 0x0054, + WM_NOTIFYFORMAT = 0x0055, + WM_CONTEXTMENU = 0x007B, + WM_STYLECHANGING = 0x007C, + WM_STYLECHANGED = 0x007D, + WM_DISPLAYCHANGE = 0x007E, + WM_GETICON = 0x007F, + WM_SETICON = 0x0080, + WM_NCCREATE = 0x0081, + WM_NCDESTROY = 0x0082, + WM_NCCALCSIZE = 0x0083, + WM_NCHITTEST = 0x0084, + WM_NCPAINT = 0x0085, + WM_NCACTIVATE = 0x0086, + WM_GETDLGCODE = 0x0087, + WM_SYNCPAINT = 0x0088, + WM_NCMOUSEMOVE = 0x00A0, + WM_NCLBUTTONDOWN = 0x00A1, + WM_NCLBUTTONUP = 0x00A2, + WM_NCLBUTTONDBLCLK = 0x00A3, + WM_NCRBUTTONDOWN = 0x00A4, + WM_NCRBUTTONUP = 0x00A5, + WM_NCRBUTTONDBLCLK = 0x00A6, + WM_NCMBUTTONDOWN = 0x00A7, + WM_NCMBUTTONUP = 0x00A8, + WM_NCMBUTTONDBLCLK = 0x00A9, + WM_NCXBUTTONDOWN = 0x00AB, + WM_NCXBUTTONUP = 0x00AC, + WM_NCXBUTTONDBLCLK = 0x00AD, + WM_INPUT = 0x00FF, + WM_KEYDOWN = 0x0100, + WM_KEYUP = 0x0101, + WM_CHAR = 0x0102, + WM_DEADCHAR = 0x0103, + WM_SYSKEYDOWN = 0x0104, + WM_SYSKEYUP = 0x0105, + WM_SYSCHAR = 0x0106, + WM_SYSDEADCHAR = 0x0107, + WM_UNICHAR = 0x0109, + WM_IME_STARTCOMPOSITION = 0x010D, + WM_IME_ENDCOMPOSITION = 0x010E, + WM_IME_COMPOSITION = 0x010F, + WM_IME_KEYLAST = 0x010F, + WM_INITDIALOG = 0x0110, + WM_COMMAND = 0x0111, + WM_SYSCOMMAND = 0x0112, + WM_TIMER = 0x0113, + WM_HSCROLL = 0x0114, + WM_VSCROLL = 0x0115, + WM_INITMENU = 0x0116, + WM_INITMENUPOPUP = 0x0117, + WM_MENUSELECT = 0x011F, + WM_MENUCHAR = 0x0120, + WM_ENTERIDLE = 0x0121, + WM_MENURBUTTONUP = 0x0122, + WM_MENUDRAG = 0x0123, + WM_MENUGETOBJECT = 0x0124, + WM_UNINITMENUPOPUP = 0x0125, + WM_MENUCOMMAND = 0x0126, + WM_CHANGEUISTATE = 0x0127, + WM_UPDATEUISTATE = 0x0128, + WM_QUERYUISTATE = 0x0129, + WM_CTLCOLORMSGBOX = 0x0132, + WM_CTLCOLOREDIT = 0x0133, + WM_CTLCOLORLISTBOX = 0x0134, + WM_CTLCOLORBTN = 0x0135, + WM_CTLCOLORDLG = 0x0136, + WM_CTLCOLORSCROLLBAR = 0x0137, + WM_CTLCOLORSTATIC = 0x0138, + WM_MOUSEFIRST = 0x0200, + WM_MOUSEMOVE = 0x0200, + WM_LBUTTONDOWN = 0x0201, + WM_LBUTTONUP = 0x0202, + WM_LBUTTONDBLCLK = 0x0203, + WM_RBUTTONDOWN = 0x0204, + WM_RBUTTONUP = 0x0205, + WM_RBUTTONDBLCLK = 0x0206, + WM_MBUTTONDOWN = 0x0207, + WM_MBUTTONUP = 0x0208, + WM_MBUTTONDBLCLK = 0x0209, + WM_MOUSEWHEEL = 0x020A, + WM_XBUTTONDOWN = 0x020B, + WM_XBUTTONUP = 0x020C, + WM_XBUTTONDBLCLK = 0x020D, + WM_PARENTNOTIFY = 0x0210, + WM_ENTERMENULOOP = 0x0211, + WM_EXITMENULOOP = 0x0212, + WM_NEXTMENU = 0x0213, + WM_SIZING = 0x0214, + WM_CAPTURECHANGED = 0x0215, + WM_MOVING = 0x0216, + WM_POWERBROADCAST = 0x0218, + WM_DEVICECHANGE = 0x0219, + WM_MDICREATE = 0x0220, + WM_MDIDESTROY = 0x0221, + WM_MDIACTIVATE = 0x0222, + WM_MDIRESTORE = 0x0223, + WM_MDINEXT = 0x0224, + WM_MDIMAXIMIZE = 0x0225, + WM_MDITILE = 0x0226, + WM_MDICASCADE = 0x0227, + WM_MDIICONARRANGE = 0x0228, + WM_MDIGETACTIVE = 0x0229, + WM_MDISETMENU = 0x0230, + WM_ENTERSIZEMOVE = 0x0231, + WM_EXITSIZEMOVE = 0x0232, + WM_DROPFILES = 0x0233, + WM_MDIREFRESHMENU = 0x0234, + WM_IME_SETCONTEXT = 0x0281, + WM_IME_NOTIFY = 0x0282, + WM_IME_CONTROL = 0x0283, + WM_IME_COMPOSITIONFULL = 0x0284, + WM_IME_SELECT = 0x0285, + WM_IME_CHAR = 0x0286, + WM_IME_REQUEST = 0x0288, + WM_IME_KEYDOWN = 0x0290, + WM_IME_KEYUP = 0x0291, + WM_MOUSEHOVER = 0x02A1, + WM_MOUSELEAVE = 0x02A3, + WM_NCMOUSEHOVER = 0x02A0, + WM_NCMOUSELEAVE = 0x02A2, + WM_WTSSESSION_CHANGE = 0x02B1, + WM_TABLET_FIRST = 0x02C0, + WM_TABLET_LAST = 0x02DF, + WM_CUT = 0x0300, + WM_COPY = 0x0301, + WM_PASTE = 0x0302, + WM_CLEAR = 0x0303, + WM_UNDO = 0x0304, + WM_RENDERFORMAT = 0x0305, + WM_RENDERALLFORMATS = 0x0306, + WM_DESTROYCLIPBOARD = 0x0307, + WM_DRAWCLIPBOARD = 0x0308, + WM_PAINTCLIPBOARD = 0x0309, + WM_VSCROLLCLIPBOARD = 0x030A, + WM_SIZECLIPBOARD = 0x030B, + WM_ASKCBFORMATNAME = 0x030C, + WM_CHANGECBCHAIN = 0x030D, + WM_HSCROLLCLIPBOARD = 0x030E, + WM_QUERYNEWPALETTE = 0x030F, + WM_PALETTEISCHANGING = 0x0310, + WM_PALETTECHANGED = 0x0311, + WM_HOTKEY = 0x0312, + WM_PRINT = 0x0317, + WM_PRINTCLIENT = 0x0318, + WM_APPCOMMAND = 0x0319, + WM_THEMECHANGED = 0x031A, + WM_HANDHELDFIRST = 0x0358, + WM_HANDHELDLAST = 0x035F, + WM_AFXFIRST = 0x0360, + WM_AFXLAST = 0x037F, + WM_PENWINFIRST = 0x0380, + WM_PENWINLAST = 0x038F, + WM_APP = 0x8000, + WM_USER = 0x0400 +} +enum { + PBT_APMQUERYSUSPEND = 0x0000, + PBT_APMQUERYSTANDBY = 0x0001, + PBT_APMQUERYSUSPENDFAILED = 0x0002, + PBT_APMQUERYSTANDBYFAILED = 0x0003, + PBT_APMSUSPEND = 0x0004, + PBT_APMSTANDBY = 0x0005, + PBT_APMRESUMECRITICAL = 0x0006, + PBT_APMRESUMESUSPEND = 0x0007, + PBT_APMRESUMESTANDBY = 0x0008, + PBTF_APMRESUMEFROMFAILURE = 0x00000001, + PBT_APMBATTERYLOW = 0x0009, + PBT_APMPOWERSTATUSCHANGE = 0x000A, + PBT_APMOEMEVENT = 0x000B, + PBT_APMRESUMEAUTOMATIC = 0x0012 +} +//}}} + +enum { + MK_LBUTTON = 0x0001, + MK_RBUTTON = 0x0002, + MK_SHIFT = 0x0004, + MK_CONTROL = 0x0008, + MK_MBUTTON = 0x0010, + MK_XBUTTON1 = 0x0020, + MK_XBUTTON2 = 0x0040 +} + +enum { + WMSZ_LEFT = 1, + WMSZ_RIGHT = 2, + WMSZ_TOP = 3, + WMSZ_TOPLEFT = 4, + WMSZ_TOPRIGHT = 5, + WMSZ_BOTTOM = 6, + WMSZ_BOTTOMLEFT = 7, + WMSZ_BOTTOMRIGHT = 8 +} + +enum { + SIZE_RESTORED = 0, + SIZE_MINIMIZED = 1, + SIZE_MAXIMIZED = 2, + SIZE_MAXSHOW = 3, + SIZE_MAXHIDE = 4 +} + +enum { + SW_HIDE = 0, + SW_SHOWNORMAL = 1, + SW_NORMAL = 1, + SW_SHOWMINIMIZED = 2, + SW_SHOWMAXIMIZED = 3, + SW_MAXIMIZE = 3, + SW_SHOWNOACTIVATE = 4, + SW_SHOW = 5, + SW_MINIMIZE = 6, + SW_SHOWMINNOACTIVE = 7, + SW_SHOWNA = 8, + SW_RESTORE = 9, + SW_SHOWDEFAULT = 10, + SW_FORCEMINIMIZE = 11, + SW_MAX = 11 +} + +enum { + GWL_STYLE = -16, + GWL_EXSTYLE = -20 +} + +DWORD GetClassLongA(HWND hWnd, int nIndex); +DWORD GetClassLongW(HWND hWnd, int nIndex); + +DWORD SetClassLongA(HWND hWnd, int nIndex, LONG dwNewLong); +DWORD SetClassLongW(HWND hWnd, int nIndex, LONG dwNewLong); + +ULONG_PTR GetClassLongPtrA(HWND hWnd, int nIndex); +ULONG_PTR GetClassLongPtrW(HWND hWnd, int nIndex); + +ULONG_PTR SetClassLongPtrA(HWND hWnd, int nIndex, LONG_PTR dwNewLong); +ULONG_PTR SetClassLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong); + +LONG GetWindowLongA(HWND hWnd, int nIndex); +LONG GetWindowLongW(HWND hWnd, int nIndex); + +LONG SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); +LONG SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong); + +LONG_PTR GetWindowLongPtrA(HWND hWnd, int nIndex); +LONG_PTR GetWindowLongPtrW(HWND hWnd, int nIndex); + +LONG_PTR SetWindowLongPtrA(HWND hWnd, int nIndex, LONG_PTR dwNewLong); +LONG_PTR SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong); + +BOOL ShowWindow(HWND hWnd, int nCmdShow); + +//Windows 98 required +BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags); + +BOOL IsWindowVisible(HWND hWnd); + +BOOL IsWindow(HWND hWnd); + +BOOL GetWindowRect(HWND hWnd, RECT* lpRect); + +BOOL GetClientRect(HWND hWnd, RECT* lpRect); + +enum { + SWP_NOSIZE = 0x0001, + SWP_NOMOVE = 0x0002, + SWP_NOZORDER = 0x0004, + SWP_NOACTIVATE = 0x0010, + SWP_FRAMECHANGED = 0x0020 +} + +BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags); + +BOOL MoveWindow(HWND hWnd, int x, int y, int nWidth, int nHeight, BOOL bRepaint); + +int SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw); + +enum { + ULW_COLORKEY = 0x00000001, + ULW_ALPHA = 0x00000002, + ULW_OPAQUE = 0x00000004 +} + +BOOL UpdateLayeredWindow( + HWND hWnd, + HDC hdcDst, + POINT* pptDst, + SIZE* psize, + HDC hdcSrc, + POINT* pptSrc, + COLORREF crKey, + BLENDFUNCTION* pblend, + DWORD dwFlags); + +HWND SetParent(HWND hWndChild, HWND hWndNewParent); + +HWND GetParent(HWND hWnd); + +BOOL IsChild(HWND hWndParent, HWND hWnd); + +BOOL EnableWindow(HWND hWnd, BOOL bEnable); + +enum { + GW_HWNDFIRST = 0, + GW_HWNDLAST = 1, + GW_HWNDNEXT = 2, + GW_HWNDPREV = 3, + GW_OWNER = 4, + GW_CHILD = 5 +} + +HWND GetWindow(HWND hWnd, UINT uCmd); + +BOOL GetWindowInfo(HWND hwnd, WINDOWINFO* pwi); + +int GetWindowTextLength(HWND hWnd); + +int GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount); +int GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount); + +BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString); +BOOL SetWindowTextW(HWND hWnd, LPCWSTR lpString); + +UINT GetWindowModuleFileNameA(HWND hWnd, LPSTR lpszFileName, UINT cchFileNameMax); +UINT GetWindowModuleFileNameW(HWND hWnd, LPWSTR lpszFileName, UINT cchFileNameMax); + +BOOL SetPropA(HWND hWnd, LPCSTR lpString, HANDLE hData); +BOOL SetPropW(HWND hWnd, LPCWSTR lpString, HANDLE hData); + +HANDLE GetPropA(HWND hWnd, LPCSTR lpString); +HANDLE GetPropW(HWND hWnd, LPCWSTR lpString); + +HANDLE RemovePropA(HWND hWnd, LPCSTR lpString); +HANDLE RemovePropW(HWND hWnd, LPCWSTR lpString); + +DWORD CommDlgExtendedError(); +enum { FNERR_BUFFERTOOSMALL = 0x3003 } + +enum { + OFN_READONLY = 0x00000001, + OFN_OVERWRITEPROMPT = 0x00000002, + OFN_HIDEREADONLY = 0x00000004, + OFN_NOCHANGEDIR = 0x00000008, + OFN_SHOWHELP = 0x00000010, + OFN_ENABLEHOOK = 0x00000020, + OFN_ENABLETEMPLATE = 0x00000040, + OFN_ENABLETEMPLATEHANDLE = 0x00000080, + OFN_NOVALIDATE = 0x00000100, + OFN_ALLOWMULTISELECT = 0x00000200, + OFN_EXTENSIONDIFFERENT = 0x00000400, + OFN_PATHMUSTEXIST = 0x00000800, + OFN_FILEMUSTEXIST = 0x00001000, + OFN_CREATEPROMPT = 0x00002000, + OFN_SHAREAWARE = 0x00004000, + OFN_NOREADONLYRETURN = 0x00008000, + OFN_NOTESTFILECREATE = 0x00010000, + OFN_NONETWORKBUTTON = 0x00020000, + OFN_NOLONGNAMES = 0x00040000, + OFN_EXPLORER = 0x00080000, + OFN_NODEREFERENCELINKS = 0x00100000, + OFN_LONGNAMES = 0x00200000, + OFN_ENABLEINCLUDENOTIFY = 0x00400000, + OFN_ENABLESIZING = 0x00800000, + OFN_DONTADDTORECENT = 0x02000000, + OFN_FORCESHOWHIDDEN = 0x10000000 +} + +BOOL GetOpenFileNameA(OPENFILENAME* lpofn); +BOOL GetOpenFileNameW(OPENFILENAME* lpofn); + +BOOL GetSaveFileNameA(OPENFILENAME* lpofn); +BOOL GetSaveFileNameW(OPENFILENAME* lpofn); + +//}}} + +//{{{ painting functions +BOOL InvalidateRect(HWND hWnd, RECT* lpRect, BOOL bErase); + +BOOL ValidateRect(HWND hWnd, RECT* lpRect); + +BOOL UpdateWindow(HWND hWnd); + +HWND WindowFromDC(HDC hdc); + +HDC BeginPaint(HWND hWnd, PAINTSTRUCT* lpPaint); + +BOOL EndPaint(HWND hWnd, PAINTSTRUCT* lpPaint); +//}}} + +//{{{ device context functions +HDC GetDC(HWND hWnd); + +int ReleaseDC(HWND hWnd, HDC hDC); + +HDC CreateCompatibleDC(HDC hdc); + +BOOL DeleteDC(HDC hdc); + +HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hObject); + +BOOL DeleteObject(HGDIOBJ hObject); + +int GetObjectW(HANDLE h, int c, VOID* pv); + +HBITMAP CreateCompatibleBitmap(HDC hdc, int cx, int cy); + +HBITMAP CreateDIBSection( + HDC hdc, + BITMAPINFO* lpbmi, + UINT usage, + VOID** ppvBits, + HANDLE hSection, + DWORD offset); + +int GetDIBits(HDC hdc, HBITMAP hbm, UINT start, UINT cLines, VOID* lpvBits, BITMAPINFO* lpbmi, UINT usage); + +enum { + DIB_RGB_COLORS = 0 +} +enum { + BI_RGB = 0 +} + +enum { + SRCCOPY = 0x00CC0020 +} + +BOOL BitBlt(HDC hdc, int x, int y, int cx, int cy, HDC hdcSrc, int x1, int y1, DWORD rop); + +enum { + AC_SRC_OVER = 0x00, + AC_SRC_ALPHA = 0x01 +} + +int EnumFontFamiliesExA( + HDC hdc, LOGFONT* lpLogfont, + FONTENUMPROCA lpProc, LPARAM lParam, DWORD dwFlags); +int EnumFontFamiliesExW( + HDC hdc, LOGFONT* lpLogfont, + FONTENUMPROCW lpProc, LPARAM lParam, DWORD dwFlags); + +alias int function(ENUMLOGFONTEX*, TEXTMETRIC*, DWORD, LPARAM) FONTENUMPROCA; +alias int function(ENUMLOGFONTEX*, TEXTMETRIC*, DWORD, LPARAM) FONTENUMPROCW; +//}}} + +//{{{ message functions +BOOL GetMessageA(MSG* lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax); +BOOL GetMessageW(MSG* lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax); + +BOOL TranslateMessage(MSG* lpMsg); + +LRESULT DispatchMessageA(MSG* lpMsg); +LRESULT DispatchMessageW(MSG* lpMsg); + +BOOL PostMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); + +void PostQuitMessage(int nExitCode); + +LRESULT SendMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); +//}}} + +//{{{ clipboard functions +enum { + CF_TEXT = 1, + CF_BITMAP = 2, + CF_METAFILEPICT = 3, + CF_SYLK = 4, + CF_DIF = 5, + CF_TIFF = 6, + CF_OEMTEXT = 7, + CF_DIB = 8, + CF_PALETTE = 9, + CF_PENDATA = 10, + CF_RIFF = 11, + CF_WAVE = 12, + CF_UNICODETEXT = 13, + CF_ENHMETAFILE = 14, + CF_HDROP = 15, + CF_LOCALE = 16 +} + +BOOL OpenClipboard(HWND hWndNewOwner); + +BOOL CloseClipboard(); + +BOOL IsClipboardFormatAvailable(UINT format); + +HANDLE GetClipboardData(UINT uFormat); + +HANDLE SetClipboardData(UINT uFormat, HANDLE hMem); + +BOOL EmptyClipboard(); +//}}} + +//{{{ mouse functions +enum { + XBUTTON1 = 0x0001, + XBUTTON2 = 0x0002 +} + +HWND SetCapture(HWND hWnd); + +BOOL ReleaseCapture(); + +enum { + TME_HOVER = 0x00000001, + TME_LEAVE = 0x00000002, + TME_NONCLIENT = 0x00000010 +} +BOOL TrackMouseEvent(TRACKMOUSEEVENT* lpEventTrack); + +HCURSOR SetCursor(HCURSOR hCursor); + +BOOL GetCursorPos(POINT* lpPoint); +//}}} + +//{{{ keyboard functions +//{{{ keys +enum { + VK_LBUTTON = 0x01, + VK_RBUTTON = 0x02, + VK_CANCEL = 0x03, + VK_MBUTTON = 0x04, + VK_XBUTTON1 = 0x05, + VK_XBUTTON2 = 0x06, + VK_BACK = 0x08, + VK_TAB = 0x09, + VK_CLEAR = 0x0C, + VK_RETURN = 0x0D, + VK_SHIFT = 0x10, + VK_CONTROL = 0x11, + VK_MENU = 0x12, + VK_PAUSE = 0x13, + VK_CAPITAL = 0x14, + VK_KANA = 0x15, + VK_HANGEUL = 0x15, + VK_HANGUL = 0x15, + VK_JUNJA = 0x17, + VK_FINAL = 0x18, + VK_HANJA = 0x19, + VK_KANJI = 0x19, + VK_ESCAPE = 0x1B, + VK_CONVERT = 0x1C, + VK_NONCONVERT = 0x1D, + VK_ACCEPT = 0x1E, + VK_MODECHANGE = 0x1F, + VK_SPACE = 0x20, + VK_PRIOR = 0x21, + VK_NEXT = 0x22, + VK_END = 0x23, + VK_HOME = 0x24, + VK_LEFT = 0x25, + VK_UP = 0x26, + VK_RIGHT = 0x27, + VK_DOWN = 0x28, + VK_SELECT = 0x29, + VK_PRINT = 0x2A, + VK_EXECUTE = 0x2B, + VK_SNAPSHOT = 0x2C, + VK_INSERT = 0x2D, + VK_DELETE = 0x2E, + VK_HELP = 0x2F, + VK_LWIN = 0x5B, + VK_RWIN = 0x5C, + VK_APPS = 0x5D, + VK_SLEEP = 0x5F, + VK_NUMPAD0 = 0x60, + VK_NUMPAD1 = 0x61, + VK_NUMPAD2 = 0x62, + VK_NUMPAD3 = 0x63, + VK_NUMPAD4 = 0x64, + VK_NUMPAD5 = 0x65, + VK_NUMPAD6 = 0x66, + VK_NUMPAD7 = 0x67, + VK_NUMPAD8 = 0x68, + VK_NUMPAD9 = 0x69, + VK_MULTIPLY = 0x6A, + VK_ADD = 0x6B, + VK_SEPARATOR = 0x6C, + VK_SUBTRACT = 0x6D, + VK_DECIMAL = 0x6E, + VK_DIVIDE = 0x6F, + VK_F1 = 0x70, + VK_F2 = 0x71, + VK_F3 = 0x72, + VK_F4 = 0x73, + VK_F5 = 0x74, + VK_F6 = 0x75, + VK_F7 = 0x76, + VK_F8 = 0x77, + VK_F9 = 0x78, + VK_F10 = 0x79, + VK_F11 = 0x7A, + VK_F12 = 0x7B, + VK_F13 = 0x7C, + VK_F14 = 0x7D, + VK_F15 = 0x7E, + VK_F16 = 0x7F, + VK_F17 = 0x80, + VK_F18 = 0x81, + VK_F19 = 0x82, + VK_F20 = 0x83, + VK_F21 = 0x84, + VK_F22 = 0x85, + VK_F23 = 0x86, + VK_F24 = 0x87, + VK_NUMLOCK = 0x90, + VK_SCROLL = 0x91, + VK_OEM_NEC_EQUAL = 0x92, + VK_OEM_FJ_JISHO = 0x92, + VK_OEM_FJ_MASSHOU = 0x93, + VK_OEM_FJ_TOUROKU = 0x94, + VK_OEM_FJ_LOYA = 0x95, + VK_OEM_FJ_ROYA = 0x96, + VK_LSHIFT = 0xA0, + VK_RSHIFT = 0xA1, + VK_LCONTROL = 0xA2, + VK_RCONTROL = 0xA3, + VK_LMENU = 0xA4, + VK_RMENU = 0xA5, + VK_BROWSER_BACK = 0xA6, + VK_BROWSER_FORWARD = 0xA7, + VK_BROWSER_REFRESH = 0xA8, + VK_BROWSER_STOP = 0xA9, + VK_BROWSER_SEARCH = 0xAA, + VK_BROWSER_FAVORITES = 0xAB, + VK_BROWSER_HOME = 0xAC, + VK_VOLUME_MUTE = 0xAD, + VK_VOLUME_DOWN = 0xAE, + VK_VOLUME_UP = 0xAF, + VK_MEDIA_NEXT_TRACK = 0xB0, + VK_MEDIA_PREV_TRACK = 0xB1, + VK_MEDIA_STOP = 0xB2, + VK_MEDIA_PLAY_PAUSE = 0xB3, + VK_LAUNCH_MAIL = 0xB4, + VK_LAUNCH_MEDIA_SELECT = 0xB5, + VK_LAUNCH_APP1 = 0xB6, + VK_LAUNCH_APP2 = 0xB7, + VK_OEM_1 = 0xBA, + VK_OEM_PLUS = 0xBB, + VK_OEM_COMMA = 0xBC, + VK_OEM_MINUS = 0xBD, + VK_OEM_PERIOD = 0xBE, + VK_OEM_2 = 0xBF, + VK_OEM_3 = 0xC0, + VK_OEM_4 = 0xDB, + VK_OEM_5 = 0xDC, + VK_OEM_6 = 0xDD, + VK_OEM_7 = 0xDE, + VK_OEM_8 = 0xDF, + VK_OEM_AX = 0xE1, + VK_OEM_102 = 0xE2, + VK_ICO_HELP = 0xE3, + VK_ICO_00 = 0xE4, + VK_PROCESSKEY = 0xE5, + VK_ICO_CLEAR = 0xE6, + VK_PACKET = 0xE7, + VK_OEM_RESET = 0xE9, + VK_OEM_JUMP = 0xEA, + VK_OEM_PA1 = 0xEB, + VK_OEM_PA2 = 0xEC, + VK_OEM_PA3 = 0xED, + VK_OEM_WSCTRL = 0xEE, + VK_OEM_CUSEL = 0xEF, + VK_OEM_ATTN = 0xF0, + VK_OEM_FINISH = 0xF1, + VK_OEM_COPY = 0xF2, + VK_OEM_AUTO = 0xF3, + VK_OEM_ENLW = 0xF4, + VK_OEM_BACKTAB = 0xF5, + VK_ATTN = 0xF6, + VK_CRSEL = 0xF7, + VK_EXSEL = 0xF8, + VK_EREOF = 0xF9, + VK_PLAY = 0xFA, + VK_ZOOM = 0xFB, + VK_NONAME = 0xFC, + VK_PA1 = 0xFD, + VK_OEM_CLEAR = 0xFE +} +//}}} + +SHORT GetKeyState(int nVirtKey); +//}}} + +//{{{ system functions +//const LPTSTR IDC_ARROW = cast(LPTSTR)32512u; +//const LPTSTR IDC_IBEAM = cast(LPTSTR)32513u; +//const LPTSTR IDC_WAIT = cast(LPTSTR)32514u; +//const LPTSTR IDC_CROSS = cast(LPTSTR)32515u; +//const LPTSTR IDC_UPARROW = cast(LPTSTR)32516u; +//const LPTSTR IDC_SIZE = cast(LPTSTR)32640u; +//const LPTSTR IDC_ICON = cast(LPTSTR)32641u; +//const LPTSTR IDC_SIZENWSE = cast(LPTSTR)32642u; +//const LPTSTR IDC_SIZENESW = cast(LPTSTR)32643u; +//const LPTSTR IDC_SIZEWE = cast(LPTSTR)32644u; +//const LPTSTR IDC_SIZENS = cast(LPTSTR)32645u; +//const LPTSTR IDC_SIZEALL = cast(LPTSTR)32646u; +//const LPTSTR IDC_NO = cast(LPTSTR)32648u; +//const LPTSTR IDC_HAND = cast(LPTSTR)32649u; +//const LPTSTR IDC_APPSTARTING = cast(LPTSTR)32650u; +//const LPTSTR IDC_HELP = cast(LPTSTR)32651u; + +//const LPTSTR IDI_APPLICATION = cast(LPTSTR)32512; +//const LPTSTR IDI_HAND = cast(LPTSTR)32513; +//const LPTSTR IDI_QUESTION = cast(LPTSTR)32514; +//const LPTSTR IDI_EXCLAMATION = cast(LPTSTR)32515; +//const LPTSTR IDI_ASTERISK = cast(LPTSTR)32516; +//const LPTSTR IDI_WINLOGO = cast(LPTSTR)32517; +//const LPTSTR IDI_WARNING = IDI_EXCLAMATION; +//const LPTSTR IDI_ERROR = IDI_HAND; +//const LPTSTR IDI_INFORMATION = IDI_ASTERISK; + +enum { + OIC_SAMPLE = 32512, + OIC_HAND = 32513, + OIC_QUES = 32514, + OIC_BANG = 32515, + OIC_NOTE = 32516, + OIC_WINLOGO = 32517, + OIC_WARNING = OIC_BANG, + OIC_ERROR = OIC_HAND, + OIC_INFORMATION = OIC_NOTE +} + +enum { + OCR_NORMAL = 32512, + OCR_IBEAM = 32513, + OCR_WAIT = 32514, + OCR_CROSS = 32515, + OCR_UP = 32516, + OCR_SIZENWSE = 32642, + OCR_SIZENESW = 32643, + OCR_SIZEWE = 32644, + OCR_SIZENS = 32645, + OCR_SIZEALL = 32646, + OCR_NO = 32648, + OCR_HAND = 32649, + OCR_APPSTARTING = 32650 +} + +enum { + IMAGE_BITMAP = 0, + IMAGE_ICON = 1, + IMAGE_CURSOR = 2 +} + +enum { + LR_DEFAULTCOLOR = 0x0000, + LR_MONOCHROME = 0x0001, + LR_COLOR = 0x0002, + LR_COPYRETURNORG = 0x0004, + LR_COPYDELETEORG = 0x0008, + LR_LOADFROMFILE = 0x0010, + LR_LOADTRANSPARENT = 0x0020, + LR_DEFAULTSIZE = 0x0040, + LR_VGACOLOR = 0x0080, + LR_LOADMAP3DCOLORS = 0x1000, + LR_CREATEDIBSECTION = 0x2000, + LR_COPYFROMRESOURCE = 0x4000, + LR_SHARED = 0x8000 +} + +HANDLE LoadImageA( + HINSTANCE hInst, + LPCSTR name, + UINT type, + int cx, + int cy, + UINT fuLoad); +HANDLE LoadImageW( + HINSTANCE hInst, + LPCWSTR name, + UINT type, + int cx, + int cy, + UINT fuLoad); + +HICON CreateIconFromResource( + BYTE* presbits, + DWORD dwResSize, + BOOL fIcon, + DWORD dwVer); + +enum { + SPI_GETNONCLIENTMETRICS = 0x0029, + SPI_GETWORKAREA = 0x0030, + SPI_GETWHEELSCROLLLINES = 0x0068 +} + +BOOL SystemParametersInfoA(UINT uiAction, UINT uiParam, VOID* pvParam, UINT fWinIni); +BOOL SystemParametersInfoW(UINT uiAction, UINT uiParam, VOID* pvParam, UINT fWinIni); + +enum { + COLOR_SCROLLBAR = 0, + COLOR_BACKGROUND = 1, + COLOR_ACTIVECAPTION = 2, + COLOR_INACTIVECAPTION = 3, + COLOR_MENU = 4, + COLOR_WINDOW = 5, + COLOR_WINDOWFRAME = 6, + COLOR_MENUTEXT = 7, + COLOR_WINDOWTEXT = 8, + COLOR_CAPTIONTEXT = 9, + COLOR_ACTIVEBORDER = 10, + COLOR_INACTIVEBORDER = 11, + COLOR_APPWORKSPACE = 12, + COLOR_HIGHLIGHT = 13, + COLOR_HIGHLIGHTTEXT = 14, + COLOR_BTNFACE = 15, + COLOR_BTNSHADOW = 16, + COLOR_GRAYTEXT = 17, + COLOR_BTNTEXT = 18, + COLOR_INACTIVECAPTIONTEXT = 19, + COLOR_BTNHIGHLIGHT = 20, + + COLOR_3DDKSHADOW = 21, + COLOR_3DLIGHT = 22, + COLOR_INFOTEXT = 23, + COLOR_INFOBK = 24, + + COLOR_HOTLIGHT = 26, + COLOR_GRADIENTACTIVECAPTION = 27, + COLOR_GRADIENTINACTIVECAPTION = 28, + COLOR_MENUHILIGHT = 29, + COLOR_MENUBAR = 30, + + COLOR_DESKTOP = COLOR_BACKGROUND, + COLOR_3DFACE = COLOR_BTNFACE, + COLOR_3DSHADOW = COLOR_BTNSHADOW, + COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT, + COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT, + COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT +} + +DWORD GetSysColor(int nIndex); + +enum { + SM_CXSCREEN = 0, + SM_CYSCREEN = 1, + SM_CXVSCROLL = 2, + SM_CYHSCROLL = 3, + SM_CYCAPTION = 4, + SM_CXBORDER = 5, + SM_CYBORDER = 6, + SM_CXDLGFRAME = 7, + SM_CYDLGFRAME = 8, + SM_CYVTHUMB = 9, + SM_CXHTHUMB = 10, + SM_CXICON = 11, + SM_CYICON = 12, + SM_CXCURSOR = 13, + SM_CYCURSOR = 14, + SM_CYMENU = 15, + SM_CXFULLSCREEN = 16, + SM_CYFULLSCREEN = 17, + SM_CYKANJIWINDOW = 18, + SM_MOUSEPRESENT = 19, + SM_CYVSCROLL = 20, + SM_CXHSCROLL = 21, + SM_DEBUG = 22, + SM_SWAPBUTTON = 23, + SM_RESERVED1 = 24, + SM_RESERVED2 = 25, + SM_RESERVED3 = 26, + SM_RESERVED4 = 27, + SM_CXMIN = 28, + SM_CYMIN = 29, + SM_CXSIZE = 30, + SM_CYSIZE = 31, + SM_CXFRAME = 32, + SM_CYFRAME = 33, + SM_CXMINTRACK = 34, + SM_CYMINTRACK = 35, + SM_CXDOUBLECLK = 36, + SM_CYDOUBLECLK = 37, + SM_CXICONSPACING = 38, + SM_CYICONSPACING = 39, + SM_MENUDROPALIGNMENT = 40, + SM_PENWINDOWS = 41, + SM_DBCSENABLED = 42, + SM_CMOUSEBUTTONS = 43, + SM_CXFIXEDFRAME = SM_CXDLGFRAME, + SM_CYFIXEDFRAME = SM_CYDLGFRAME, + SM_CXSIZEFRAME = SM_CXFRAME, + SM_CYSIZEFRAME = SM_CYFRAME, + SM_SECURE = 44, + SM_CXEDGE = 45, + SM_CYEDGE = 46, + SM_CXMINSPACING = 47, + SM_CYMINSPACING = 48, + SM_CXSMICON = 49, + SM_CYSMICON = 50, + SM_CYSMCAPTION = 51, + SM_CXSMSIZE = 52, + SM_CYSMSIZE = 53, + SM_CXMENUSIZE = 54, + SM_CYMENUSIZE = 55, + SM_ARRANGE = 56, + SM_CXMINIMIZED = 57, + SM_CYMINIMIZED = 58, + SM_CXMAXTRACK = 59, + SM_CYMAXTRACK = 60, + SM_CXMAXIMIZED = 61, + SM_CYMAXIMIZED = 62, + SM_NETWORK = 63, + SM_CLEANBOOT = 67, + SM_CXDRAG = 68, + SM_CYDRAG = 69, + SM_SHOWSOUNDS = 70, + SM_CXMENUCHECK = 71, + SM_CYMENUCHECK = 72, + SM_SLOWMACHINE = 73, + SM_MIDEASTENABLED = 74, + SM_MOUSEWHEELPRESENT = 75, + SM_XVIRTUALSCREEN = 76, + SM_YVIRTUALSCREEN = 77, + SM_CXVIRTUALSCREEN = 78, + SM_CYVIRTUALSCREEN = 79, + SM_CMONITORS = 80, + SM_SAMEDISPLAYFORMAT = 81, + SM_IMMENABLED = 82, + SM_CXFOCUSBORDER = 83, + SM_CYFOCUSBORDER = 84, + SM_TABLETPC = 86, + SM_MEDIACENTER = 87, + SM_STARTER = 88, + SM_SERVERR2 = 89 +} + +int GetSystemMetrics(int nIndex); + +VOID GetSystemInfo(SYSTEM_INFO* lpSystemInfo); + +BOOL GetVersionExA(OSVERSIONINFO* lpVersionInformation); +BOOL GetVersionExW(OSVERSIONINFO* lpVersionInformation); + +HMODULE GetModuleHandleA(LPCSTR lpModuleName); +HMODULE GetModuleHandleW(LPCWSTR lpModuleName); + +HMODULE LoadLibraryA(LPCSTR lpLibFileName); +HMODULE LoadLibraryW(LPCWSTR lpLibFileName); + +FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName); + +//Requires Internet Explorer 4.0 (but will work on Windows 95 with IE 4) +BOOL SHGetSpecialFolderPathA(HWND hWndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate); +BOOL SHGetSpecialFolderPathW(HWND hWndOwner, LPWSTR lpszPath, int nFolder, BOOL fCreate); + +BOOL QueryPerformanceFrequency(ulong* lpFrequency); + +BOOL QueryPerformanceCounter(ulong* lpPerformanceCount); + +VOID GetSystemTimeAsFileTime(FILETIME* lpSystemTimeAsFileTime); + +BOOL SystemTimeToFileTime(SYSTEMTIME* lpSystemTime, FILETIME* lpFileTime); + +HANDLE GetCurrentThread(); + +VOID Sleep(DWORD dwMilliseconds); + +BOOL GetProcessAffinityMask( + HANDLE hProcess, + ULONG_PTR* lpProcessAffinityMask, + ULONG_PTR* lpSystemAffinityMask); + +ULONG_PTR SetThreadAffinityMask(HANDLE hThread, ULONG_PTR dwThreadAffinityMask); +//}}} + +//{{{ file functions + +BOOL GetFileSizeEx(HANDLE hFile, long* lpFileSize); + +BOOL ReadFile( + HANDLE hFile, + VOID* lpBuffer, + DWORD nNumberOfBytesToRead, + DWORD* lpNumberOfBytesRead, + OVERLAPPED* lpOverlapped); + +BOOL WriteFile( + HANDLE hFile, + VOID* lpBuffer, + DWORD nNumberOfBytesToWrite, + DWORD* lpNumberOfBytesWritten, + OVERLAPPED* lpOverlapped); +//}}} + +//{{{ console functions +BOOL AllocConsole(); + +BOOL FreeConsole(); + +BOOL GetConsoleMode(HANDLE hConsoleHandle, DWORD* lpMode); + +BOOL SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode); + +DWORD GetConsoleTitleA(LPSTR lpConsoleTitle, DWORD nSize); +DWORD GetConsoleTitleW(LPWSTR lpConsoleTitle, DWORD nSize); + +BOOL SetConsoleTitleA(LPCSTR lpConsoleTitle); +BOOL SetConsoleTitleW(LPCWSTR lpConsoleTitle); + +BOOL ReadConsoleA( + HANDLE hConsoleInput, + LPSTR lpBuffer, + DWORD nNumberOfCharsToRead, + DWORD* lpNumberOfCharsRead, + VOID* lpReserved); +BOOL ReadConsoleW( + HANDLE hConsoleInput, + LPWSTR lpBuffer, + DWORD nNumberOfCharsToRead, + DWORD* lpNumberOfCharsRead, + VOID* lpReserved); + +BOOL WriteConsoleA( + HANDLE hConsoleOutput, + LPCSTR lpBuffer, + DWORD nNumberOfCharsToWrite, + DWORD* lpNumberOfCharsWritten, + VOID* lpReserved); +BOOL WriteConsoleW( + HANDLE hConsoleOutput, + LPCWSTR lpBuffer, + DWORD nNumberOfCharsToWrite, + DWORD* lpNumberOfCharsWritten, + VOID* lpReserved); + +enum { + FOREGROUND_BLUE = 0x0001, + FOREGROUND_GREEN = 0x0002, + FOREGROUND_RED = 0x0004, + FOREGROUND_INTENSITY = 0x0008, + BACKGROUND_BLUE = 0x0010, + BACKGROUND_GREEN = 0x0020, + BACKGROUND_RED = 0x0040, + BACKGROUND_INTENSITY = 0x0080 +} + +BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes); + +BOOL GetConsoleScreenBufferInfo( + HANDLE hConsoleOutput, + CONSOLE_SCREEN_BUFFER_INFO* lpConsoleScreenBufferInfo); + +BOOL SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput); + +enum { + STD_INPUT_HANDLE = -10, + STD_OUTPUT_HANDLE = -11, + STD_ERROR_HANDLE = -12 +} + +HANDLE GetStdHandle(DWORD nStdHandle); + +UINT GetConsoleCP(); + +UINT GetConsoleOutputCP(); + +//}}} + +//{{{ COM functions +enum { + COINIT_APARTMENTTHREADED = 0x2, +} + +HRESULT CoInitializeEx(VOID* pvReserved, DWORD dwCoInit); +void CoUninitialize(); + +VOID* CoTaskMemAlloc(SIZE_T cb); +VOID* CoTaskMemRealloc(VOID* pv, SIZE_T cb); +void CoTaskMemFree(VOID* pv); + +enum { + BIF_RETURNONLYFSDIRS = 0x0001, + BIF_EDITBOX = 0x0010, + BIF_NEWDIALOGSTYLE = 0x0040, + BIF_USENEWUI = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX) +} + +ITEMIDLIST* SHBrowseForFolderA(BROWSEINFO* lpbi); +ITEMIDLIST* SHBrowseForFolderW(BROWSEINFO* lpbi); + +BOOL SHGetPathFromIDListA(ITEMIDLIST* pidl, LPSTR pszPath); +BOOL SHGetPathFromIDListW(ITEMIDLIST* pidl, LPWSTR pszPath); + +HRESULT SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath); +HRESULT SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath); + +HRESULT SHGetDesktopFolder(IShellFolder** ppshf); + +struct GUID { +align(1): + uint Data1; + ushort Data2; + ushort Data3; + ubyte[8] Data4; +} +alias GUID IID; +alias GUID CLSID; + +// I can't get this #!@#! COM stuff working... +interface IUnknown { +extern(Windows): + HRESULT QueryInterface(IID* riid, void** ppvObject); + ULONG AddRef(); + ULONG Release(); +} +alias void* LPBC; +interface IShellFolder : IUnknown { +extern(Windows): + HRESULT ParseDisplayName( + HWND hwnd, + LPBC pbc, + wchar* pszDisplayName, + ULONG* pchEaten, + ITEMIDLIST** ppidl, + ULONG* pdwAttributes); + + //other methods omitted +} +//}}} + +//{{{ Multimedia functions +alias uint MMRESULT; +alias HANDLE HWAVEOUT; +struct TIMECAPS { + UINT wPeriodMin; + UINT wPeriodMax; +} +DWORD timeGetTime(); +MMRESULT timeGetDevCaps(TIMECAPS* ptc, UINT cbtc); +MMRESULT timeBeginPeriod(UINT uPeriod); +MMRESULT timeEndPeriod(UINT uPeriod); + +struct WAVEHDR { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + ULONG_PTR dwUser; + DWORD dwFlags; + DWORD dwLoops; + WAVEHDR* lpNext; + ULONG_PTR reserved; +} +enum { + WHDR_DONE = 0x00000001, + WHDR_PREPARED = 0x00000002, + WHDR_BEGINLOOP = 0x00000004, + WHDR_ENDLOOP = 0x00000008, + WHDR_INQUEUE = 0x00000010 +} +alias uint MMVERSION; +struct WAVEOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR[32] szPname; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} +struct MMTIME { + UINT wType; + union _u { + DWORD ms; + DWORD sample; + DWORD cb; + DWORD ticks; + + struct _smpte { + BYTE hour; + BYTE min; + BYTE sec; + BYTE frame; + BYTE fps; + BYTE dummy; + BYTE pad[2]; + } + _smpte smpte; + + struct _midi { + DWORD songptrpos; + } + _midi midi; + } + _u u; +} +enum { + TIME_MS = 0x0001, + TIME_SAMPLES = 0x0002, + TIME_BYTES = 0x0004, + TIME_SMPTE = 0x0008, + TIME_MIDI = 0x0010, + TIME_TICKS = 0x0020 +} +struct WAVEFORMATEX { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; + +} + +MMRESULT waveOutGetVolume(HWAVEOUT hwo, DWORD* pdwVolume); +MMRESULT waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume); +MMRESULT waveOutOpen( + HWAVEOUT* phwo, + UINT uDeviceID, + WAVEFORMATEX* pwfx, + ULONG_PTR dwCallback, + ULONG_PTR dwInstance, + DWORD fdwOpen); +MMRESULT waveOutClose(HWAVEOUT hwo); +MMRESULT waveOutPrepareHeader(HWAVEOUT hwo, WAVEHDR* pwh, UINT cbwh); +MMRESULT waveOutUnprepareHeader(HWAVEOUT hwo, WAVEHDR* pwh, UINT cbwh); +MMRESULT waveOutWrite(HWAVEOUT hwo, WAVEHDR* pwh, UINT cbwh); +MMRESULT waveOutPause(HWAVEOUT hwo); +MMRESULT waveOutRestart(HWAVEOUT hwo); +MMRESULT waveOutReset(HWAVEOUT hwo); +MMRESULT waveOutBreakLoop(HWAVEOUT hwo); +MMRESULT waveOutGetPosition(HWAVEOUT hwo, MMTIME* pmmt, UINT cbmmt); +MMRESULT waveOutGetPitch(HWAVEOUT hwo, DWORD* pdwPitch); +MMRESULT waveOutSetPitch(HWAVEOUT hwo, DWORD dwPitch); +MMRESULT waveOutGetPlaybackRate(HWAVEOUT hwo, DWORD* pdwRate); +MMRESULT waveOutSetPlaybackRate(HWAVEOUT hwo, DWORD dwRate); + +//}}} + +version(UNICODE) { + alias RegisterClassExW RegisterClassEx; + alias CreateWindowExW CreateWindowEx; + alias DefWindowProcW DefWindowProc; + alias GetWindowLongW GetWindowLong; + alias SetWindowLongW SetWindowLong; + alias GetWindowLongPtrW GetWindowLongPtr; + alias SetWindowLongPtrW SetWindowLongPtr; + alias GetWindowTextW GetWindowText; + alias SetWindowTextW SetWindowText; + alias GetWindowModuleFileNameW GetWindowModuleFileName; + alias SetPropW SetProp; + alias GetPropW GetProp; + alias RemovePropW RemoveProp; + alias GetOpenFileNameW GetOpenFileName; + alias GetSaveFileNameW GetSaveFileName; + alias GetMessageW GetMessage; + alias DispatchMessageW DispatchMessage; + alias LoadImageW LoadImage; + alias GetObjectW GetObject; + alias EnumFontFamiliesExW EnumFontFamiliesEx; + alias SystemParametersInfoW SystemParametersInfo; + alias GetVersionExW GetVersionEx; + alias GetModuleHandleW GetModuleHandle; + alias LoadLibraryW LoadLibrary; + alias SHGetSpecialFolderPathW SHGetSpecialFolderPath; + alias GetConsoleTitleW GetConsoleTitle; + alias SetConsoleTitleW SetConsoleTitle; + alias ReadConsoleW ReadConsole; + alias WriteConsoleW WriteConsole; + alias SHBrowseForFolderW SHBrowseForFolder; + alias SHGetPathFromIDListW SHGetPathFromIDList; + alias SHGetFolderPathW SHGetFolderPath; + + alias LOGFONTW LOGFONT; + alias NONCLIENTMETRICSW NONCLIENTMETRICS; + alias ENUMLOGFONTEXW ENUMLOGFONTEX; + alias TEXTMETRICW TEXTMETRIC; + alias OSVERSIONINFOW OSVERSIONINFO; +} else { + alias RegisterClassExA RegisterClassEx; + alias CreateWindowExA CreateWindowEx; + alias DefWindowProcA DefWindowProc; + alias GetWindowLongA GetWindowLong; + alias SetWindowLongA SetWindowLong; + alias GetWindowLongPtrA GetWindowLongPtr; + alias SetWindowLongPtrA SetWindowLongPtr; + alias GetWindowTextA GetWindowText; + alias SetWindowTextA SetWindowText; + alias GetWindowModuleFileNameA GetWindowModuleFileName; + alias SetPropA SetProp; + alias GetPropA GetProp; + alias RemovePropA RemoveProp; + alias GetOpenFileNameA GetOpenFileName; + alias GetSaveFileNameA GetSaveFileName; + alias GetMessageA GetMessage; + alias DispatchMessageA DispatchMessage; + alias LoadImageA LoadImage; + alias EnumFontFamiliesExA EnumFontFamiliesEx; + alias SystemParametersInfoA SystemParametersInfo; + alias GetVersionExA GetVersionEx; + alias GetModuleHandleA GetModuleHandle; + alias LoadLibraryA LoadLibrary; + alias SHGetSpecialFolderPathA SHGetSpecialFolderPath; + alias GetConsoleTitleA GetConsoleTitle; + alias SetConsoleTitleA SetConsoleTitle; + alias ReadConsoleA ReadConsole; + alias WriteConsoleA WriteConsole; + alias SHBrowseForFolderA SHBrowseForFolder; + alias SHGetPathFromIDListA SHGetPathFromIDList; + alias SHGetFolderPathA SHGetFolderPath; +} + +struct POINT { + LONG x; + LONG y; +} +struct SIZE { + LONG cx; + LONG cy; +} +struct RECT { + LONG left; + LONG top; + LONG right; + LONG bottom; +} +struct BLENDFUNCTION { + BYTE BlendOp; + BYTE BlendFlags; + BYTE SourceConstantAlpha; + BYTE AlphaFormat; +} +const int LF_FACESIZE = 32; +struct LOGFONTW { + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + WCHAR[LF_FACESIZE] lfFaceName; +} +struct NONCLIENTMETRICSW { + UINT cbSize; + 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; +} +const int LF_FULLFACESIZE = 64; +struct ENUMLOGFONTEXW { + LOGFONT elfLogFont; + WCHAR[LF_FULLFACESIZE] elfFullName; + WCHAR[LF_FACESIZE] elfStyle; + WCHAR[LF_FACESIZE] elfScript; +} +struct TEXTMETRICW { + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + WCHAR tmFirstChar; + WCHAR tmLastChar; + WCHAR tmDefaultChar; + WCHAR tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} +struct RGBQUAD { + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; + BYTE rgbReserved; +} +struct BITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD[1] bmiColors; +} +struct BITMAPINFOHEADER { + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} +struct DIBSECTION { + BITMAP dsBm; + BITMAPINFOHEADER dsBmih; + DWORD[3] dsBitfields; + HANDLE dshSection; + DWORD dsOffset; +} +struct BITMAP { + LONG bmType; + LONG bmWidth; + LONG bmHeight; + LONG bmWidthBytes; + WORD bmPlanes; + WORD bmBitsPixel; + VOID* bmBits; +} +struct MSG { + HWND hWnd; + UINT message; + WPARAM wParam; + LPARAM lParam; + DWORD time; + POINT pt; +} +struct WNDCLASSEX { + UINT cbSize; + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCTSTR lpszMenuName; + LPCTSTR lpszClassName; + HICON hIconSm; +} +struct WINDOWINFO { + DWORD cbSize; + RECT rcWindow; + RECT rcClient; + DWORD dwStyle; + DWORD dwExStyle; + DWORD dwWindowStatus; + UINT cxWindowBorders; + UINT cyWindowBorders; + ATOM atomWindowType; + WORD wCreatorVersion; +} +struct PAINTSTRUCT { + HDC hdc; + BOOL fErase; + RECT rcPaint; + BOOL fRestore; + BOOL fIncUpdate; + BYTE[32] rgbReserved; +} +struct TRACKMOUSEEVENT { + DWORD cbSize; + DWORD dwFlags; + HWND hWndTrack; + DWORD dwHoverTime; +} +struct OPENFILENAME { + DWORD lStructSize; + HWND hWndOwner; + HINSTANCE hInstance; + LPCTSTR lpstrFilter; + LPTSTR lpstrCustomFilter; + DWORD nMaxCustFilter; + DWORD nFilterIndex; + LPTSTR lpstrFile; + DWORD nMaxFile; + LPTSTR lpstrFileTitle; + DWORD nMaxFileTitle; + LPCTSTR lpstrInitialDir; + LPCTSTR lpstrTitle; + DWORD Flags; + WORD nFileOffset; + WORD nFileExtension; + LPCTSTR lpstrDefExt; + LPARAM lCustData; + LPOFNHOOKPROC lpfnHook; + LPCTSTR lpTemplateName; + // if(_WIN32_WINNT >= 0x0500) + //void* pvReserved; + //DWORD dwReserved; + //DWORD FlagsEx; +} +struct SHITEMID { + USHORT cb; + BYTE[1] abID; +} +struct ITEMIDLIST { + SHITEMID mkid; +} +struct BROWSEINFO { + HWND hwndOwner; + ITEMIDLIST* pidlRoot; + LPTSTR pszDisplayName; + LPCTSTR lpszTitle; + UINT ulFlags; + BFFCALLBACK lpfn; + LPARAM lParam; + int iImage; +} +struct OVERLAPPED { + ULONG_PTR Internal; + ULONG_PTR InternalHigh; + union { + struct { + DWORD Offset; + DWORD OffsetHigh; + } + + VOID* Pointer; + } + + HANDLE hEvent; +} +struct OSVERSIONINFOW { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + WCHAR[128] szCSDVersion; +} +struct SYSTEM_INFO { + WORD wProcessorArchitecture; + WORD wReserved; + DWORD dwPageSize; + VOID* lpMinimumApplicationAddress; + VOID* lpMaximumApplicationAddress; + ULONG_PTR dwActiveProcessorMask; + DWORD dwNumberOfProcessors; + DWORD dwProcessorType; + DWORD dwAllocationGranularity; + WORD wProcessorLevel; + WORD wProcessorRevision; +} +struct CONSOLE_SCREEN_BUFFER_INFO { + COORD dwSize; + COORD dwCursorPosition; + WORD wAttributes; + SMALL_RECT srWindow; + COORD dwMaximumWindowSize; +} +struct FILETIME { + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} +struct SYSTEMTIME { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; +} +struct COORD { + SHORT X; + SHORT Y; +} +struct SMALL_RECT { + SHORT Left; + SHORT Top; + SHORT Right; + SHORT Bottom; +} +