comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:aa4efef0f0b1
1 module dynamin.c.windows;
2
3 /*
4 * A binding to at least the part of the Windows API that Dynamin uses. This
5 * binding is obviously very incomplete but does contain several functions
6 * that the standard Windows binding does not contain.
7 */
8
9 version(Windows) {
10 } else {
11 static assert(0);
12 }
13
14 version(build) { pragma(link, gdi32, comdlg32, shell32, ole32, winmm); }
15
16 extern(Windows):
17
18 version = UNICODE;
19 alias char* LPSTR;
20 alias wchar* LPWSTR;
21 alias char* LPCSTR;
22 alias wchar* LPCWSTR;
23 version(UNICODE) {
24 alias wchar TCHAR;
25 alias LPWSTR LPTSTR;
26 alias LPCWSTR LPCTSTR;
27 } else {
28 alias char TCHAR;
29 alias LPSTR LPTSTR;
30 alias LPCSTR LPCTSTR;
31 }
32
33 alias VOID* HANDLE;
34 alias HANDLE HBITMAP;
35 alias HANDLE HBRUSH;
36 alias HANDLE HICON;
37 alias HICON HCURSOR;
38 alias HANDLE HDC;
39 alias HANDLE HGDIOBJ;
40 alias HANDLE HGLOBAL;
41 alias int HFILE;
42 alias HANDLE HFONT;
43 alias HANDLE HINSTANCE;
44 alias HANDLE HKEY;
45 alias HANDLE HMENU;
46 alias HINSTANCE HMODULE;
47 alias int HRESULT;
48 alias HANDLE HRGN;
49 alias HANDLE HTHEME;
50 alias HANDLE HWND;
51
52 version(Win64) {
53 alias int HALF_PTR;
54 alias uint UHALF_PTR;
55 alias long INT_PTR;
56 alias ulong UINT_PTR;
57 alias long LONG_PTR;
58 alias ulong ULONG_PTR;
59 } else {
60 alias short HALF_PTR;
61 alias ushort UHALF_PTR;
62 alias int INT_PTR;
63 alias uint UINT_PTR;
64 alias int LONG_PTR;
65 alias uint ULONG_PTR;
66 }
67
68 alias INT_PTR function() FARPROC;
69 alias int BOOL;
70 alias ubyte BYTE;
71 alias char CHAR;
72 alias wchar WCHAR;
73 alias uint DWORD;
74 alias ulong DWORDLONG;
75 alias uint DWORD32;
76 alias ulong DWORD64;
77 alias float FLOAT;
78 alias int INT;
79 alias int INT32;
80 alias long INT64;
81 alias int LONG;
82 alias int LONG32;
83 alias long LONG64;
84 alias UINT_PTR WPARAM;
85 alias LONG_PTR LPARAM;
86 alias LONG_PTR LRESULT;
87 alias char UCHAR;
88 alias uint UINT;
89 alias uint UINT32;
90 alias ulong UINT64;
91 alias uint ULONG;
92 alias uint ULONG32;
93 alias ulong ULONG64;
94 alias short SHORT;
95 alias ushort USHORT;
96 alias void VOID;
97 alias ushort WORD;
98 alias WORD ATOM;
99 alias ULONG_PTR SIZE_T;
100 alias DWORD COLORREF;
101 alias LONG NTSTATUS;
102
103 const HRESULT S_OK = 0;
104 const HRESULT S_FALSE = 1;
105 const HRESULT NOERROR = 0;
106
107 const int MAX_PATH = 260;
108
109 alias UINT_PTR function(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) LPOFNHOOKPROC;
110 alias LRESULT function(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) WNDPROC;
111 alias int function(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) BFFCALLBACK;
112
113 public import tango.sys.win32.Macros;
114 //public import tango.sys.win32.UserGdi : LOWORD, HIWORD, RGB;
115
116 WORD MAKEWORD(BYTE a, BYTE b) { return cast(WORD)a | cast(WORD)b << 8; }
117 LONG MAKELONG(WORD a, WORD b) { return cast(WORD)a | cast(WORD)b << 16; }
118 BYTE LOBYTE(WORD w) { return cast(BYTE)(w & 0xff); }
119 BYTE HIBYTE(WORD w) { return cast(BYTE)(w >> 8); }
120 LPWSTR MAKEINTRESOURCE(int i) { return cast(LPWSTR)cast(WORD)i; }
121 BYTE GetRValue(DWORD rgb) { return LOBYTE(rgb); }
122 BYTE GetGValue(DWORD rgb) { return LOBYTE(cast(WORD)rgb >> 8); }
123 BYTE GetBValue(DWORD rgb) { return LOBYTE(rgb >> 16); }
124
125 int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
126 int MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
127
128 DWORD GetLastError();
129
130 int MultiByteToWideChar(
131 UINT CodePage,
132 DWORD dwFlags,
133 LPCSTR lpMultiByteStr,
134 int cbMultiByte,
135 LPWSTR lpWideCharStr,
136 int cchWideChar);
137
138 int WideCharToMultiByte(
139 UINT CodePage,
140 DWORD dwFlags,
141 LPCWSTR lpWideCharStr,
142 int cchWideChar,
143 LPSTR lpMultiByteStr,
144 int cbMultiByte,
145 LPCSTR lpDefaultChar,
146 BOOL* lpUsedDefaultChar);
147
148 //{{{ memory functions
149 HANDLE GetProcessHeap();
150
151 VOID* HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);
152
153 VOID* HeapReAlloc(HANDLE hHeap, DWORD dwFlags, VOID* lpMem, SIZE_T dwBytes);
154
155 BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, VOID* lpMem);
156
157 SIZE_T HeapSize(HANDLE hHeap, DWORD dwFlags, /*const*/ VOID* lpMem);
158
159 enum {
160 HEAP_ZERO_MEMORY = 0x0008,
161 HEAP_REALLOC_IN_PLACE_ONLY = 0x0010
162 }
163
164 HGLOBAL GlobalAlloc(UINT uFlags, SIZE_T dwBytes);
165
166 HGLOBAL GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes, UINT uFlags);
167
168 HGLOBAL GlobalFree(HGLOBAL hMem);
169
170 VOID* GlobalLock(HGLOBAL hMem);
171
172 BOOL GlobalUnlock(HGLOBAL hMem);
173
174 enum {
175 GMEM_FIXED = 0x0000,
176 GMEM_MOVEABLE = 0x0002,
177 GMEM_ZEROINIT = 0x0040,
178 GPTR = 0x0040,
179 GHND = 0x0042
180 }
181 //}}}
182
183 //{{{ window functions
184 enum {
185 CS_VREDRAW = 0x0001,
186 CS_HREDRAW = 0x0002,
187 CS_DBLCLKS = 0x0008,
188 CS_OWNDC = 0x0020,
189 CS_CLASSDC = 0x0040,
190 CS_PARENTDC = 0x0080,
191 CS_NOCLOSE = 0x0200,
192 CS_SAVEBITS = 0x0800,
193 CS_BYTEALIGNCLIENT = 0x1000,
194 CS_BYTEALIGNWINDOW = 0x2000,
195 CS_GLOBALCLASS = 0x4000,
196 //Windows XP required
197 CS_DROPSHADOW = 0x00020000
198
199 }
200 ATOM RegisterClassExA(/*const*/ WNDCLASSEX* lpwcx);
201 ATOM RegisterClassExW(/*const*/ WNDCLASSEX* lpwcx);
202
203 LRESULT DefWindowProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
204
205 //{{{ window styles
206 enum {
207 WS_OVERLAPPED = 0x00000000,
208 WS_MAXIMIZEBOX = 0x00010000,
209 WS_TABSTOP = 0x00010000,
210 WS_GROUP = 0x00020000,
211 WS_MINIMIZEBOX = 0x00020000,
212 WS_THICKFRAME = 0x00040000,
213 WS_SYSMENU = 0x00080000,
214 WS_HSCROLL = 0x00100000,
215 WS_VSCROLL = 0x00200000,
216 WS_DLGFRAME = 0x00400000,
217 WS_BORDER = 0x00800000,
218 WS_CAPTION = 0x00C00000,
219 WS_MAXIMIZE = 0x01000000,
220 WS_CLIPCHILDREN = 0x02000000,
221 WS_CLIPSIBLINGS = 0x04000000,
222 WS_DISABLED = 0x08000000,
223 WS_VISIBLE = 0x10000000,
224 WS_MINIMIZE = 0x20000000,
225 WS_CHILD = 0x40000000,
226 WS_POPUP = 0x80000000,
227 WS_OVERLAPPEDWINDOW = WS_OVERLAPPED |
228 WS_CAPTION |
229 WS_SYSMENU |
230 WS_THICKFRAME |
231 WS_MINIMIZEBOX |
232 WS_MAXIMIZEBOX,
233 WS_POPUPWINDOW = WS_POPUP |
234 WS_BORDER |
235 WS_SYSMENU,
236 WS_CHILDWINDOW = WS_CHILD,
237 WS_TILED = WS_OVERLAPPED,
238 WS_ICONIC = WS_MINIMIZE,
239 WS_SIZEBOX = WS_THICKFRAME,
240 WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
241 }
242 //}}}
243
244 //{{{ extended window styles
245 enum {
246 WS_EX_DLGMODALFRAME = 0x00000001,
247 WS_EX_TOPMOST = 0x00000008,
248 WS_EX_TOOLWINDOW = 0x00000080,
249 WS_EX_WINDOWEDGE = 0x00000100,
250 WS_EX_CLIENTEDGE = 0x00000200,
251 WS_EX_CONTROLPARENT = 0x00010000,
252 WS_EX_STATICEDGE = 0x00020000,
253 WS_EX_APPWINDOW = 0x00040000,
254 WS_EX_LAYERED = 0x00080000,
255 WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
256 WS_EX_COMPOSITED = 0x02000000
257 }
258 //}}}
259
260 //{{{ CreateWindowEx()
261 HWND CreateWindowExA(
262 DWORD dwExStyle,
263 LPCSTR lpClassName,
264 LPCSTR lpWindowName,
265 DWORD dwStyle,
266 int x,
267 int y,
268 int nWidth,
269 int nHeight,
270 HWND hWndParent,
271 HMENU hMenu,
272 HINSTANCE hInstance,
273 VOID* lpParam);
274 HWND CreateWindowExW(
275 DWORD dwExStyle,
276 LPCWSTR lpClassName,
277 LPCWSTR lpWindowName,
278 DWORD dwStyle,
279 int x,
280 int y,
281 int nWidth,
282 int nHeight,
283 HWND hWndParent,
284 HMENU hMenu,
285 HINSTANCE hInstance,
286 VOID* lpParam);
287 //}}}
288
289 BOOL DestroyWindow(HWND hWnd);
290
291 BOOL ClientToScreen(HWND hWnd, POINT* lpPoint);
292
293 BOOL ScreenToClient(HWND hWnd, POINT* lpPoint);
294
295 //{{{ messages
296 enum {
297 WM_NULL = 0x0000,
298 WM_CREATE = 0x0001,
299 WM_DESTROY = 0x0002,
300 WM_MOVE = 0x0003,
301 WM_SIZE = 0x0005,
302 WM_ACTIVATE = 0x0006,
303 WM_SETFOCUS = 0x0007,
304 WM_KILLFOCUS = 0x0008,
305 WM_ENABLE = 0x000A,
306 WM_SETREDRAW = 0x000B,
307 WM_SETTEXT = 0x000C,
308 WM_GETTEXT = 0x000D,
309 WM_GETTEXTLENGTH = 0x000E,
310 WM_PAINT = 0x000F,
311 WM_CLOSE = 0x0010,
312 WM_QUERYENDSESSION = 0x0011,
313 WM_QUERYOPEN = 0x0013,
314 WM_ENDSESSION = 0x0016,
315 WM_QUIT = 0x0012,
316 WM_ERASEBKGND = 0x0014,
317 WM_SYSCOLORCHANGE = 0x0015,
318 WM_SHOWWINDOW = 0x0018,
319 WM_WININICHANGE = 0x001A,
320 WM_SETTINGCHANGE = WM_WININICHANGE,
321 WM_DEVMODECHANGE = 0x001B,
322 WM_ACTIVATEAPP = 0x001C,
323 WM_FONTCHANGE = 0x001D,
324 WM_TIMECHANGE = 0x001E,
325 WM_CANCELMODE = 0x001F,
326 WM_SETCURSOR = 0x0020,
327 WM_MOUSEACTIVATE = 0x0021,
328 WM_CHILDACTIVATE = 0x0022,
329 WM_QUEUESYNC = 0x0023,
330 WM_GETMINMAXINFO = 0x0024,
331 WM_PAINTICON = 0x0026,
332 WM_ICONERASEBKGND = 0x0027,
333 WM_NEXTDLGCTL = 0x0028,
334 WM_SPOOLERSTATUS = 0x002A,
335 WM_DRAWITEM = 0x002B,
336 WM_MEASUREITEM = 0x002C,
337 WM_DELETEITEM = 0x002D,
338 WM_VKEYTOITEM = 0x002E,
339 WM_CHARTOITEM = 0x002F,
340 WM_SETFONT = 0x0030,
341 WM_GETFONT = 0x0031,
342 WM_SETHOTKEY = 0x0032,
343 WM_GETHOTKEY = 0x0033,
344 WM_QUERYDRAGICON = 0x0037,
345 WM_COMPAREITEM = 0x0039,
346 WM_GETOBJECT = 0x003D,
347 WM_COMPACTING = 0x0041,
348 WM_WINDOWPOSCHANGING = 0x0046,
349 WM_WINDOWPOSCHANGED = 0x0047,
350 WM_POWER = 0x0048,
351 WM_COPYDATA = 0x004A,
352 WM_CANCELJOURNAL = 0x004B,
353 WM_NOTIFY = 0x004E,
354 WM_INPUTLANGCHANGEREQUEST = 0x0050,
355 WM_INPUTLANGCHANGE = 0x0051,
356 WM_TCARD = 0x0052,
357 WM_HELP = 0x0053,
358 WM_USERCHANGED = 0x0054,
359 WM_NOTIFYFORMAT = 0x0055,
360 WM_CONTEXTMENU = 0x007B,
361 WM_STYLECHANGING = 0x007C,
362 WM_STYLECHANGED = 0x007D,
363 WM_DISPLAYCHANGE = 0x007E,
364 WM_GETICON = 0x007F,
365 WM_SETICON = 0x0080,
366 WM_NCCREATE = 0x0081,
367 WM_NCDESTROY = 0x0082,
368 WM_NCCALCSIZE = 0x0083,
369 WM_NCHITTEST = 0x0084,
370 WM_NCPAINT = 0x0085,
371 WM_NCACTIVATE = 0x0086,
372 WM_GETDLGCODE = 0x0087,
373 WM_SYNCPAINT = 0x0088,
374 WM_NCMOUSEMOVE = 0x00A0,
375 WM_NCLBUTTONDOWN = 0x00A1,
376 WM_NCLBUTTONUP = 0x00A2,
377 WM_NCLBUTTONDBLCLK = 0x00A3,
378 WM_NCRBUTTONDOWN = 0x00A4,
379 WM_NCRBUTTONUP = 0x00A5,
380 WM_NCRBUTTONDBLCLK = 0x00A6,
381 WM_NCMBUTTONDOWN = 0x00A7,
382 WM_NCMBUTTONUP = 0x00A8,
383 WM_NCMBUTTONDBLCLK = 0x00A9,
384 WM_NCXBUTTONDOWN = 0x00AB,
385 WM_NCXBUTTONUP = 0x00AC,
386 WM_NCXBUTTONDBLCLK = 0x00AD,
387 WM_INPUT = 0x00FF,
388 WM_KEYDOWN = 0x0100,
389 WM_KEYUP = 0x0101,
390 WM_CHAR = 0x0102,
391 WM_DEADCHAR = 0x0103,
392 WM_SYSKEYDOWN = 0x0104,
393 WM_SYSKEYUP = 0x0105,
394 WM_SYSCHAR = 0x0106,
395 WM_SYSDEADCHAR = 0x0107,
396 WM_UNICHAR = 0x0109,
397 WM_IME_STARTCOMPOSITION = 0x010D,
398 WM_IME_ENDCOMPOSITION = 0x010E,
399 WM_IME_COMPOSITION = 0x010F,
400 WM_IME_KEYLAST = 0x010F,
401 WM_INITDIALOG = 0x0110,
402 WM_COMMAND = 0x0111,
403 WM_SYSCOMMAND = 0x0112,
404 WM_TIMER = 0x0113,
405 WM_HSCROLL = 0x0114,
406 WM_VSCROLL = 0x0115,
407 WM_INITMENU = 0x0116,
408 WM_INITMENUPOPUP = 0x0117,
409 WM_MENUSELECT = 0x011F,
410 WM_MENUCHAR = 0x0120,
411 WM_ENTERIDLE = 0x0121,
412 WM_MENURBUTTONUP = 0x0122,
413 WM_MENUDRAG = 0x0123,
414 WM_MENUGETOBJECT = 0x0124,
415 WM_UNINITMENUPOPUP = 0x0125,
416 WM_MENUCOMMAND = 0x0126,
417 WM_CHANGEUISTATE = 0x0127,
418 WM_UPDATEUISTATE = 0x0128,
419 WM_QUERYUISTATE = 0x0129,
420 WM_CTLCOLORMSGBOX = 0x0132,
421 WM_CTLCOLOREDIT = 0x0133,
422 WM_CTLCOLORLISTBOX = 0x0134,
423 WM_CTLCOLORBTN = 0x0135,
424 WM_CTLCOLORDLG = 0x0136,
425 WM_CTLCOLORSCROLLBAR = 0x0137,
426 WM_CTLCOLORSTATIC = 0x0138,
427 WM_MOUSEFIRST = 0x0200,
428 WM_MOUSEMOVE = 0x0200,
429 WM_LBUTTONDOWN = 0x0201,
430 WM_LBUTTONUP = 0x0202,
431 WM_LBUTTONDBLCLK = 0x0203,
432 WM_RBUTTONDOWN = 0x0204,
433 WM_RBUTTONUP = 0x0205,
434 WM_RBUTTONDBLCLK = 0x0206,
435 WM_MBUTTONDOWN = 0x0207,
436 WM_MBUTTONUP = 0x0208,
437 WM_MBUTTONDBLCLK = 0x0209,
438 WM_MOUSEWHEEL = 0x020A,
439 WM_XBUTTONDOWN = 0x020B,
440 WM_XBUTTONUP = 0x020C,
441 WM_XBUTTONDBLCLK = 0x020D,
442 WM_PARENTNOTIFY = 0x0210,
443 WM_ENTERMENULOOP = 0x0211,
444 WM_EXITMENULOOP = 0x0212,
445 WM_NEXTMENU = 0x0213,
446 WM_SIZING = 0x0214,
447 WM_CAPTURECHANGED = 0x0215,
448 WM_MOVING = 0x0216,
449 WM_POWERBROADCAST = 0x0218,
450 WM_DEVICECHANGE = 0x0219,
451 WM_MDICREATE = 0x0220,
452 WM_MDIDESTROY = 0x0221,
453 WM_MDIACTIVATE = 0x0222,
454 WM_MDIRESTORE = 0x0223,
455 WM_MDINEXT = 0x0224,
456 WM_MDIMAXIMIZE = 0x0225,
457 WM_MDITILE = 0x0226,
458 WM_MDICASCADE = 0x0227,
459 WM_MDIICONARRANGE = 0x0228,
460 WM_MDIGETACTIVE = 0x0229,
461 WM_MDISETMENU = 0x0230,
462 WM_ENTERSIZEMOVE = 0x0231,
463 WM_EXITSIZEMOVE = 0x0232,
464 WM_DROPFILES = 0x0233,
465 WM_MDIREFRESHMENU = 0x0234,
466 WM_IME_SETCONTEXT = 0x0281,
467 WM_IME_NOTIFY = 0x0282,
468 WM_IME_CONTROL = 0x0283,
469 WM_IME_COMPOSITIONFULL = 0x0284,
470 WM_IME_SELECT = 0x0285,
471 WM_IME_CHAR = 0x0286,
472 WM_IME_REQUEST = 0x0288,
473 WM_IME_KEYDOWN = 0x0290,
474 WM_IME_KEYUP = 0x0291,
475 WM_MOUSEHOVER = 0x02A1,
476 WM_MOUSELEAVE = 0x02A3,
477 WM_NCMOUSEHOVER = 0x02A0,
478 WM_NCMOUSELEAVE = 0x02A2,
479 WM_WTSSESSION_CHANGE = 0x02B1,
480 WM_TABLET_FIRST = 0x02C0,
481 WM_TABLET_LAST = 0x02DF,
482 WM_CUT = 0x0300,
483 WM_COPY = 0x0301,
484 WM_PASTE = 0x0302,
485 WM_CLEAR = 0x0303,
486 WM_UNDO = 0x0304,
487 WM_RENDERFORMAT = 0x0305,
488 WM_RENDERALLFORMATS = 0x0306,
489 WM_DESTROYCLIPBOARD = 0x0307,
490 WM_DRAWCLIPBOARD = 0x0308,
491 WM_PAINTCLIPBOARD = 0x0309,
492 WM_VSCROLLCLIPBOARD = 0x030A,
493 WM_SIZECLIPBOARD = 0x030B,
494 WM_ASKCBFORMATNAME = 0x030C,
495 WM_CHANGECBCHAIN = 0x030D,
496 WM_HSCROLLCLIPBOARD = 0x030E,
497 WM_QUERYNEWPALETTE = 0x030F,
498 WM_PALETTEISCHANGING = 0x0310,
499 WM_PALETTECHANGED = 0x0311,
500 WM_HOTKEY = 0x0312,
501 WM_PRINT = 0x0317,
502 WM_PRINTCLIENT = 0x0318,
503 WM_APPCOMMAND = 0x0319,
504 WM_THEMECHANGED = 0x031A,
505 WM_HANDHELDFIRST = 0x0358,
506 WM_HANDHELDLAST = 0x035F,
507 WM_AFXFIRST = 0x0360,
508 WM_AFXLAST = 0x037F,
509 WM_PENWINFIRST = 0x0380,
510 WM_PENWINLAST = 0x038F,
511 WM_APP = 0x8000,
512 WM_USER = 0x0400
513 }
514 enum {
515 PBT_APMQUERYSUSPEND = 0x0000,
516 PBT_APMQUERYSTANDBY = 0x0001,
517 PBT_APMQUERYSUSPENDFAILED = 0x0002,
518 PBT_APMQUERYSTANDBYFAILED = 0x0003,
519 PBT_APMSUSPEND = 0x0004,
520 PBT_APMSTANDBY = 0x0005,
521 PBT_APMRESUMECRITICAL = 0x0006,
522 PBT_APMRESUMESUSPEND = 0x0007,
523 PBT_APMRESUMESTANDBY = 0x0008,
524 PBTF_APMRESUMEFROMFAILURE = 0x00000001,
525 PBT_APMBATTERYLOW = 0x0009,
526 PBT_APMPOWERSTATUSCHANGE = 0x000A,
527 PBT_APMOEMEVENT = 0x000B,
528 PBT_APMRESUMEAUTOMATIC = 0x0012
529 }
530 //}}}
531
532 enum {
533 MK_LBUTTON = 0x0001,
534 MK_RBUTTON = 0x0002,
535 MK_SHIFT = 0x0004,
536 MK_CONTROL = 0x0008,
537 MK_MBUTTON = 0x0010,
538 MK_XBUTTON1 = 0x0020,
539 MK_XBUTTON2 = 0x0040
540 }
541
542 enum {
543 WMSZ_LEFT = 1,
544 WMSZ_RIGHT = 2,
545 WMSZ_TOP = 3,
546 WMSZ_TOPLEFT = 4,
547 WMSZ_TOPRIGHT = 5,
548 WMSZ_BOTTOM = 6,
549 WMSZ_BOTTOMLEFT = 7,
550 WMSZ_BOTTOMRIGHT = 8
551 }
552
553 enum {
554 SIZE_RESTORED = 0,
555 SIZE_MINIMIZED = 1,
556 SIZE_MAXIMIZED = 2,
557 SIZE_MAXSHOW = 3,
558 SIZE_MAXHIDE = 4
559 }
560
561 enum {
562 SW_HIDE = 0,
563 SW_SHOWNORMAL = 1,
564 SW_NORMAL = 1,
565 SW_SHOWMINIMIZED = 2,
566 SW_SHOWMAXIMIZED = 3,
567 SW_MAXIMIZE = 3,
568 SW_SHOWNOACTIVATE = 4,
569 SW_SHOW = 5,
570 SW_MINIMIZE = 6,
571 SW_SHOWMINNOACTIVE = 7,
572 SW_SHOWNA = 8,
573 SW_RESTORE = 9,
574 SW_SHOWDEFAULT = 10,
575 SW_FORCEMINIMIZE = 11,
576 SW_MAX = 11
577 }
578
579 enum {
580 GWL_STYLE = -16,
581 GWL_EXSTYLE = -20
582 }
583
584 DWORD GetClassLongA(HWND hWnd, int nIndex);
585 DWORD GetClassLongW(HWND hWnd, int nIndex);
586
587 DWORD SetClassLongA(HWND hWnd, int nIndex, LONG dwNewLong);
588 DWORD SetClassLongW(HWND hWnd, int nIndex, LONG dwNewLong);
589
590 ULONG_PTR GetClassLongPtrA(HWND hWnd, int nIndex);
591 ULONG_PTR GetClassLongPtrW(HWND hWnd, int nIndex);
592
593 ULONG_PTR SetClassLongPtrA(HWND hWnd, int nIndex, LONG_PTR dwNewLong);
594 ULONG_PTR SetClassLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong);
595
596 LONG GetWindowLongA(HWND hWnd, int nIndex);
597 LONG GetWindowLongW(HWND hWnd, int nIndex);
598
599 LONG SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong);
600 LONG SetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong);
601
602 LONG_PTR GetWindowLongPtrA(HWND hWnd, int nIndex);
603 LONG_PTR GetWindowLongPtrW(HWND hWnd, int nIndex);
604
605 LONG_PTR SetWindowLongPtrA(HWND hWnd, int nIndex, LONG_PTR dwNewLong);
606 LONG_PTR SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong);
607
608 BOOL ShowWindow(HWND hWnd, int nCmdShow);
609
610 //Windows 98 required
611 BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags);
612
613 BOOL IsWindowVisible(HWND hWnd);
614
615 BOOL IsWindow(HWND hWnd);
616
617 BOOL GetWindowRect(HWND hWnd, RECT* lpRect);
618
619 BOOL GetClientRect(HWND hWnd, RECT* lpRect);
620
621 enum {
622 SWP_NOSIZE = 0x0001,
623 SWP_NOMOVE = 0x0002,
624 SWP_NOZORDER = 0x0004,
625 SWP_NOACTIVATE = 0x0010,
626 SWP_FRAMECHANGED = 0x0020
627 }
628
629 BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags);
630
631 BOOL MoveWindow(HWND hWnd, int x, int y, int nWidth, int nHeight, BOOL bRepaint);
632
633 int SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw);
634
635 enum {
636 ULW_COLORKEY = 0x00000001,
637 ULW_ALPHA = 0x00000002,
638 ULW_OPAQUE = 0x00000004
639 }
640
641 BOOL UpdateLayeredWindow(
642 HWND hWnd,
643 HDC hdcDst,
644 POINT* pptDst,
645 SIZE* psize,
646 HDC hdcSrc,
647 POINT* pptSrc,
648 COLORREF crKey,
649 BLENDFUNCTION* pblend,
650 DWORD dwFlags);
651
652 HWND SetParent(HWND hWndChild, HWND hWndNewParent);
653
654 HWND GetParent(HWND hWnd);
655
656 BOOL IsChild(HWND hWndParent, HWND hWnd);
657
658 BOOL EnableWindow(HWND hWnd, BOOL bEnable);
659
660 enum {
661 GW_HWNDFIRST = 0,
662 GW_HWNDLAST = 1,
663 GW_HWNDNEXT = 2,
664 GW_HWNDPREV = 3,
665 GW_OWNER = 4,
666 GW_CHILD = 5
667 }
668
669 HWND GetWindow(HWND hWnd, UINT uCmd);
670
671 BOOL GetWindowInfo(HWND hwnd, WINDOWINFO* pwi);
672
673 int GetWindowTextLength(HWND hWnd);
674
675 int GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount);
676 int GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount);
677
678 BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString);
679 BOOL SetWindowTextW(HWND hWnd, LPCWSTR lpString);
680
681 UINT GetWindowModuleFileNameA(HWND hWnd, LPSTR lpszFileName, UINT cchFileNameMax);
682 UINT GetWindowModuleFileNameW(HWND hWnd, LPWSTR lpszFileName, UINT cchFileNameMax);
683
684 BOOL SetPropA(HWND hWnd, LPCSTR lpString, HANDLE hData);
685 BOOL SetPropW(HWND hWnd, LPCWSTR lpString, HANDLE hData);
686
687 HANDLE GetPropA(HWND hWnd, LPCSTR lpString);
688 HANDLE GetPropW(HWND hWnd, LPCWSTR lpString);
689
690 HANDLE RemovePropA(HWND hWnd, LPCSTR lpString);
691 HANDLE RemovePropW(HWND hWnd, LPCWSTR lpString);
692
693 DWORD CommDlgExtendedError();
694 enum { FNERR_BUFFERTOOSMALL = 0x3003 }
695
696 enum {
697 OFN_READONLY = 0x00000001,
698 OFN_OVERWRITEPROMPT = 0x00000002,
699 OFN_HIDEREADONLY = 0x00000004,
700 OFN_NOCHANGEDIR = 0x00000008,
701 OFN_SHOWHELP = 0x00000010,
702 OFN_ENABLEHOOK = 0x00000020,
703 OFN_ENABLETEMPLATE = 0x00000040,
704 OFN_ENABLETEMPLATEHANDLE = 0x00000080,
705 OFN_NOVALIDATE = 0x00000100,
706 OFN_ALLOWMULTISELECT = 0x00000200,
707 OFN_EXTENSIONDIFFERENT = 0x00000400,
708 OFN_PATHMUSTEXIST = 0x00000800,
709 OFN_FILEMUSTEXIST = 0x00001000,
710 OFN_CREATEPROMPT = 0x00002000,
711 OFN_SHAREAWARE = 0x00004000,
712 OFN_NOREADONLYRETURN = 0x00008000,
713 OFN_NOTESTFILECREATE = 0x00010000,
714 OFN_NONETWORKBUTTON = 0x00020000,
715 OFN_NOLONGNAMES = 0x00040000,
716 OFN_EXPLORER = 0x00080000,
717 OFN_NODEREFERENCELINKS = 0x00100000,
718 OFN_LONGNAMES = 0x00200000,
719 OFN_ENABLEINCLUDENOTIFY = 0x00400000,
720 OFN_ENABLESIZING = 0x00800000,
721 OFN_DONTADDTORECENT = 0x02000000,
722 OFN_FORCESHOWHIDDEN = 0x10000000
723 }
724
725 BOOL GetOpenFileNameA(OPENFILENAME* lpofn);
726 BOOL GetOpenFileNameW(OPENFILENAME* lpofn);
727
728 BOOL GetSaveFileNameA(OPENFILENAME* lpofn);
729 BOOL GetSaveFileNameW(OPENFILENAME* lpofn);
730
731 //}}}
732
733 //{{{ painting functions
734 BOOL InvalidateRect(HWND hWnd, RECT* lpRect, BOOL bErase);
735
736 BOOL ValidateRect(HWND hWnd, RECT* lpRect);
737
738 BOOL UpdateWindow(HWND hWnd);
739
740 HWND WindowFromDC(HDC hdc);
741
742 HDC BeginPaint(HWND hWnd, PAINTSTRUCT* lpPaint);
743
744 BOOL EndPaint(HWND hWnd, PAINTSTRUCT* lpPaint);
745 //}}}
746
747 //{{{ device context functions
748 HDC GetDC(HWND hWnd);
749
750 int ReleaseDC(HWND hWnd, HDC hDC);
751
752 HDC CreateCompatibleDC(HDC hdc);
753
754 BOOL DeleteDC(HDC hdc);
755
756 HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hObject);
757
758 BOOL DeleteObject(HGDIOBJ hObject);
759
760 int GetObjectW(HANDLE h, int c, VOID* pv);
761
762 HBITMAP CreateCompatibleBitmap(HDC hdc, int cx, int cy);
763
764 HBITMAP CreateDIBSection(
765 HDC hdc,
766 BITMAPINFO* lpbmi,
767 UINT usage,
768 VOID** ppvBits,
769 HANDLE hSection,
770 DWORD offset);
771
772 int GetDIBits(HDC hdc, HBITMAP hbm, UINT start, UINT cLines, VOID* lpvBits, BITMAPINFO* lpbmi, UINT usage);
773
774 enum {
775 DIB_RGB_COLORS = 0
776 }
777 enum {
778 BI_RGB = 0
779 }
780
781 enum {
782 SRCCOPY = 0x00CC0020
783 }
784
785 BOOL BitBlt(HDC hdc, int x, int y, int cx, int cy, HDC hdcSrc, int x1, int y1, DWORD rop);
786
787 enum {
788 AC_SRC_OVER = 0x00,
789 AC_SRC_ALPHA = 0x01
790 }
791
792 int EnumFontFamiliesExA(
793 HDC hdc, LOGFONT* lpLogfont,
794 FONTENUMPROCA lpProc, LPARAM lParam, DWORD dwFlags);
795 int EnumFontFamiliesExW(
796 HDC hdc, LOGFONT* lpLogfont,
797 FONTENUMPROCW lpProc, LPARAM lParam, DWORD dwFlags);
798
799 alias int function(ENUMLOGFONTEX*, TEXTMETRIC*, DWORD, LPARAM) FONTENUMPROCA;
800 alias int function(ENUMLOGFONTEX*, TEXTMETRIC*, DWORD, LPARAM) FONTENUMPROCW;
801 //}}}
802
803 //{{{ message functions
804 BOOL GetMessageA(MSG* lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
805 BOOL GetMessageW(MSG* lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
806
807 BOOL TranslateMessage(MSG* lpMsg);
808
809 LRESULT DispatchMessageA(MSG* lpMsg);
810 LRESULT DispatchMessageW(MSG* lpMsg);
811
812 BOOL PostMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
813
814 void PostQuitMessage(int nExitCode);
815
816 LRESULT SendMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
817 //}}}
818
819 //{{{ clipboard functions
820 enum {
821 CF_TEXT = 1,
822 CF_BITMAP = 2,
823 CF_METAFILEPICT = 3,
824 CF_SYLK = 4,
825 CF_DIF = 5,
826 CF_TIFF = 6,
827 CF_OEMTEXT = 7,
828 CF_DIB = 8,
829 CF_PALETTE = 9,
830 CF_PENDATA = 10,
831 CF_RIFF = 11,
832 CF_WAVE = 12,
833 CF_UNICODETEXT = 13,
834 CF_ENHMETAFILE = 14,
835 CF_HDROP = 15,
836 CF_LOCALE = 16
837 }
838
839 BOOL OpenClipboard(HWND hWndNewOwner);
840
841 BOOL CloseClipboard();
842
843 BOOL IsClipboardFormatAvailable(UINT format);
844
845 HANDLE GetClipboardData(UINT uFormat);
846
847 HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
848
849 BOOL EmptyClipboard();
850 //}}}
851
852 //{{{ mouse functions
853 enum {
854 XBUTTON1 = 0x0001,
855 XBUTTON2 = 0x0002
856 }
857
858 HWND SetCapture(HWND hWnd);
859
860 BOOL ReleaseCapture();
861
862 enum {
863 TME_HOVER = 0x00000001,
864 TME_LEAVE = 0x00000002,
865 TME_NONCLIENT = 0x00000010
866 }
867 BOOL TrackMouseEvent(TRACKMOUSEEVENT* lpEventTrack);
868
869 HCURSOR SetCursor(HCURSOR hCursor);
870
871 BOOL GetCursorPos(POINT* lpPoint);
872 //}}}
873
874 //{{{ keyboard functions
875 //{{{ keys
876 enum {
877 VK_LBUTTON = 0x01,
878 VK_RBUTTON = 0x02,
879 VK_CANCEL = 0x03,
880 VK_MBUTTON = 0x04,
881 VK_XBUTTON1 = 0x05,
882 VK_XBUTTON2 = 0x06,
883 VK_BACK = 0x08,
884 VK_TAB = 0x09,
885 VK_CLEAR = 0x0C,
886 VK_RETURN = 0x0D,
887 VK_SHIFT = 0x10,
888 VK_CONTROL = 0x11,
889 VK_MENU = 0x12,
890 VK_PAUSE = 0x13,
891 VK_CAPITAL = 0x14,
892 VK_KANA = 0x15,
893 VK_HANGEUL = 0x15,
894 VK_HANGUL = 0x15,
895 VK_JUNJA = 0x17,
896 VK_FINAL = 0x18,
897 VK_HANJA = 0x19,
898 VK_KANJI = 0x19,
899 VK_ESCAPE = 0x1B,
900 VK_CONVERT = 0x1C,
901 VK_NONCONVERT = 0x1D,
902 VK_ACCEPT = 0x1E,
903 VK_MODECHANGE = 0x1F,
904 VK_SPACE = 0x20,
905 VK_PRIOR = 0x21,
906 VK_NEXT = 0x22,
907 VK_END = 0x23,
908 VK_HOME = 0x24,
909 VK_LEFT = 0x25,
910 VK_UP = 0x26,
911 VK_RIGHT = 0x27,
912 VK_DOWN = 0x28,
913 VK_SELECT = 0x29,
914 VK_PRINT = 0x2A,
915 VK_EXECUTE = 0x2B,
916 VK_SNAPSHOT = 0x2C,
917 VK_INSERT = 0x2D,
918 VK_DELETE = 0x2E,
919 VK_HELP = 0x2F,
920 VK_LWIN = 0x5B,
921 VK_RWIN = 0x5C,
922 VK_APPS = 0x5D,
923 VK_SLEEP = 0x5F,
924 VK_NUMPAD0 = 0x60,
925 VK_NUMPAD1 = 0x61,
926 VK_NUMPAD2 = 0x62,
927 VK_NUMPAD3 = 0x63,
928 VK_NUMPAD4 = 0x64,
929 VK_NUMPAD5 = 0x65,
930 VK_NUMPAD6 = 0x66,
931 VK_NUMPAD7 = 0x67,
932 VK_NUMPAD8 = 0x68,
933 VK_NUMPAD9 = 0x69,
934 VK_MULTIPLY = 0x6A,
935 VK_ADD = 0x6B,
936 VK_SEPARATOR = 0x6C,
937 VK_SUBTRACT = 0x6D,
938 VK_DECIMAL = 0x6E,
939 VK_DIVIDE = 0x6F,
940 VK_F1 = 0x70,
941 VK_F2 = 0x71,
942 VK_F3 = 0x72,
943 VK_F4 = 0x73,
944 VK_F5 = 0x74,
945 VK_F6 = 0x75,
946 VK_F7 = 0x76,
947 VK_F8 = 0x77,
948 VK_F9 = 0x78,
949 VK_F10 = 0x79,
950 VK_F11 = 0x7A,
951 VK_F12 = 0x7B,
952 VK_F13 = 0x7C,
953 VK_F14 = 0x7D,
954 VK_F15 = 0x7E,
955 VK_F16 = 0x7F,
956 VK_F17 = 0x80,
957 VK_F18 = 0x81,
958 VK_F19 = 0x82,
959 VK_F20 = 0x83,
960 VK_F21 = 0x84,
961 VK_F22 = 0x85,
962 VK_F23 = 0x86,
963 VK_F24 = 0x87,
964 VK_NUMLOCK = 0x90,
965 VK_SCROLL = 0x91,
966 VK_OEM_NEC_EQUAL = 0x92,
967 VK_OEM_FJ_JISHO = 0x92,
968 VK_OEM_FJ_MASSHOU = 0x93,
969 VK_OEM_FJ_TOUROKU = 0x94,
970 VK_OEM_FJ_LOYA = 0x95,
971 VK_OEM_FJ_ROYA = 0x96,
972 VK_LSHIFT = 0xA0,
973 VK_RSHIFT = 0xA1,
974 VK_LCONTROL = 0xA2,
975 VK_RCONTROL = 0xA3,
976 VK_LMENU = 0xA4,
977 VK_RMENU = 0xA5,
978 VK_BROWSER_BACK = 0xA6,
979 VK_BROWSER_FORWARD = 0xA7,
980 VK_BROWSER_REFRESH = 0xA8,
981 VK_BROWSER_STOP = 0xA9,
982 VK_BROWSER_SEARCH = 0xAA,
983 VK_BROWSER_FAVORITES = 0xAB,
984 VK_BROWSER_HOME = 0xAC,
985 VK_VOLUME_MUTE = 0xAD,
986 VK_VOLUME_DOWN = 0xAE,
987 VK_VOLUME_UP = 0xAF,
988 VK_MEDIA_NEXT_TRACK = 0xB0,
989 VK_MEDIA_PREV_TRACK = 0xB1,
990 VK_MEDIA_STOP = 0xB2,
991 VK_MEDIA_PLAY_PAUSE = 0xB3,
992 VK_LAUNCH_MAIL = 0xB4,
993 VK_LAUNCH_MEDIA_SELECT = 0xB5,
994 VK_LAUNCH_APP1 = 0xB6,
995 VK_LAUNCH_APP2 = 0xB7,
996 VK_OEM_1 = 0xBA,
997 VK_OEM_PLUS = 0xBB,
998 VK_OEM_COMMA = 0xBC,
999 VK_OEM_MINUS = 0xBD,
1000 VK_OEM_PERIOD = 0xBE,
1001 VK_OEM_2 = 0xBF,
1002 VK_OEM_3 = 0xC0,
1003 VK_OEM_4 = 0xDB,
1004 VK_OEM_5 = 0xDC,
1005 VK_OEM_6 = 0xDD,
1006 VK_OEM_7 = 0xDE,
1007 VK_OEM_8 = 0xDF,
1008 VK_OEM_AX = 0xE1,
1009 VK_OEM_102 = 0xE2,
1010 VK_ICO_HELP = 0xE3,
1011 VK_ICO_00 = 0xE4,
1012 VK_PROCESSKEY = 0xE5,
1013 VK_ICO_CLEAR = 0xE6,
1014 VK_PACKET = 0xE7,
1015 VK_OEM_RESET = 0xE9,
1016 VK_OEM_JUMP = 0xEA,
1017 VK_OEM_PA1 = 0xEB,
1018 VK_OEM_PA2 = 0xEC,
1019 VK_OEM_PA3 = 0xED,
1020 VK_OEM_WSCTRL = 0xEE,
1021 VK_OEM_CUSEL = 0xEF,
1022 VK_OEM_ATTN = 0xF0,
1023 VK_OEM_FINISH = 0xF1,
1024 VK_OEM_COPY = 0xF2,
1025 VK_OEM_AUTO = 0xF3,
1026 VK_OEM_ENLW = 0xF4,
1027 VK_OEM_BACKTAB = 0xF5,
1028 VK_ATTN = 0xF6,
1029 VK_CRSEL = 0xF7,
1030 VK_EXSEL = 0xF8,
1031 VK_EREOF = 0xF9,
1032 VK_PLAY = 0xFA,
1033 VK_ZOOM = 0xFB,
1034 VK_NONAME = 0xFC,
1035 VK_PA1 = 0xFD,
1036 VK_OEM_CLEAR = 0xFE
1037 }
1038 //}}}
1039
1040 SHORT GetKeyState(int nVirtKey);
1041 //}}}
1042
1043 //{{{ system functions
1044 //const LPTSTR IDC_ARROW = cast(LPTSTR)32512u;
1045 //const LPTSTR IDC_IBEAM = cast(LPTSTR)32513u;
1046 //const LPTSTR IDC_WAIT = cast(LPTSTR)32514u;
1047 //const LPTSTR IDC_CROSS = cast(LPTSTR)32515u;
1048 //const LPTSTR IDC_UPARROW = cast(LPTSTR)32516u;
1049 //const LPTSTR IDC_SIZE = cast(LPTSTR)32640u;
1050 //const LPTSTR IDC_ICON = cast(LPTSTR)32641u;
1051 //const LPTSTR IDC_SIZENWSE = cast(LPTSTR)32642u;
1052 //const LPTSTR IDC_SIZENESW = cast(LPTSTR)32643u;
1053 //const LPTSTR IDC_SIZEWE = cast(LPTSTR)32644u;
1054 //const LPTSTR IDC_SIZENS = cast(LPTSTR)32645u;
1055 //const LPTSTR IDC_SIZEALL = cast(LPTSTR)32646u;
1056 //const LPTSTR IDC_NO = cast(LPTSTR)32648u;
1057 //const LPTSTR IDC_HAND = cast(LPTSTR)32649u;
1058 //const LPTSTR IDC_APPSTARTING = cast(LPTSTR)32650u;
1059 //const LPTSTR IDC_HELP = cast(LPTSTR)32651u;
1060
1061 //const LPTSTR IDI_APPLICATION = cast(LPTSTR)32512;
1062 //const LPTSTR IDI_HAND = cast(LPTSTR)32513;
1063 //const LPTSTR IDI_QUESTION = cast(LPTSTR)32514;
1064 //const LPTSTR IDI_EXCLAMATION = cast(LPTSTR)32515;
1065 //const LPTSTR IDI_ASTERISK = cast(LPTSTR)32516;
1066 //const LPTSTR IDI_WINLOGO = cast(LPTSTR)32517;
1067 //const LPTSTR IDI_WARNING = IDI_EXCLAMATION;
1068 //const LPTSTR IDI_ERROR = IDI_HAND;
1069 //const LPTSTR IDI_INFORMATION = IDI_ASTERISK;
1070
1071 enum {
1072 OIC_SAMPLE = 32512,
1073 OIC_HAND = 32513,
1074 OIC_QUES = 32514,
1075 OIC_BANG = 32515,
1076 OIC_NOTE = 32516,
1077 OIC_WINLOGO = 32517,
1078 OIC_WARNING = OIC_BANG,
1079 OIC_ERROR = OIC_HAND,
1080 OIC_INFORMATION = OIC_NOTE
1081 }
1082
1083 enum {
1084 OCR_NORMAL = 32512,
1085 OCR_IBEAM = 32513,
1086 OCR_WAIT = 32514,
1087 OCR_CROSS = 32515,
1088 OCR_UP = 32516,
1089 OCR_SIZENWSE = 32642,
1090 OCR_SIZENESW = 32643,
1091 OCR_SIZEWE = 32644,
1092 OCR_SIZENS = 32645,
1093 OCR_SIZEALL = 32646,
1094 OCR_NO = 32648,
1095 OCR_HAND = 32649,
1096 OCR_APPSTARTING = 32650
1097 }
1098
1099 enum {
1100 IMAGE_BITMAP = 0,
1101 IMAGE_ICON = 1,
1102 IMAGE_CURSOR = 2
1103 }
1104
1105 enum {
1106 LR_DEFAULTCOLOR = 0x0000,
1107 LR_MONOCHROME = 0x0001,
1108 LR_COLOR = 0x0002,
1109 LR_COPYRETURNORG = 0x0004,
1110 LR_COPYDELETEORG = 0x0008,
1111 LR_LOADFROMFILE = 0x0010,
1112 LR_LOADTRANSPARENT = 0x0020,
1113 LR_DEFAULTSIZE = 0x0040,
1114 LR_VGACOLOR = 0x0080,
1115 LR_LOADMAP3DCOLORS = 0x1000,
1116 LR_CREATEDIBSECTION = 0x2000,
1117 LR_COPYFROMRESOURCE = 0x4000,
1118 LR_SHARED = 0x8000
1119 }
1120
1121 HANDLE LoadImageA(
1122 HINSTANCE hInst,
1123 LPCSTR name,
1124 UINT type,
1125 int cx,
1126 int cy,
1127 UINT fuLoad);
1128 HANDLE LoadImageW(
1129 HINSTANCE hInst,
1130 LPCWSTR name,
1131 UINT type,
1132 int cx,
1133 int cy,
1134 UINT fuLoad);
1135
1136 HICON CreateIconFromResource(
1137 BYTE* presbits,
1138 DWORD dwResSize,
1139 BOOL fIcon,
1140 DWORD dwVer);
1141
1142 enum {
1143 SPI_GETNONCLIENTMETRICS = 0x0029,
1144 SPI_GETWORKAREA = 0x0030,
1145 SPI_GETWHEELSCROLLLINES = 0x0068
1146 }
1147
1148 BOOL SystemParametersInfoA(UINT uiAction, UINT uiParam, VOID* pvParam, UINT fWinIni);
1149 BOOL SystemParametersInfoW(UINT uiAction, UINT uiParam, VOID* pvParam, UINT fWinIni);
1150
1151 enum {
1152 COLOR_SCROLLBAR = 0,
1153 COLOR_BACKGROUND = 1,
1154 COLOR_ACTIVECAPTION = 2,
1155 COLOR_INACTIVECAPTION = 3,
1156 COLOR_MENU = 4,
1157 COLOR_WINDOW = 5,
1158 COLOR_WINDOWFRAME = 6,
1159 COLOR_MENUTEXT = 7,
1160 COLOR_WINDOWTEXT = 8,
1161 COLOR_CAPTIONTEXT = 9,
1162 COLOR_ACTIVEBORDER = 10,
1163 COLOR_INACTIVEBORDER = 11,
1164 COLOR_APPWORKSPACE = 12,
1165 COLOR_HIGHLIGHT = 13,
1166 COLOR_HIGHLIGHTTEXT = 14,
1167 COLOR_BTNFACE = 15,
1168 COLOR_BTNSHADOW = 16,
1169 COLOR_GRAYTEXT = 17,
1170 COLOR_BTNTEXT = 18,
1171 COLOR_INACTIVECAPTIONTEXT = 19,
1172 COLOR_BTNHIGHLIGHT = 20,
1173
1174 COLOR_3DDKSHADOW = 21,
1175 COLOR_3DLIGHT = 22,
1176 COLOR_INFOTEXT = 23,
1177 COLOR_INFOBK = 24,
1178
1179 COLOR_HOTLIGHT = 26,
1180 COLOR_GRADIENTACTIVECAPTION = 27,
1181 COLOR_GRADIENTINACTIVECAPTION = 28,
1182 COLOR_MENUHILIGHT = 29,
1183 COLOR_MENUBAR = 30,
1184
1185 COLOR_DESKTOP = COLOR_BACKGROUND,
1186 COLOR_3DFACE = COLOR_BTNFACE,
1187 COLOR_3DSHADOW = COLOR_BTNSHADOW,
1188 COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT,
1189 COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT,
1190 COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT
1191 }
1192
1193 DWORD GetSysColor(int nIndex);
1194
1195 enum {
1196 SM_CXSCREEN = 0,
1197 SM_CYSCREEN = 1,
1198 SM_CXVSCROLL = 2,
1199 SM_CYHSCROLL = 3,
1200 SM_CYCAPTION = 4,
1201 SM_CXBORDER = 5,
1202 SM_CYBORDER = 6,
1203 SM_CXDLGFRAME = 7,
1204 SM_CYDLGFRAME = 8,
1205 SM_CYVTHUMB = 9,
1206 SM_CXHTHUMB = 10,
1207 SM_CXICON = 11,
1208 SM_CYICON = 12,
1209 SM_CXCURSOR = 13,
1210 SM_CYCURSOR = 14,
1211 SM_CYMENU = 15,
1212 SM_CXFULLSCREEN = 16,
1213 SM_CYFULLSCREEN = 17,
1214 SM_CYKANJIWINDOW = 18,
1215 SM_MOUSEPRESENT = 19,
1216 SM_CYVSCROLL = 20,
1217 SM_CXHSCROLL = 21,
1218 SM_DEBUG = 22,
1219 SM_SWAPBUTTON = 23,
1220 SM_RESERVED1 = 24,
1221 SM_RESERVED2 = 25,
1222 SM_RESERVED3 = 26,
1223 SM_RESERVED4 = 27,
1224 SM_CXMIN = 28,
1225 SM_CYMIN = 29,
1226 SM_CXSIZE = 30,
1227 SM_CYSIZE = 31,
1228 SM_CXFRAME = 32,
1229 SM_CYFRAME = 33,
1230 SM_CXMINTRACK = 34,
1231 SM_CYMINTRACK = 35,
1232 SM_CXDOUBLECLK = 36,
1233 SM_CYDOUBLECLK = 37,
1234 SM_CXICONSPACING = 38,
1235 SM_CYICONSPACING = 39,
1236 SM_MENUDROPALIGNMENT = 40,
1237 SM_PENWINDOWS = 41,
1238 SM_DBCSENABLED = 42,
1239 SM_CMOUSEBUTTONS = 43,
1240 SM_CXFIXEDFRAME = SM_CXDLGFRAME,
1241 SM_CYFIXEDFRAME = SM_CYDLGFRAME,
1242 SM_CXSIZEFRAME = SM_CXFRAME,
1243 SM_CYSIZEFRAME = SM_CYFRAME,
1244 SM_SECURE = 44,
1245 SM_CXEDGE = 45,
1246 SM_CYEDGE = 46,
1247 SM_CXMINSPACING = 47,
1248 SM_CYMINSPACING = 48,
1249 SM_CXSMICON = 49,
1250 SM_CYSMICON = 50,
1251 SM_CYSMCAPTION = 51,
1252 SM_CXSMSIZE = 52,
1253 SM_CYSMSIZE = 53,
1254 SM_CXMENUSIZE = 54,
1255 SM_CYMENUSIZE = 55,
1256 SM_ARRANGE = 56,
1257 SM_CXMINIMIZED = 57,
1258 SM_CYMINIMIZED = 58,
1259 SM_CXMAXTRACK = 59,
1260 SM_CYMAXTRACK = 60,
1261 SM_CXMAXIMIZED = 61,
1262 SM_CYMAXIMIZED = 62,
1263 SM_NETWORK = 63,
1264 SM_CLEANBOOT = 67,
1265 SM_CXDRAG = 68,
1266 SM_CYDRAG = 69,
1267 SM_SHOWSOUNDS = 70,
1268 SM_CXMENUCHECK = 71,
1269 SM_CYMENUCHECK = 72,
1270 SM_SLOWMACHINE = 73,
1271 SM_MIDEASTENABLED = 74,
1272 SM_MOUSEWHEELPRESENT = 75,
1273 SM_XVIRTUALSCREEN = 76,
1274 SM_YVIRTUALSCREEN = 77,
1275 SM_CXVIRTUALSCREEN = 78,
1276 SM_CYVIRTUALSCREEN = 79,
1277 SM_CMONITORS = 80,
1278 SM_SAMEDISPLAYFORMAT = 81,
1279 SM_IMMENABLED = 82,
1280 SM_CXFOCUSBORDER = 83,
1281 SM_CYFOCUSBORDER = 84,
1282 SM_TABLETPC = 86,
1283 SM_MEDIACENTER = 87,
1284 SM_STARTER = 88,
1285 SM_SERVERR2 = 89
1286 }
1287
1288 int GetSystemMetrics(int nIndex);
1289
1290 VOID GetSystemInfo(SYSTEM_INFO* lpSystemInfo);
1291
1292 BOOL GetVersionExA(OSVERSIONINFO* lpVersionInformation);
1293 BOOL GetVersionExW(OSVERSIONINFO* lpVersionInformation);
1294
1295 HMODULE GetModuleHandleA(LPCSTR lpModuleName);
1296 HMODULE GetModuleHandleW(LPCWSTR lpModuleName);
1297
1298 HMODULE LoadLibraryA(LPCSTR lpLibFileName);
1299 HMODULE LoadLibraryW(LPCWSTR lpLibFileName);
1300
1301 FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
1302
1303 //Requires Internet Explorer 4.0 (but will work on Windows 95 with IE 4)
1304 BOOL SHGetSpecialFolderPathA(HWND hWndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
1305 BOOL SHGetSpecialFolderPathW(HWND hWndOwner, LPWSTR lpszPath, int nFolder, BOOL fCreate);
1306
1307 BOOL QueryPerformanceFrequency(ulong* lpFrequency);
1308
1309 BOOL QueryPerformanceCounter(ulong* lpPerformanceCount);
1310
1311 VOID GetSystemTimeAsFileTime(FILETIME* lpSystemTimeAsFileTime);
1312
1313 BOOL SystemTimeToFileTime(SYSTEMTIME* lpSystemTime, FILETIME* lpFileTime);
1314
1315 HANDLE GetCurrentThread();
1316
1317 VOID Sleep(DWORD dwMilliseconds);
1318
1319 BOOL GetProcessAffinityMask(
1320 HANDLE hProcess,
1321 ULONG_PTR* lpProcessAffinityMask,
1322 ULONG_PTR* lpSystemAffinityMask);
1323
1324 ULONG_PTR SetThreadAffinityMask(HANDLE hThread, ULONG_PTR dwThreadAffinityMask);
1325 //}}}
1326
1327 //{{{ file functions
1328
1329 BOOL GetFileSizeEx(HANDLE hFile, long* lpFileSize);
1330
1331 BOOL ReadFile(
1332 HANDLE hFile,
1333 VOID* lpBuffer,
1334 DWORD nNumberOfBytesToRead,
1335 DWORD* lpNumberOfBytesRead,
1336 OVERLAPPED* lpOverlapped);
1337
1338 BOOL WriteFile(
1339 HANDLE hFile,
1340 VOID* lpBuffer,
1341 DWORD nNumberOfBytesToWrite,
1342 DWORD* lpNumberOfBytesWritten,
1343 OVERLAPPED* lpOverlapped);
1344 //}}}
1345
1346 //{{{ console functions
1347 BOOL AllocConsole();
1348
1349 BOOL FreeConsole();
1350
1351 BOOL GetConsoleMode(HANDLE hConsoleHandle, DWORD* lpMode);
1352
1353 BOOL SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode);
1354
1355 DWORD GetConsoleTitleA(LPSTR lpConsoleTitle, DWORD nSize);
1356 DWORD GetConsoleTitleW(LPWSTR lpConsoleTitle, DWORD nSize);
1357
1358 BOOL SetConsoleTitleA(LPCSTR lpConsoleTitle);
1359 BOOL SetConsoleTitleW(LPCWSTR lpConsoleTitle);
1360
1361 BOOL ReadConsoleA(
1362 HANDLE hConsoleInput,
1363 LPSTR lpBuffer,
1364 DWORD nNumberOfCharsToRead,
1365 DWORD* lpNumberOfCharsRead,
1366 VOID* lpReserved);
1367 BOOL ReadConsoleW(
1368 HANDLE hConsoleInput,
1369 LPWSTR lpBuffer,
1370 DWORD nNumberOfCharsToRead,
1371 DWORD* lpNumberOfCharsRead,
1372 VOID* lpReserved);
1373
1374 BOOL WriteConsoleA(
1375 HANDLE hConsoleOutput,
1376 LPCSTR lpBuffer,
1377 DWORD nNumberOfCharsToWrite,
1378 DWORD* lpNumberOfCharsWritten,
1379 VOID* lpReserved);
1380 BOOL WriteConsoleW(
1381 HANDLE hConsoleOutput,
1382 LPCWSTR lpBuffer,
1383 DWORD nNumberOfCharsToWrite,
1384 DWORD* lpNumberOfCharsWritten,
1385 VOID* lpReserved);
1386
1387 enum {
1388 FOREGROUND_BLUE = 0x0001,
1389 FOREGROUND_GREEN = 0x0002,
1390 FOREGROUND_RED = 0x0004,
1391 FOREGROUND_INTENSITY = 0x0008,
1392 BACKGROUND_BLUE = 0x0010,
1393 BACKGROUND_GREEN = 0x0020,
1394 BACKGROUND_RED = 0x0040,
1395 BACKGROUND_INTENSITY = 0x0080
1396 }
1397
1398 BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
1399
1400 BOOL GetConsoleScreenBufferInfo(
1401 HANDLE hConsoleOutput,
1402 CONSOLE_SCREEN_BUFFER_INFO* lpConsoleScreenBufferInfo);
1403
1404 BOOL SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput);
1405
1406 enum {
1407 STD_INPUT_HANDLE = -10,
1408 STD_OUTPUT_HANDLE = -11,
1409 STD_ERROR_HANDLE = -12
1410 }
1411
1412 HANDLE GetStdHandle(DWORD nStdHandle);
1413
1414 UINT GetConsoleCP();
1415
1416 UINT GetConsoleOutputCP();
1417
1418 //}}}
1419
1420 //{{{ COM functions
1421 enum {
1422 COINIT_APARTMENTTHREADED = 0x2,
1423 }
1424
1425 HRESULT CoInitializeEx(VOID* pvReserved, DWORD dwCoInit);
1426 void CoUninitialize();
1427
1428 VOID* CoTaskMemAlloc(SIZE_T cb);
1429 VOID* CoTaskMemRealloc(VOID* pv, SIZE_T cb);
1430 void CoTaskMemFree(VOID* pv);
1431
1432 enum {
1433 BIF_RETURNONLYFSDIRS = 0x0001,
1434 BIF_EDITBOX = 0x0010,
1435 BIF_NEWDIALOGSTYLE = 0x0040,
1436 BIF_USENEWUI = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
1437 }
1438
1439 ITEMIDLIST* SHBrowseForFolderA(BROWSEINFO* lpbi);
1440 ITEMIDLIST* SHBrowseForFolderW(BROWSEINFO* lpbi);
1441
1442 BOOL SHGetPathFromIDListA(ITEMIDLIST* pidl, LPSTR pszPath);
1443 BOOL SHGetPathFromIDListW(ITEMIDLIST* pidl, LPWSTR pszPath);
1444
1445 HRESULT SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
1446 HRESULT SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
1447
1448 HRESULT SHGetDesktopFolder(IShellFolder** ppshf);
1449
1450 struct GUID {
1451 align(1):
1452 uint Data1;
1453 ushort Data2;
1454 ushort Data3;
1455 ubyte[8] Data4;
1456 }
1457 alias GUID IID;
1458 alias GUID CLSID;
1459
1460 // I can't get this #!@#! COM stuff working...
1461 interface IUnknown {
1462 extern(Windows):
1463 HRESULT QueryInterface(IID* riid, void** ppvObject);
1464 ULONG AddRef();
1465 ULONG Release();
1466 }
1467 alias void* LPBC;
1468 interface IShellFolder : IUnknown {
1469 extern(Windows):
1470 HRESULT ParseDisplayName(
1471 HWND hwnd,
1472 LPBC pbc,
1473 wchar* pszDisplayName,
1474 ULONG* pchEaten,
1475 ITEMIDLIST** ppidl,
1476 ULONG* pdwAttributes);
1477
1478 //other methods omitted
1479 }
1480 //}}}
1481
1482 //{{{ Multimedia functions
1483 alias uint MMRESULT;
1484 alias HANDLE HWAVEOUT;
1485 struct TIMECAPS {
1486 UINT wPeriodMin;
1487 UINT wPeriodMax;
1488 }
1489 DWORD timeGetTime();
1490 MMRESULT timeGetDevCaps(TIMECAPS* ptc, UINT cbtc);
1491 MMRESULT timeBeginPeriod(UINT uPeriod);
1492 MMRESULT timeEndPeriod(UINT uPeriod);
1493
1494 struct WAVEHDR {
1495 LPSTR lpData;
1496 DWORD dwBufferLength;
1497 DWORD dwBytesRecorded;
1498 ULONG_PTR dwUser;
1499 DWORD dwFlags;
1500 DWORD dwLoops;
1501 WAVEHDR* lpNext;
1502 ULONG_PTR reserved;
1503 }
1504 enum {
1505 WHDR_DONE = 0x00000001,
1506 WHDR_PREPARED = 0x00000002,
1507 WHDR_BEGINLOOP = 0x00000004,
1508 WHDR_ENDLOOP = 0x00000008,
1509 WHDR_INQUEUE = 0x00000010
1510 }
1511 alias uint MMVERSION;
1512 struct WAVEOUTCAPSW {
1513 WORD wMid;
1514 WORD wPid;
1515 MMVERSION vDriverVersion;
1516 WCHAR[32] szPname;
1517 DWORD dwFormats;
1518 WORD wChannels;
1519 WORD wReserved1;
1520 DWORD dwSupport;
1521 }
1522 struct MMTIME {
1523 UINT wType;
1524 union _u {
1525 DWORD ms;
1526 DWORD sample;
1527 DWORD cb;
1528 DWORD ticks;
1529
1530 struct _smpte {
1531 BYTE hour;
1532 BYTE min;
1533 BYTE sec;
1534 BYTE frame;
1535 BYTE fps;
1536 BYTE dummy;
1537 BYTE pad[2];
1538 }
1539 _smpte smpte;
1540
1541 struct _midi {
1542 DWORD songptrpos;
1543 }
1544 _midi midi;
1545 }
1546 _u u;
1547 }
1548 enum {
1549 TIME_MS = 0x0001,
1550 TIME_SAMPLES = 0x0002,
1551 TIME_BYTES = 0x0004,
1552 TIME_SMPTE = 0x0008,
1553 TIME_MIDI = 0x0010,
1554 TIME_TICKS = 0x0020
1555 }
1556 struct WAVEFORMATEX {
1557 WORD wFormatTag;
1558 WORD nChannels;
1559 DWORD nSamplesPerSec;
1560 DWORD nAvgBytesPerSec;
1561 WORD nBlockAlign;
1562 WORD wBitsPerSample;
1563 WORD cbSize;
1564
1565 }
1566
1567 MMRESULT waveOutGetVolume(HWAVEOUT hwo, DWORD* pdwVolume);
1568 MMRESULT waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume);
1569 MMRESULT waveOutOpen(
1570 HWAVEOUT* phwo,
1571 UINT uDeviceID,
1572 WAVEFORMATEX* pwfx,
1573 ULONG_PTR dwCallback,
1574 ULONG_PTR dwInstance,
1575 DWORD fdwOpen);
1576 MMRESULT waveOutClose(HWAVEOUT hwo);
1577 MMRESULT waveOutPrepareHeader(HWAVEOUT hwo, WAVEHDR* pwh, UINT cbwh);
1578 MMRESULT waveOutUnprepareHeader(HWAVEOUT hwo, WAVEHDR* pwh, UINT cbwh);
1579 MMRESULT waveOutWrite(HWAVEOUT hwo, WAVEHDR* pwh, UINT cbwh);
1580 MMRESULT waveOutPause(HWAVEOUT hwo);
1581 MMRESULT waveOutRestart(HWAVEOUT hwo);
1582 MMRESULT waveOutReset(HWAVEOUT hwo);
1583 MMRESULT waveOutBreakLoop(HWAVEOUT hwo);
1584 MMRESULT waveOutGetPosition(HWAVEOUT hwo, MMTIME* pmmt, UINT cbmmt);
1585 MMRESULT waveOutGetPitch(HWAVEOUT hwo, DWORD* pdwPitch);
1586 MMRESULT waveOutSetPitch(HWAVEOUT hwo, DWORD dwPitch);
1587 MMRESULT waveOutGetPlaybackRate(HWAVEOUT hwo, DWORD* pdwRate);
1588 MMRESULT waveOutSetPlaybackRate(HWAVEOUT hwo, DWORD dwRate);
1589
1590 //}}}
1591
1592 version(UNICODE) {
1593 alias RegisterClassExW RegisterClassEx;
1594 alias CreateWindowExW CreateWindowEx;
1595 alias DefWindowProcW DefWindowProc;
1596 alias GetWindowLongW GetWindowLong;
1597 alias SetWindowLongW SetWindowLong;
1598 alias GetWindowLongPtrW GetWindowLongPtr;
1599 alias SetWindowLongPtrW SetWindowLongPtr;
1600 alias GetWindowTextW GetWindowText;
1601 alias SetWindowTextW SetWindowText;
1602 alias GetWindowModuleFileNameW GetWindowModuleFileName;
1603 alias SetPropW SetProp;
1604 alias GetPropW GetProp;
1605 alias RemovePropW RemoveProp;
1606 alias GetOpenFileNameW GetOpenFileName;
1607 alias GetSaveFileNameW GetSaveFileName;
1608 alias GetMessageW GetMessage;
1609 alias DispatchMessageW DispatchMessage;
1610 alias LoadImageW LoadImage;
1611 alias GetObjectW GetObject;
1612 alias EnumFontFamiliesExW EnumFontFamiliesEx;
1613 alias SystemParametersInfoW SystemParametersInfo;
1614 alias GetVersionExW GetVersionEx;
1615 alias GetModuleHandleW GetModuleHandle;
1616 alias LoadLibraryW LoadLibrary;
1617 alias SHGetSpecialFolderPathW SHGetSpecialFolderPath;
1618 alias GetConsoleTitleW GetConsoleTitle;
1619 alias SetConsoleTitleW SetConsoleTitle;
1620 alias ReadConsoleW ReadConsole;
1621 alias WriteConsoleW WriteConsole;
1622 alias SHBrowseForFolderW SHBrowseForFolder;
1623 alias SHGetPathFromIDListW SHGetPathFromIDList;
1624 alias SHGetFolderPathW SHGetFolderPath;
1625
1626 alias LOGFONTW LOGFONT;
1627 alias NONCLIENTMETRICSW NONCLIENTMETRICS;
1628 alias ENUMLOGFONTEXW ENUMLOGFONTEX;
1629 alias TEXTMETRICW TEXTMETRIC;
1630 alias OSVERSIONINFOW OSVERSIONINFO;
1631 } else {
1632 alias RegisterClassExA RegisterClassEx;
1633 alias CreateWindowExA CreateWindowEx;
1634 alias DefWindowProcA DefWindowProc;
1635 alias GetWindowLongA GetWindowLong;
1636 alias SetWindowLongA SetWindowLong;
1637 alias GetWindowLongPtrA GetWindowLongPtr;
1638 alias SetWindowLongPtrA SetWindowLongPtr;
1639 alias GetWindowTextA GetWindowText;
1640 alias SetWindowTextA SetWindowText;
1641 alias GetWindowModuleFileNameA GetWindowModuleFileName;
1642 alias SetPropA SetProp;
1643 alias GetPropA GetProp;
1644 alias RemovePropA RemoveProp;
1645 alias GetOpenFileNameA GetOpenFileName;
1646 alias GetSaveFileNameA GetSaveFileName;
1647 alias GetMessageA GetMessage;
1648 alias DispatchMessageA DispatchMessage;
1649 alias LoadImageA LoadImage;
1650 alias EnumFontFamiliesExA EnumFontFamiliesEx;
1651 alias SystemParametersInfoA SystemParametersInfo;
1652 alias GetVersionExA GetVersionEx;
1653 alias GetModuleHandleA GetModuleHandle;
1654 alias LoadLibraryA LoadLibrary;
1655 alias SHGetSpecialFolderPathA SHGetSpecialFolderPath;
1656 alias GetConsoleTitleA GetConsoleTitle;
1657 alias SetConsoleTitleA SetConsoleTitle;
1658 alias ReadConsoleA ReadConsole;
1659 alias WriteConsoleA WriteConsole;
1660 alias SHBrowseForFolderA SHBrowseForFolder;
1661 alias SHGetPathFromIDListA SHGetPathFromIDList;
1662 alias SHGetFolderPathA SHGetFolderPath;
1663 }
1664
1665 struct POINT {
1666 LONG x;
1667 LONG y;
1668 }
1669 struct SIZE {
1670 LONG cx;
1671 LONG cy;
1672 }
1673 struct RECT {
1674 LONG left;
1675 LONG top;
1676 LONG right;
1677 LONG bottom;
1678 }
1679 struct BLENDFUNCTION {
1680 BYTE BlendOp;
1681 BYTE BlendFlags;
1682 BYTE SourceConstantAlpha;
1683 BYTE AlphaFormat;
1684 }
1685 const int LF_FACESIZE = 32;
1686 struct LOGFONTW {
1687 LONG lfHeight;
1688 LONG lfWidth;
1689 LONG lfEscapement;
1690 LONG lfOrientation;
1691 LONG lfWeight;
1692 BYTE lfItalic;
1693 BYTE lfUnderline;
1694 BYTE lfStrikeOut;
1695 BYTE lfCharSet;
1696 BYTE lfOutPrecision;
1697 BYTE lfClipPrecision;
1698 BYTE lfQuality;
1699 BYTE lfPitchAndFamily;
1700 WCHAR[LF_FACESIZE] lfFaceName;
1701 }
1702 struct NONCLIENTMETRICSW {
1703 UINT cbSize;
1704 int iBorderWidth;
1705 int iScrollWidth;
1706 int iScrollHeight;
1707 int iCaptionWidth;
1708 int iCaptionHeight;
1709 LOGFONTW lfCaptionFont;
1710 int iSmCaptionWidth;
1711 int iSmCaptionHeight;
1712 LOGFONTW lfSmCaptionFont;
1713 int iMenuWidth;
1714 int iMenuHeight;
1715 LOGFONTW lfMenuFont;
1716 LOGFONTW lfStatusFont;
1717 LOGFONTW lfMessageFont;
1718 }
1719 const int LF_FULLFACESIZE = 64;
1720 struct ENUMLOGFONTEXW {
1721 LOGFONT elfLogFont;
1722 WCHAR[LF_FULLFACESIZE] elfFullName;
1723 WCHAR[LF_FACESIZE] elfStyle;
1724 WCHAR[LF_FACESIZE] elfScript;
1725 }
1726 struct TEXTMETRICW {
1727 LONG tmHeight;
1728 LONG tmAscent;
1729 LONG tmDescent;
1730 LONG tmInternalLeading;
1731 LONG tmExternalLeading;
1732 LONG tmAveCharWidth;
1733 LONG tmMaxCharWidth;
1734 LONG tmWeight;
1735 LONG tmOverhang;
1736 LONG tmDigitizedAspectX;
1737 LONG tmDigitizedAspectY;
1738 WCHAR tmFirstChar;
1739 WCHAR tmLastChar;
1740 WCHAR tmDefaultChar;
1741 WCHAR tmBreakChar;
1742 BYTE tmItalic;
1743 BYTE tmUnderlined;
1744 BYTE tmStruckOut;
1745 BYTE tmPitchAndFamily;
1746 BYTE tmCharSet;
1747 }
1748 struct RGBQUAD {
1749 BYTE rgbBlue;
1750 BYTE rgbGreen;
1751 BYTE rgbRed;
1752 BYTE rgbReserved;
1753 }
1754 struct BITMAPINFO {
1755 BITMAPINFOHEADER bmiHeader;
1756 RGBQUAD[1] bmiColors;
1757 }
1758 struct BITMAPINFOHEADER {
1759 DWORD biSize;
1760 LONG biWidth;
1761 LONG biHeight;
1762 WORD biPlanes;
1763 WORD biBitCount;
1764 DWORD biCompression;
1765 DWORD biSizeImage;
1766 LONG biXPelsPerMeter;
1767 LONG biYPelsPerMeter;
1768 DWORD biClrUsed;
1769 DWORD biClrImportant;
1770 }
1771 struct DIBSECTION {
1772 BITMAP dsBm;
1773 BITMAPINFOHEADER dsBmih;
1774 DWORD[3] dsBitfields;
1775 HANDLE dshSection;
1776 DWORD dsOffset;
1777 }
1778 struct BITMAP {
1779 LONG bmType;
1780 LONG bmWidth;
1781 LONG bmHeight;
1782 LONG bmWidthBytes;
1783 WORD bmPlanes;
1784 WORD bmBitsPixel;
1785 VOID* bmBits;
1786 }
1787 struct MSG {
1788 HWND hWnd;
1789 UINT message;
1790 WPARAM wParam;
1791 LPARAM lParam;
1792 DWORD time;
1793 POINT pt;
1794 }
1795 struct WNDCLASSEX {
1796 UINT cbSize;
1797 UINT style;
1798 WNDPROC lpfnWndProc;
1799 int cbClsExtra;
1800 int cbWndExtra;
1801 HINSTANCE hInstance;
1802 HICON hIcon;
1803 HCURSOR hCursor;
1804 HBRUSH hbrBackground;
1805 LPCTSTR lpszMenuName;
1806 LPCTSTR lpszClassName;
1807 HICON hIconSm;
1808 }
1809 struct WINDOWINFO {
1810 DWORD cbSize;
1811 RECT rcWindow;
1812 RECT rcClient;
1813 DWORD dwStyle;
1814 DWORD dwExStyle;
1815 DWORD dwWindowStatus;
1816 UINT cxWindowBorders;
1817 UINT cyWindowBorders;
1818 ATOM atomWindowType;
1819 WORD wCreatorVersion;
1820 }
1821 struct PAINTSTRUCT {
1822 HDC hdc;
1823 BOOL fErase;
1824 RECT rcPaint;
1825 BOOL fRestore;
1826 BOOL fIncUpdate;
1827 BYTE[32] rgbReserved;
1828 }
1829 struct TRACKMOUSEEVENT {
1830 DWORD cbSize;
1831 DWORD dwFlags;
1832 HWND hWndTrack;
1833 DWORD dwHoverTime;
1834 }
1835 struct OPENFILENAME {
1836 DWORD lStructSize;
1837 HWND hWndOwner;
1838 HINSTANCE hInstance;
1839 LPCTSTR lpstrFilter;
1840 LPTSTR lpstrCustomFilter;
1841 DWORD nMaxCustFilter;
1842 DWORD nFilterIndex;
1843 LPTSTR lpstrFile;
1844 DWORD nMaxFile;
1845 LPTSTR lpstrFileTitle;
1846 DWORD nMaxFileTitle;
1847 LPCTSTR lpstrInitialDir;
1848 LPCTSTR lpstrTitle;
1849 DWORD Flags;
1850 WORD nFileOffset;
1851 WORD nFileExtension;
1852 LPCTSTR lpstrDefExt;
1853 LPARAM lCustData;
1854 LPOFNHOOKPROC lpfnHook;
1855 LPCTSTR lpTemplateName;
1856 // if(_WIN32_WINNT >= 0x0500)
1857 //void* pvReserved;
1858 //DWORD dwReserved;
1859 //DWORD FlagsEx;
1860 }
1861 struct SHITEMID {
1862 USHORT cb;
1863 BYTE[1] abID;
1864 }
1865 struct ITEMIDLIST {
1866 SHITEMID mkid;
1867 }
1868 struct BROWSEINFO {
1869 HWND hwndOwner;
1870 ITEMIDLIST* pidlRoot;
1871 LPTSTR pszDisplayName;
1872 LPCTSTR lpszTitle;
1873 UINT ulFlags;
1874 BFFCALLBACK lpfn;
1875 LPARAM lParam;
1876 int iImage;
1877 }
1878 struct OVERLAPPED {
1879 ULONG_PTR Internal;
1880 ULONG_PTR InternalHigh;
1881 union {
1882 struct {
1883 DWORD Offset;
1884 DWORD OffsetHigh;
1885 }
1886
1887 VOID* Pointer;
1888 }
1889
1890 HANDLE hEvent;
1891 }
1892 struct OSVERSIONINFOW {
1893 DWORD dwOSVersionInfoSize;
1894 DWORD dwMajorVersion;
1895 DWORD dwMinorVersion;
1896 DWORD dwBuildNumber;
1897 DWORD dwPlatformId;
1898 WCHAR[128] szCSDVersion;
1899 }
1900 struct SYSTEM_INFO {
1901 WORD wProcessorArchitecture;
1902 WORD wReserved;
1903 DWORD dwPageSize;
1904 VOID* lpMinimumApplicationAddress;
1905 VOID* lpMaximumApplicationAddress;
1906 ULONG_PTR dwActiveProcessorMask;
1907 DWORD dwNumberOfProcessors;
1908 DWORD dwProcessorType;
1909 DWORD dwAllocationGranularity;
1910 WORD wProcessorLevel;
1911 WORD wProcessorRevision;
1912 }
1913 struct CONSOLE_SCREEN_BUFFER_INFO {
1914 COORD dwSize;
1915 COORD dwCursorPosition;
1916 WORD wAttributes;
1917 SMALL_RECT srWindow;
1918 COORD dwMaximumWindowSize;
1919 }
1920 struct FILETIME {
1921 DWORD dwLowDateTime;
1922 DWORD dwHighDateTime;
1923 }
1924 struct SYSTEMTIME {
1925 WORD wYear;
1926 WORD wMonth;
1927 WORD wDayOfWeek;
1928 WORD wDay;
1929 WORD wHour;
1930 WORD wMinute;
1931 WORD wSecond;
1932 WORD wMilliseconds;
1933 }
1934 struct COORD {
1935 SHORT X;
1936 SHORT Y;
1937 }
1938 struct SMALL_RECT {
1939 SHORT Left;
1940 SHORT Top;
1941 SHORT Right;
1942 SHORT Bottom;
1943 }
1944