comparison druntime/import/core/sys/windows/windows.d @ 1458:e0b2d67cfe7c

Added druntime (this should be removed once it works).
author Robert Clipsham <robert@octarineparrot.com>
date Tue, 02 Jun 2009 17:43:06 +0100
parents
children
comparison
equal deleted inserted replaced
1456:7b218ec1044f 1458:e0b2d67cfe7c
1 /**
2 * Windows is a registered trademark of Microsoft Corporation in the United
3 * States and other countries.
4 *
5 * Copyright: Copyright Digital Mars 2000 - 2009.
6 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>.
7 * Authors: Walter Bright, Sean Kelly
8 *
9 * Copyright Digital Mars 2000 - 2009.
10 * Distributed under the Boost Software License, Version 1.0.
11 * (See accompanying file LICENSE_1_0.txt or copy at
12 * http://www.boost.org/LICENSE_1_0.txt)
13 */
14 module core.sys.windows.windows;
15
16 version (Windows)
17 {
18 }
19 else
20 {
21 static assert(0); // Windows only
22 }
23
24 extern (Windows)
25 {
26 alias uint ULONG;
27 alias ULONG *PULONG;
28 alias ushort USHORT;
29 alias USHORT *PUSHORT;
30 alias ubyte UCHAR;
31 alias UCHAR *PUCHAR;
32 alias char *PSZ;
33 alias wchar WCHAR;
34
35 alias void VOID;
36 alias char CHAR;
37 alias short SHORT;
38 alias int LONG;
39 alias CHAR *LPSTR;
40 alias CHAR *PSTR;
41
42 alias const(CHAR)* LPCSTR;
43 alias const(CHAR)* PCSTR;
44
45 alias LPSTR LPTCH, PTCH;
46 alias LPSTR PTSTR, LPTSTR;
47 alias LPCSTR LPCTSTR;
48
49 alias WCHAR* LPWSTR;
50
51 alias const(WCHAR)* LPCWSTR, PCWSTR;
52
53 alias uint DWORD;
54 alias int BOOL;
55 alias ubyte BYTE;
56 alias ushort WORD;
57 alias float FLOAT;
58 alias FLOAT *PFLOAT;
59 alias BOOL *PBOOL;
60 alias BOOL *LPBOOL;
61 alias BYTE *PBYTE;
62 alias BYTE *LPBYTE;
63 alias int *PINT;
64 alias int *LPINT;
65 alias WORD *PWORD;
66 alias WORD *LPWORD;
67 alias int *LPLONG;
68 alias DWORD *PDWORD;
69 alias DWORD *LPDWORD;
70 alias void *LPVOID;
71 alias void *LPCVOID;
72
73 alias int INT;
74 alias uint UINT;
75 alias uint *PUINT;
76
77 // ULONG_PTR must be able to store a pointer as an integral type
78 version(Win64)
79 {
80 alias long INT_PTR;
81 alias ulong UINT_PTR;
82 alias long LONG_PTR;
83 alias ulong ULONG_PTR;
84 alias long * PINT_PTR;
85 alias ulong * PUINT_PTR;
86 alias long * PLONG_PTR;
87 alias ulong * PULONG_PTR;
88 }
89 version(Win32)
90 {
91 alias int INT_PTR;
92 alias uint UINT_PTR;
93 alias int LONG_PTR;
94 alias uint ULONG_PTR;
95 alias int * PINT_PTR;
96 alias uint * PUINT_PTR;
97 alias int * PLONG_PTR;
98 alias uint * PULONG_PTR;
99 }
100
101 typedef void *HANDLE;
102 alias void *PVOID;
103 alias HANDLE HGLOBAL;
104 alias HANDLE HLOCAL;
105 alias LONG HRESULT;
106 alias LONG SCODE;
107 alias HANDLE HINSTANCE;
108 alias HINSTANCE HMODULE;
109 alias HANDLE HWND;
110
111 alias HANDLE HGDIOBJ;
112 alias HANDLE HACCEL;
113 alias HANDLE HBITMAP;
114 alias HANDLE HBRUSH;
115 alias HANDLE HCOLORSPACE;
116 alias HANDLE HDC;
117 alias HANDLE HGLRC;
118 alias HANDLE HDESK;
119 alias HANDLE HENHMETAFILE;
120 alias HANDLE HFONT;
121 alias HANDLE HICON;
122 alias HANDLE HMENU;
123 alias HANDLE HMETAFILE;
124 alias HANDLE HPALETTE;
125 alias HANDLE HPEN;
126 alias HANDLE HRGN;
127 alias HANDLE HRSRC;
128 alias HANDLE HSTR;
129 alias HANDLE HTASK;
130 alias HANDLE HWINSTA;
131 alias HANDLE HKL;
132 alias HICON HCURSOR;
133
134 alias HANDLE HKEY;
135 alias HKEY *PHKEY;
136 alias DWORD ACCESS_MASK;
137 alias ACCESS_MASK *PACCESS_MASK;
138 alias ACCESS_MASK REGSAM;
139
140 alias int (*FARPROC)();
141
142 alias UINT WPARAM;
143 alias LONG LPARAM;
144 alias LONG LRESULT;
145
146 alias DWORD COLORREF;
147 alias DWORD *LPCOLORREF;
148 alias WORD ATOM;
149
150 version (0)
151 { // Properly prototyped versions
152 alias BOOL function(HWND, UINT, WPARAM, LPARAM) DLGPROC;
153 alias VOID function(HWND, UINT, UINT, DWORD) TIMERPROC;
154 alias BOOL function(HDC, LPARAM, int) GRAYSTRINGPROC;
155 alias BOOL function(HWND, LPARAM) WNDENUMPROC;
156 alias LRESULT function(int code, WPARAM wParam, LPARAM lParam) HOOKPROC;
157 alias VOID function(HWND, UINT, DWORD, LRESULT) SENDASYNCPROC;
158 alias BOOL function(HWND, LPCSTR, HANDLE) PROPENUMPROCA;
159 alias BOOL function(HWND, LPCWSTR, HANDLE) PROPENUMPROCW;
160 alias BOOL function(HWND, LPSTR, HANDLE, DWORD) PROPENUMPROCEXA;
161 alias BOOL function(HWND, LPWSTR, HANDLE, DWORD) PROPENUMPROCEXW;
162 alias int function(LPSTR lpch, int ichCurrent, int cch, int code)
163 EDITWORDBREAKPROCA;
164 alias int function(LPWSTR lpch, int ichCurrent, int cch, int code)
165 EDITWORDBREAKPROCW;
166 alias BOOL function(HDC hdc, LPARAM lData, WPARAM wData, int cx, int cy)
167 DRAWSTATEPROC;
168 }
169 else
170 {
171 alias FARPROC DLGPROC;
172 alias FARPROC TIMERPROC;
173 alias FARPROC GRAYSTRINGPROC;
174 alias FARPROC WNDENUMPROC;
175 alias FARPROC HOOKPROC;
176 alias FARPROC SENDASYNCPROC;
177 alias FARPROC EDITWORDBREAKPROCA;
178 alias FARPROC EDITWORDBREAKPROCW;
179 alias FARPROC PROPENUMPROCA;
180 alias FARPROC PROPENUMPROCW;
181 alias FARPROC PROPENUMPROCEXA;
182 alias FARPROC PROPENUMPROCEXW;
183 alias FARPROC DRAWSTATEPROC;
184 }
185
186 extern (D)
187 {
188 WORD HIWORD(int l) { return cast(WORD)((l >> 16) & 0xFFFF); }
189 WORD LOWORD(int l) { return cast(WORD)l; }
190 bool FAILED(int status) { return status < 0; }
191 bool SUCCEEDED(int Status) { return Status >= 0; }
192 }
193
194 enum : int
195 {
196 FALSE = 0,
197 TRUE = 1,
198 }
199
200 enum : uint
201 {
202 MAX_PATH = 260,
203 HINSTANCE_ERROR = 32,
204 }
205
206 enum
207 {
208 ERROR_SUCCESS = 0,
209 ERROR_INVALID_FUNCTION = 1,
210 ERROR_FILE_NOT_FOUND = 2,
211 ERROR_PATH_NOT_FOUND = 3,
212 ERROR_TOO_MANY_OPEN_FILES = 4,
213 ERROR_ACCESS_DENIED = 5,
214 ERROR_INVALID_HANDLE = 6,
215 ERROR_NO_MORE_FILES = 18,
216 ERROR_MORE_DATA = 234,
217 ERROR_NO_MORE_ITEMS = 259,
218 }
219
220 enum
221 {
222 DLL_PROCESS_ATTACH = 1,
223 DLL_THREAD_ATTACH = 2,
224 DLL_THREAD_DETACH = 3,
225 DLL_PROCESS_DETACH = 0,
226 }
227
228 enum
229 {
230 FILE_BEGIN = 0,
231 FILE_CURRENT = 1,
232 FILE_END = 2,
233 }
234
235 enum : uint
236 {
237 DELETE = 0x00010000,
238 READ_CONTROL = 0x00020000,
239 WRITE_DAC = 0x00040000,
240 WRITE_OWNER = 0x00080000,
241 SYNCHRONIZE = 0x00100000,
242
243 STANDARD_RIGHTS_REQUIRED = 0x000F0000,
244 STANDARD_RIGHTS_READ = READ_CONTROL,
245 STANDARD_RIGHTS_WRITE = READ_CONTROL,
246 STANDARD_RIGHTS_EXECUTE = READ_CONTROL,
247 STANDARD_RIGHTS_ALL = 0x001F0000,
248 SPECIFIC_RIGHTS_ALL = 0x0000FFFF,
249 ACCESS_SYSTEM_SECURITY = 0x01000000,
250 MAXIMUM_ALLOWED = 0x02000000,
251
252 GENERIC_READ = 0x80000000,
253 GENERIC_WRITE = 0x40000000,
254 GENERIC_EXECUTE = 0x20000000,
255 GENERIC_ALL = 0x10000000,
256 }
257
258 enum
259 {
260 FILE_SHARE_READ = 0x00000001,
261 FILE_SHARE_WRITE = 0x00000002,
262 FILE_SHARE_DELETE = 0x00000004,
263 FILE_ATTRIBUTE_READONLY = 0x00000001,
264 FILE_ATTRIBUTE_HIDDEN = 0x00000002,
265 FILE_ATTRIBUTE_SYSTEM = 0x00000004,
266 FILE_ATTRIBUTE_DIRECTORY = 0x00000010,
267 FILE_ATTRIBUTE_ARCHIVE = 0x00000020,
268 FILE_ATTRIBUTE_NORMAL = 0x00000080,
269 FILE_ATTRIBUTE_TEMPORARY = 0x00000100,
270 FILE_ATTRIBUTE_COMPRESSED = 0x00000800,
271 FILE_ATTRIBUTE_OFFLINE = 0x00001000,
272 FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001,
273 FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002,
274 FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004,
275 FILE_NOTIFY_CHANGE_SIZE = 0x00000008,
276 FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010,
277 FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020,
278 FILE_NOTIFY_CHANGE_CREATION = 0x00000040,
279 FILE_NOTIFY_CHANGE_SECURITY = 0x00000100,
280 FILE_ACTION_ADDED = 0x00000001,
281 FILE_ACTION_REMOVED = 0x00000002,
282 FILE_ACTION_MODIFIED = 0x00000003,
283 FILE_ACTION_RENAMED_OLD_NAME = 0x00000004,
284 FILE_ACTION_RENAMED_NEW_NAME = 0x00000005,
285 FILE_CASE_SENSITIVE_SEARCH = 0x00000001,
286 FILE_CASE_PRESERVED_NAMES = 0x00000002,
287 FILE_UNICODE_ON_DISK = 0x00000004,
288 FILE_PERSISTENT_ACLS = 0x00000008,
289 FILE_FILE_COMPRESSION = 0x00000010,
290 FILE_VOLUME_IS_COMPRESSED = 0x00008000,
291 }
292
293 enum : DWORD
294 {
295 MAILSLOT_NO_MESSAGE = cast(DWORD)-1,
296 MAILSLOT_WAIT_FOREVER = cast(DWORD)-1,
297 }
298
299 enum : uint
300 {
301 FILE_FLAG_WRITE_THROUGH = 0x80000000,
302 FILE_FLAG_OVERLAPPED = 0x40000000,
303 FILE_FLAG_NO_BUFFERING = 0x20000000,
304 FILE_FLAG_RANDOM_ACCESS = 0x10000000,
305 FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000,
306 FILE_FLAG_DELETE_ON_CLOSE = 0x04000000,
307 FILE_FLAG_BACKUP_SEMANTICS = 0x02000000,
308 FILE_FLAG_POSIX_SEMANTICS = 0x01000000,
309 }
310
311 enum
312 {
313 CREATE_NEW = 1,
314 CREATE_ALWAYS = 2,
315 OPEN_EXISTING = 3,
316 OPEN_ALWAYS = 4,
317 TRUNCATE_EXISTING = 5,
318 }
319
320
321 enum
322 {
323 HANDLE INVALID_HANDLE_VALUE = cast(HANDLE)-1,
324 DWORD INVALID_SET_FILE_POINTER = cast(DWORD)-1,
325 DWORD INVALID_FILE_SIZE = cast(DWORD)0xFFFFFFFF,
326 }
327
328 struct OVERLAPPED {
329 DWORD Internal;
330 DWORD InternalHigh;
331 DWORD Offset;
332 DWORD OffsetHigh;
333 HANDLE hEvent;
334 }
335
336 struct SECURITY_ATTRIBUTES {
337 DWORD nLength;
338 void *lpSecurityDescriptor;
339 BOOL bInheritHandle;
340 }
341
342 alias SECURITY_ATTRIBUTES* PSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES;
343
344 struct FILETIME {
345 DWORD dwLowDateTime;
346 DWORD dwHighDateTime;
347 }
348 alias FILETIME* PFILETIME, LPFILETIME;
349
350 struct WIN32_FIND_DATA {
351 DWORD dwFileAttributes;
352 FILETIME ftCreationTime;
353 FILETIME ftLastAccessTime;
354 FILETIME ftLastWriteTime;
355 DWORD nFileSizeHigh;
356 DWORD nFileSizeLow;
357 DWORD dwReserved0;
358 DWORD dwReserved1;
359 char cFileName[MAX_PATH];
360 char cAlternateFileName[ 14 ];
361 }
362
363 struct WIN32_FIND_DATAW {
364 DWORD dwFileAttributes;
365 FILETIME ftCreationTime;
366 FILETIME ftLastAccessTime;
367 FILETIME ftLastWriteTime;
368 DWORD nFileSizeHigh;
369 DWORD nFileSizeLow;
370 DWORD dwReserved0;
371 DWORD dwReserved1;
372 wchar cFileName[ 260 ];
373 wchar cAlternateFileName[ 14 ];
374 }
375
376 // Critical Section
377
378 struct _LIST_ENTRY
379 {
380 _LIST_ENTRY *Flink;
381 _LIST_ENTRY *Blink;
382 }
383 alias _LIST_ENTRY LIST_ENTRY;
384
385 struct _RTL_CRITICAL_SECTION_DEBUG
386 {
387 WORD Type;
388 WORD CreatorBackTraceIndex;
389 _RTL_CRITICAL_SECTION *CriticalSection;
390 LIST_ENTRY ProcessLocksList;
391 DWORD EntryCount;
392 DWORD ContentionCount;
393 DWORD Spare[ 2 ];
394 }
395 alias _RTL_CRITICAL_SECTION_DEBUG RTL_CRITICAL_SECTION_DEBUG;
396
397 struct _RTL_CRITICAL_SECTION
398 {
399 RTL_CRITICAL_SECTION_DEBUG * DebugInfo;
400
401 //
402 // The following three fields control entering and exiting the critical
403 // section for the resource
404 //
405
406 LONG LockCount;
407 LONG RecursionCount;
408 HANDLE OwningThread; // from the thread's ClientId->UniqueThread
409 HANDLE LockSemaphore;
410 ULONG_PTR SpinCount; // force size on 64-bit systems when packed
411 }
412 alias _RTL_CRITICAL_SECTION CRITICAL_SECTION;
413
414
415 enum
416 {
417 STD_INPUT_HANDLE = cast(DWORD)-10,
418 STD_OUTPUT_HANDLE = cast(DWORD)-11,
419 STD_ERROR_HANDLE = cast(DWORD)-12,
420 }
421
422 export
423 {
424 BOOL SetCurrentDirectoryA(LPCSTR lpPathName);
425 BOOL SetCurrentDirectoryW(LPCWSTR lpPathName);
426 DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer);
427 DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer);
428 BOOL CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
429 BOOL CreateDirectoryW(LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
430 BOOL CreateDirectoryExA(LPCSTR lpTemplateDirectory, LPCSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
431 BOOL CreateDirectoryExW(LPCWSTR lpTemplateDirectory, LPCWSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes);
432 BOOL RemoveDirectoryA(LPCSTR lpPathName);
433 BOOL RemoveDirectoryW(LPCWSTR lpPathName);
434
435 BOOL CloseHandle(HANDLE hObject);
436
437 HANDLE CreateFileA(in char* lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
438 SECURITY_ATTRIBUTES *lpSecurityAttributes, DWORD dwCreationDisposition,
439 DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
440 HANDLE CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
441 SECURITY_ATTRIBUTES *lpSecurityAttributes, DWORD dwCreationDisposition,
442 DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
443
444 BOOL DeleteFileA(in char *lpFileName);
445 BOOL DeleteFileW(LPCWSTR lpFileName);
446
447 BOOL FindClose(HANDLE hFindFile);
448 HANDLE FindFirstFileA(in char *lpFileName, WIN32_FIND_DATA* lpFindFileData);
449 HANDLE FindFirstFileW(in LPCWSTR lpFileName, WIN32_FIND_DATAW* lpFindFileData);
450 BOOL FindNextFileA(HANDLE hFindFile, WIN32_FIND_DATA* lpFindFileData);
451 BOOL FindNextFileW(HANDLE hFindFile, WIN32_FIND_DATAW* lpFindFileData);
452 BOOL GetExitCodeThread(HANDLE hThread, DWORD *lpExitCode);
453 DWORD GetLastError();
454 DWORD GetFileAttributesA(in char *lpFileName);
455 DWORD GetFileAttributesW(in wchar *lpFileName);
456 DWORD GetFileSize(HANDLE hFile, DWORD *lpFileSizeHigh);
457 BOOL CopyFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, BOOL bFailIfExists);
458 BOOL CopyFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists);
459 BOOL MoveFileA(in char *from, in char *to);
460 BOOL MoveFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName);
461 BOOL ReadFile(HANDLE hFile, void *lpBuffer, DWORD nNumberOfBytesToRead,
462 DWORD *lpNumberOfBytesRead, OVERLAPPED *lpOverlapped);
463 DWORD SetFilePointer(HANDLE hFile, LONG lDistanceToMove,
464 LONG *lpDistanceToMoveHigh, DWORD dwMoveMethod);
465 BOOL WriteFile(HANDLE hFile, in void *lpBuffer, DWORD nNumberOfBytesToWrite,
466 DWORD *lpNumberOfBytesWritten, OVERLAPPED *lpOverlapped);
467 DWORD GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
468 HANDLE GetStdHandle(DWORD nStdHandle);
469 BOOL SetStdHandle(DWORD nStdHandle, HANDLE hHandle);
470 }
471
472 struct MEMORYSTATUS {
473 DWORD dwLength;
474 DWORD dwMemoryLoad;
475 DWORD dwTotalPhys;
476 DWORD dwAvailPhys;
477 DWORD dwTotalPageFile;
478 DWORD dwAvailPageFile;
479 DWORD dwTotalVirtual;
480 DWORD dwAvailVirtual;
481 };
482 alias MEMORYSTATUS *LPMEMORYSTATUS;
483
484 HMODULE LoadLibraryA(LPCSTR lpLibFileName);
485 FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
486 DWORD GetVersion();
487 BOOL FreeLibrary(HMODULE hLibModule);
488 void FreeLibraryAndExitThread(HMODULE hLibModule, DWORD dwExitCode);
489 BOOL DisableThreadLibraryCalls(HMODULE hLibModule);
490
491 //
492 // Registry Specific Access Rights.
493 //
494
495 enum
496 {
497 KEY_QUERY_VALUE = 0x0001,
498 KEY_SET_VALUE = 0x0002,
499 KEY_CREATE_SUB_KEY = 0x0004,
500 KEY_ENUMERATE_SUB_KEYS = 0x0008,
501 KEY_NOTIFY = 0x0010,
502 KEY_CREATE_LINK = 0x0020,
503
504 KEY_READ = cast(int)((STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & ~SYNCHRONIZE),
505 KEY_WRITE = cast(int)((STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & ~SYNCHRONIZE),
506 KEY_EXECUTE = cast(int)(KEY_READ & ~SYNCHRONIZE),
507 KEY_ALL_ACCESS = cast(int)((STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY | KEY_CREATE_LINK) & ~SYNCHRONIZE),
508 }
509
510 //
511 // Key creation/open disposition
512 //
513
514 enum : int
515 {
516 REG_CREATED_NEW_KEY = 0x00000001, // New Registry Key created
517 REG_OPENED_EXISTING_KEY = 0x00000002, // Existing Key opened
518 }
519
520 //
521 //
522 // Predefined Value Types.
523 //
524 enum
525 {
526 REG_NONE = 0, // No value type
527 REG_SZ = 1, // Unicode nul terminated string
528 REG_EXPAND_SZ = 2, // Unicode nul terminated string
529 // (with environment variable references)
530 REG_BINARY = 3, // Free form binary
531 REG_DWORD = 4, // 32-bit number
532 REG_DWORD_LITTLE_ENDIAN = 4, // 32-bit number (same as REG_DWORD)
533 REG_DWORD_BIG_ENDIAN = 5, // 32-bit number
534 REG_LINK = 6, // Symbolic Link (unicode)
535 REG_MULTI_SZ = 7, // Multiple Unicode strings
536 REG_RESOURCE_LIST = 8, // Resource list in the resource map
537 REG_FULL_RESOURCE_DESCRIPTOR = 9, // Resource list in the hardware description
538 REG_RESOURCE_REQUIREMENTS_LIST = 10,
539 REG_QWORD = 11,
540 REG_QWORD_LITTLE_ENDIAN = 11,
541 }
542
543 /*
544 * MessageBox() Flags
545 */
546 enum
547 {
548 MB_OK = 0x00000000,
549 MB_OKCANCEL = 0x00000001,
550 MB_ABORTRETRYIGNORE = 0x00000002,
551 MB_YESNOCANCEL = 0x00000003,
552 MB_YESNO = 0x00000004,
553 MB_RETRYCANCEL = 0x00000005,
554
555
556 MB_ICONHAND = 0x00000010,
557 MB_ICONQUESTION = 0x00000020,
558 MB_ICONEXCLAMATION = 0x00000030,
559 MB_ICONASTERISK = 0x00000040,
560
561
562 MB_USERICON = 0x00000080,
563 MB_ICONWARNING = MB_ICONEXCLAMATION,
564 MB_ICONERROR = MB_ICONHAND,
565
566
567 MB_ICONINFORMATION = MB_ICONASTERISK,
568 MB_ICONSTOP = MB_ICONHAND,
569
570 MB_DEFBUTTON1 = 0x00000000,
571 MB_DEFBUTTON2 = 0x00000100,
572 MB_DEFBUTTON3 = 0x00000200,
573
574 MB_DEFBUTTON4 = 0x00000300,
575
576
577 MB_APPLMODAL = 0x00000000,
578 MB_SYSTEMMODAL = 0x00001000,
579 MB_TASKMODAL = 0x00002000,
580
581 MB_HELP = 0x00004000, // Help Button
582
583
584 MB_NOFOCUS = 0x00008000,
585 MB_SETFOREGROUND = 0x00010000,
586 MB_DEFAULT_DESKTOP_ONLY = 0x00020000,
587
588
589 MB_TOPMOST = 0x00040000,
590 MB_RIGHT = 0x00080000,
591 MB_RTLREADING = 0x00100000,
592
593
594 MB_TYPEMASK = 0x0000000F,
595 MB_ICONMASK = 0x000000F0,
596 MB_DEFMASK = 0x00000F00,
597 MB_MODEMASK = 0x00003000,
598 MB_MISCMASK = 0x0000C000,
599 }
600
601
602 int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
603 int MessageBoxExA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType, WORD wLanguageId);
604
605
606 enum : HKEY
607 {
608 HKEY_CLASSES_ROOT = cast(HKEY)(0x80000000),
609 HKEY_CURRENT_USER = cast(HKEY)(0x80000001),
610 HKEY_LOCAL_MACHINE = cast(HKEY)(0x80000002),
611 HKEY_USERS = cast(HKEY)(0x80000003),
612 HKEY_PERFORMANCE_DATA = cast(HKEY)(0x80000004),
613 HKEY_PERFORMANCE_TEXT = cast(HKEY)(0x80000050),
614 HKEY_PERFORMANCE_NLSTEXT = cast(HKEY)(0x80000060),
615 HKEY_CURRENT_CONFIG = cast(HKEY)(0x80000005),
616 HKEY_DYN_DATA = cast(HKEY)(0x80000006),
617 }
618
619
620 enum
621 {
622 REG_OPTION_RESERVED = (0x00000000), // Parameter is reserved
623
624 REG_OPTION_NON_VOLATILE = (0x00000000), // Key is preserved
625 // when system is rebooted
626
627 REG_OPTION_VOLATILE = (0x00000001), // Key is not preserved
628 // when system is rebooted
629
630 REG_OPTION_CREATE_LINK = (0x00000002), // Created key is a
631 // symbolic link
632
633 REG_OPTION_BACKUP_RESTORE = (0x00000004), // open for backup or restore
634 // special access rules
635 // privilege required
636
637 REG_OPTION_OPEN_LINK = (0x00000008), // Open symbolic link
638
639 REG_LEGAL_OPTION = (REG_OPTION_RESERVED | REG_OPTION_NON_VOLATILE | REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK),
640 }
641
642 export LONG RegDeleteKeyA(HKEY hKey, LPCSTR lpSubKey);
643 export LONG RegDeleteValueA(HKEY hKey, LPCSTR lpValueName);
644
645 export LONG RegEnumKeyExA(HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass, FILETIME* lpftLastWriteTime);
646 export LONG RegEnumValueA(HKEY hKey, DWORD dwIndex, LPSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved,
647 LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
648
649 export LONG RegCloseKey(HKEY hKey);
650 export LONG RegFlushKey(HKEY hKey);
651
652 export LONG RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult);
653 export LONG RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);
654
655 export LONG RegQueryInfoKeyA(HKEY hKey, LPSTR lpClass, LPDWORD lpcbClass,
656 LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen,
657 LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor,
658 PFILETIME lpftLastWriteTime);
659
660 export LONG RegQueryValueA(HKEY hKey, LPCSTR lpSubKey, LPSTR lpValue,
661 LPLONG lpcbValue);
662
663 export LONG RegCreateKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass,
664 DWORD dwOptions, REGSAM samDesired, SECURITY_ATTRIBUTES* lpSecurityAttributes,
665 PHKEY phkResult, LPDWORD lpdwDisposition);
666
667 export LONG RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, BYTE* lpData, DWORD cbData);
668
669 struct MEMORY_BASIC_INFORMATION {
670 PVOID BaseAddress;
671 PVOID AllocationBase;
672 DWORD AllocationProtect;
673 DWORD RegionSize;
674 DWORD State;
675 DWORD Protect;
676 DWORD Type;
677 }
678 alias MEMORY_BASIC_INFORMATION* PMEMORY_BASIC_INFORMATION;
679
680 enum
681 {
682 SECTION_QUERY = 0x0001,
683 SECTION_MAP_WRITE = 0x0002,
684 SECTION_MAP_READ = 0x0004,
685 SECTION_MAP_EXECUTE = 0x0008,
686 SECTION_EXTEND_SIZE = 0x0010,
687
688 SECTION_ALL_ACCESS = cast(int)(STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE),
689 PAGE_NOACCESS = 0x01,
690 PAGE_READONLY = 0x02,
691 PAGE_READWRITE = 0x04,
692 PAGE_WRITECOPY = 0x08,
693 PAGE_EXECUTE = 0x10,
694 PAGE_EXECUTE_READ = 0x20,
695 PAGE_EXECUTE_READWRITE = 0x40,
696 PAGE_EXECUTE_WRITECOPY = 0x80,
697 PAGE_GUARD = 0x100,
698 PAGE_NOCACHE = 0x200,
699 MEM_COMMIT = 0x1000,
700 MEM_RESERVE = 0x2000,
701 MEM_DECOMMIT = 0x4000,
702 MEM_RELEASE = 0x8000,
703 MEM_FREE = 0x10000,
704 MEM_PRIVATE = 0x20000,
705 MEM_MAPPED = 0x40000,
706 MEM_RESET = 0x80000,
707 MEM_TOP_DOWN = 0x100000,
708 SEC_FILE = 0x800000,
709 SEC_IMAGE = 0x1000000,
710 SEC_RESERVE = 0x4000000,
711 SEC_COMMIT = 0x8000000,
712 SEC_NOCACHE = 0x10000000,
713 MEM_IMAGE = SEC_IMAGE,
714 }
715
716 enum
717 {
718 FILE_MAP_COPY = SECTION_QUERY,
719 FILE_MAP_WRITE = SECTION_MAP_WRITE,
720 FILE_MAP_READ = SECTION_MAP_READ,
721 FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS,
722 }
723
724
725 //
726 // Define access rights to files and directories
727 //
728
729 //
730 // The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
731 // devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
732 // constants *MUST* always be in sync.
733 // The values are redefined in devioctl.h because they must be available to
734 // both DOS and NT.
735 //
736
737 enum
738 {
739 FILE_READ_DATA = ( 0x0001 ), // file & pipe
740 FILE_LIST_DIRECTORY = ( 0x0001 ), // directory
741
742 FILE_WRITE_DATA = ( 0x0002 ), // file & pipe
743 FILE_ADD_FILE = ( 0x0002 ), // directory
744
745 FILE_APPEND_DATA = ( 0x0004 ), // file
746 FILE_ADD_SUBDIRECTORY = ( 0x0004 ), // directory
747 FILE_CREATE_PIPE_INSTANCE = ( 0x0004 ), // named pipe
748
749 FILE_READ_EA = ( 0x0008 ), // file & directory
750
751 FILE_WRITE_EA = ( 0x0010 ), // file & directory
752
753 FILE_EXECUTE = ( 0x0020 ), // file
754 FILE_TRAVERSE = ( 0x0020 ), // directory
755
756 FILE_DELETE_CHILD = ( 0x0040 ), // directory
757
758 FILE_READ_ATTRIBUTES = ( 0x0080 ), // all
759
760 FILE_WRITE_ATTRIBUTES = ( 0x0100 ), // all
761
762 FILE_ALL_ACCESS = cast(int)(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF),
763
764 FILE_GENERIC_READ = cast(int)(STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE),
765
766 FILE_GENERIC_WRITE = cast(int)(STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE),
767
768 FILE_GENERIC_EXECUTE = cast(int)(STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE),
769 }
770
771 export
772 {
773 BOOL FreeResource(HGLOBAL hResData);
774 LPVOID LockResource(HGLOBAL hResData);
775 BOOL GlobalUnlock(HGLOBAL hMem);
776 HGLOBAL GlobalFree(HGLOBAL hMem);
777 UINT GlobalCompact(DWORD dwMinFree);
778 void GlobalFix(HGLOBAL hMem);
779 void GlobalUnfix(HGLOBAL hMem);
780 LPVOID GlobalWire(HGLOBAL hMem);
781 BOOL GlobalUnWire(HGLOBAL hMem);
782 void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer);
783 HLOCAL LocalAlloc(UINT uFlags, UINT uBytes);
784 HLOCAL LocalReAlloc(HLOCAL hMem, UINT uBytes, UINT uFlags);
785 LPVOID LocalLock(HLOCAL hMem);
786 HLOCAL LocalHandle(LPCVOID pMem);
787 BOOL LocalUnlock(HLOCAL hMem);
788 UINT LocalSize(HLOCAL hMem);
789 UINT LocalFlags(HLOCAL hMem);
790 HLOCAL LocalFree(HLOCAL hMem);
791 UINT LocalShrink(HLOCAL hMem, UINT cbNewSize);
792 UINT LocalCompact(UINT uMinFree);
793 BOOL FlushInstructionCache(HANDLE hProcess, LPCVOID lpBaseAddress, DWORD dwSize);
794 LPVOID VirtualAlloc(LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect);
795 BOOL VirtualFree(LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType);
796 BOOL VirtualProtect(LPVOID lpAddress, DWORD dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
797 DWORD VirtualQuery(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, DWORD dwLength);
798 LPVOID VirtualAllocEx(HANDLE hProcess, LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect);
799 BOOL VirtualFreeEx(HANDLE hProcess, LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType);
800 BOOL VirtualProtectEx(HANDLE hProcess, LPVOID lpAddress, DWORD dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
801 DWORD VirtualQueryEx(HANDLE hProcess, LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, DWORD dwLength);
802 }
803
804 struct SYSTEMTIME
805 {
806 WORD wYear;
807 WORD wMonth;
808 WORD wDayOfWeek;
809 WORD wDay;
810 WORD wHour;
811 WORD wMinute;
812 WORD wSecond;
813 WORD wMilliseconds;
814 }
815
816 struct TIME_ZONE_INFORMATION {
817 LONG Bias;
818 WCHAR StandardName[ 32 ];
819 SYSTEMTIME StandardDate;
820 LONG StandardBias;
821 WCHAR DaylightName[ 32 ];
822 SYSTEMTIME DaylightDate;
823 LONG DaylightBias;
824 }
825
826 enum
827 {
828 TIME_ZONE_ID_UNKNOWN = 0,
829 TIME_ZONE_ID_STANDARD = 1,
830 TIME_ZONE_ID_DAYLIGHT = 2,
831 }
832
833 export void GetSystemTime(SYSTEMTIME* lpSystemTime);
834 export BOOL GetFileTime(HANDLE hFile, FILETIME *lpCreationTime, FILETIME *lpLastAccessTime, FILETIME *lpLastWriteTime);
835 export void GetSystemTimeAsFileTime(FILETIME* lpSystemTimeAsFileTime);
836 export BOOL SetSystemTime(SYSTEMTIME* lpSystemTime);
837 export BOOL SetFileTime(HANDLE hFile, in FILETIME *lpCreationTime, in FILETIME *lpLastAccessTime, in FILETIME *lpLastWriteTime);
838 export void GetLocalTime(SYSTEMTIME* lpSystemTime);
839 export BOOL SetLocalTime(SYSTEMTIME* lpSystemTime);
840 export BOOL SystemTimeToTzSpecificLocalTime(TIME_ZONE_INFORMATION* lpTimeZoneInformation, SYSTEMTIME* lpUniversalTime, SYSTEMTIME* lpLocalTime);
841 export DWORD GetTimeZoneInformation(TIME_ZONE_INFORMATION* lpTimeZoneInformation);
842 export BOOL SetTimeZoneInformation(TIME_ZONE_INFORMATION* lpTimeZoneInformation);
843
844 export BOOL SystemTimeToFileTime(in SYSTEMTIME *lpSystemTime, FILETIME* lpFileTime);
845 export BOOL FileTimeToLocalFileTime(in FILETIME *lpFileTime, FILETIME* lpLocalFileTime);
846 export BOOL LocalFileTimeToFileTime(in FILETIME *lpLocalFileTime, FILETIME* lpFileTime);
847 export BOOL FileTimeToSystemTime(in FILETIME *lpFileTime, SYSTEMTIME* lpSystemTime);
848 export LONG CompareFileTime(in FILETIME *lpFileTime1, in FILETIME *lpFileTime2);
849 export BOOL FileTimeToDosDateTime(in FILETIME *lpFileTime, WORD* lpFatDate, WORD* lpFatTime);
850 export BOOL DosDateTimeToFileTime(WORD wFatDate, WORD wFatTime, FILETIME* lpFileTime);
851 export DWORD GetTickCount();
852 export BOOL SetSystemTimeAdjustment(DWORD dwTimeAdjustment, BOOL bTimeAdjustmentDisabled);
853 export BOOL GetSystemTimeAdjustment(DWORD* lpTimeAdjustment, DWORD* lpTimeIncrement, BOOL* lpTimeAdjustmentDisabled);
854 export DWORD FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, void* *Arguments);export DWORD FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, void* *Arguments);
855
856 enum
857 {
858 FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100,
859 FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200,
860 FORMAT_MESSAGE_FROM_STRING = 0x00000400,
861 FORMAT_MESSAGE_FROM_HMODULE = 0x00000800,
862 FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000,
863 FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000,
864 FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF,
865 };
866
867
868 //
869 // Language IDs.
870 //
871 // The following two combinations of primary language ID and
872 // sublanguage ID have special semantics:
873 //
874 // Primary Language ID Sublanguage ID Result
875 // ------------------- --------------- ------------------------
876 // LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral
877 // LANG_NEUTRAL SUBLANG_DEFAULT User default language
878 // LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language
879 //
880
881 //
882 // Primary language IDs.
883 //
884
885 enum
886 {
887 LANG_NEUTRAL = 0x00,
888
889 LANG_AFRIKAANS = 0x36,
890 LANG_ALBANIAN = 0x1c,
891 LANG_ARABIC = 0x01,
892 LANG_BASQUE = 0x2d,
893 LANG_BELARUSIAN = 0x23,
894 LANG_BULGARIAN = 0x02,
895 LANG_CATALAN = 0x03,
896 LANG_CHINESE = 0x04,
897 LANG_CROATIAN = 0x1a,
898 LANG_CZECH = 0x05,
899 LANG_DANISH = 0x06,
900 LANG_DUTCH = 0x13,
901 LANG_ENGLISH = 0x09,
902 LANG_ESTONIAN = 0x25,
903 LANG_FAEROESE = 0x38,
904 LANG_FARSI = 0x29,
905 LANG_FINNISH = 0x0b,
906 LANG_FRENCH = 0x0c,
907 LANG_GERMAN = 0x07,
908 LANG_GREEK = 0x08,
909 LANG_HEBREW = 0x0d,
910 LANG_HUNGARIAN = 0x0e,
911 LANG_ICELANDIC = 0x0f,
912 LANG_INDONESIAN = 0x21,
913 LANG_ITALIAN = 0x10,
914 LANG_JAPANESE = 0x11,
915 LANG_KOREAN = 0x12,
916 LANG_LATVIAN = 0x26,
917 LANG_LITHUANIAN = 0x27,
918 LANG_NORWEGIAN = 0x14,
919 LANG_POLISH = 0x15,
920 LANG_PORTUGUESE = 0x16,
921 LANG_ROMANIAN = 0x18,
922 LANG_RUSSIAN = 0x19,
923 LANG_SERBIAN = 0x1a,
924 LANG_SLOVAK = 0x1b,
925 LANG_SLOVENIAN = 0x24,
926 LANG_SPANISH = 0x0a,
927 LANG_SWEDISH = 0x1d,
928 LANG_THAI = 0x1e,
929 LANG_TURKISH = 0x1f,
930 LANG_UKRAINIAN = 0x22,
931 LANG_VIETNAMESE = 0x2a,
932 }
933 //
934 // Sublanguage IDs.
935 //
936 // The name immediately following SUBLANG_ dictates which primary
937 // language ID that sublanguage ID can be combined with to form a
938 // valid language ID.
939 //
940 enum
941 {
942 SUBLANG_NEUTRAL = 0x00, // language neutral
943 SUBLANG_DEFAULT = 0x01, // user default
944 SUBLANG_SYS_DEFAULT = 0x02, // system default
945
946 SUBLANG_ARABIC_SAUDI_ARABIA = 0x01, // Arabic (Saudi Arabia)
947 SUBLANG_ARABIC_IRAQ = 0x02, // Arabic (Iraq)
948 SUBLANG_ARABIC_EGYPT = 0x03, // Arabic (Egypt)
949 SUBLANG_ARABIC_LIBYA = 0x04, // Arabic (Libya)
950 SUBLANG_ARABIC_ALGERIA = 0x05, // Arabic (Algeria)
951 SUBLANG_ARABIC_MOROCCO = 0x06, // Arabic (Morocco)
952 SUBLANG_ARABIC_TUNISIA = 0x07, // Arabic (Tunisia)
953 SUBLANG_ARABIC_OMAN = 0x08, // Arabic (Oman)
954 SUBLANG_ARABIC_YEMEN = 0x09, // Arabic (Yemen)
955 SUBLANG_ARABIC_SYRIA = 0x0a, // Arabic (Syria)
956 SUBLANG_ARABIC_JORDAN = 0x0b, // Arabic (Jordan)
957 SUBLANG_ARABIC_LEBANON = 0x0c, // Arabic (Lebanon)
958 SUBLANG_ARABIC_KUWAIT = 0x0d, // Arabic (Kuwait)
959 SUBLANG_ARABIC_UAE = 0x0e, // Arabic (U.A.E)
960 SUBLANG_ARABIC_BAHRAIN = 0x0f, // Arabic (Bahrain)
961 SUBLANG_ARABIC_QATAR = 0x10, // Arabic (Qatar)
962 SUBLANG_CHINESE_TRADITIONAL = 0x01, // Chinese (Taiwan)
963 SUBLANG_CHINESE_SIMPLIFIED = 0x02, // Chinese (PR China)
964 SUBLANG_CHINESE_HONGKONG = 0x03, // Chinese (Hong Kong)
965 SUBLANG_CHINESE_SINGAPORE = 0x04, // Chinese (Singapore)
966 SUBLANG_DUTCH = 0x01, // Dutch
967 SUBLANG_DUTCH_BELGIAN = 0x02, // Dutch (Belgian)
968 SUBLANG_ENGLISH_US = 0x01, // English (USA)
969 SUBLANG_ENGLISH_UK = 0x02, // English (UK)
970 SUBLANG_ENGLISH_AUS = 0x03, // English (Australian)
971 SUBLANG_ENGLISH_CAN = 0x04, // English (Canadian)
972 SUBLANG_ENGLISH_NZ = 0x05, // English (New Zealand)
973 SUBLANG_ENGLISH_EIRE = 0x06, // English (Irish)
974 SUBLANG_ENGLISH_SOUTH_AFRICA = 0x07, // English (South Africa)
975 SUBLANG_ENGLISH_JAMAICA = 0x08, // English (Jamaica)
976 SUBLANG_ENGLISH_CARIBBEAN = 0x09, // English (Caribbean)
977 SUBLANG_ENGLISH_BELIZE = 0x0a, // English (Belize)
978 SUBLANG_ENGLISH_TRINIDAD = 0x0b, // English (Trinidad)
979 SUBLANG_FRENCH = 0x01, // French
980 SUBLANG_FRENCH_BELGIAN = 0x02, // French (Belgian)
981 SUBLANG_FRENCH_CANADIAN = 0x03, // French (Canadian)
982 SUBLANG_FRENCH_SWISS = 0x04, // French (Swiss)
983 SUBLANG_FRENCH_LUXEMBOURG = 0x05, // French (Luxembourg)
984 SUBLANG_GERMAN = 0x01, // German
985 SUBLANG_GERMAN_SWISS = 0x02, // German (Swiss)
986 SUBLANG_GERMAN_AUSTRIAN = 0x03, // German (Austrian)
987 SUBLANG_GERMAN_LUXEMBOURG = 0x04, // German (Luxembourg)
988 SUBLANG_GERMAN_LIECHTENSTEIN = 0x05, // German (Liechtenstein)
989 SUBLANG_ITALIAN = 0x01, // Italian
990 SUBLANG_ITALIAN_SWISS = 0x02, // Italian (Swiss)
991 SUBLANG_KOREAN = 0x01, // Korean (Extended Wansung)
992 SUBLANG_KOREAN_JOHAB = 0x02, // Korean (Johab)
993 SUBLANG_NORWEGIAN_BOKMAL = 0x01, // Norwegian (Bokmal)
994 SUBLANG_NORWEGIAN_NYNORSK = 0x02, // Norwegian (Nynorsk)
995 SUBLANG_PORTUGUESE = 0x02, // Portuguese
996 SUBLANG_PORTUGUESE_BRAZILIAN = 0x01, // Portuguese (Brazilian)
997 SUBLANG_SERBIAN_LATIN = 0x02, // Serbian (Latin)
998 SUBLANG_SERBIAN_CYRILLIC = 0x03, // Serbian (Cyrillic)
999 SUBLANG_SPANISH = 0x01, // Spanish (Castilian)
1000 SUBLANG_SPANISH_MEXICAN = 0x02, // Spanish (Mexican)
1001 SUBLANG_SPANISH_MODERN = 0x03, // Spanish (Modern)
1002 SUBLANG_SPANISH_GUATEMALA = 0x04, // Spanish (Guatemala)
1003 SUBLANG_SPANISH_COSTA_RICA = 0x05, // Spanish (Costa Rica)
1004 SUBLANG_SPANISH_PANAMA = 0x06, // Spanish (Panama)
1005 SUBLANG_SPANISH_DOMINICAN_REPUBLIC = 0x07, // Spanish (Dominican Republic)
1006 SUBLANG_SPANISH_VENEZUELA = 0x08, // Spanish (Venezuela)
1007 SUBLANG_SPANISH_COLOMBIA = 0x09, // Spanish (Colombia)
1008 SUBLANG_SPANISH_PERU = 0x0a, // Spanish (Peru)
1009 SUBLANG_SPANISH_ARGENTINA = 0x0b, // Spanish (Argentina)
1010 SUBLANG_SPANISH_ECUADOR = 0x0c, // Spanish (Ecuador)
1011 SUBLANG_SPANISH_CHILE = 0x0d, // Spanish (Chile)
1012 SUBLANG_SPANISH_URUGUAY = 0x0e, // Spanish (Uruguay)
1013 SUBLANG_SPANISH_PARAGUAY = 0x0f, // Spanish (Paraguay)
1014 SUBLANG_SPANISH_BOLIVIA = 0x10, // Spanish (Bolivia)
1015 SUBLANG_SPANISH_EL_SALVADOR = 0x11, // Spanish (El Salvador)
1016 SUBLANG_SPANISH_HONDURAS = 0x12, // Spanish (Honduras)
1017 SUBLANG_SPANISH_NICARAGUA = 0x13, // Spanish (Nicaragua)
1018 SUBLANG_SPANISH_PUERTO_RICO = 0x14, // Spanish (Puerto Rico)
1019 SUBLANG_SWEDISH = 0x01, // Swedish
1020 SUBLANG_SWEDISH_FINLAND = 0x02, // Swedish (Finland)
1021 }
1022 //
1023 // Sorting IDs.
1024 //
1025
1026 enum
1027 {
1028 SORT_DEFAULT = 0x0, // sorting default
1029
1030 SORT_JAPANESE_XJIS = 0x0, // Japanese XJIS order
1031 SORT_JAPANESE_UNICODE = 0x1, // Japanese Unicode order
1032
1033 SORT_CHINESE_BIG5 = 0x0, // Chinese BIG5 order
1034 SORT_CHINESE_PRCP = 0x0, // PRC Chinese Phonetic order
1035 SORT_CHINESE_UNICODE = 0x1, // Chinese Unicode order
1036 SORT_CHINESE_PRC = 0x2, // PRC Chinese Stroke Count order
1037
1038 SORT_KOREAN_KSC = 0x0, // Korean KSC order
1039 SORT_KOREAN_UNICODE = 0x1, // Korean Unicode order
1040
1041 SORT_GERMAN_PHONE_BOOK = 0x1, // German Phone Book order
1042 }
1043
1044 // end_r_winnt
1045
1046 //
1047 // A language ID is a 16 bit value which is the combination of a
1048 // primary language ID and a secondary language ID. The bits are
1049 // allocated as follows:
1050 //
1051 // +-----------------------+-------------------------+
1052 // | Sublanguage ID | Primary Language ID |
1053 // +-----------------------+-------------------------+
1054 // 15 10 9 0 bit
1055 //
1056 //
1057 // Language ID creation/extraction macros:
1058 //
1059 // MAKELANGID - construct language id from a primary language id and
1060 // a sublanguage id.
1061 // PRIMARYLANGID - extract primary language id from a language id.
1062 // SUBLANGID - extract sublanguage id from a language id.
1063 //
1064
1065 int MAKELANGID(int p, int s) { return ((cast(WORD)s) << 10) | cast(WORD)p; }
1066 WORD PRIMARYLANGID(int lgid) { return cast(WORD)(lgid & 0x3ff); }
1067 WORD SUBLANGID(int lgid) { return cast(WORD)(lgid >> 10); }
1068
1069
1070 struct FLOATING_SAVE_AREA {
1071 DWORD ControlWord;
1072 DWORD StatusWord;
1073 DWORD TagWord;
1074 DWORD ErrorOffset;
1075 DWORD ErrorSelector;
1076 DWORD DataOffset;
1077 DWORD DataSelector;
1078 BYTE RegisterArea[80 ];
1079 DWORD Cr0NpxState;
1080 }
1081
1082 enum
1083 {
1084 SIZE_OF_80387_REGISTERS = 80,
1085 //
1086 // The following flags control the contents of the CONTEXT structure.
1087 //
1088 CONTEXT_i386 = 0x00010000, // this assumes that i386 and
1089 CONTEXT_i486 = 0x00010000, // i486 have identical context records
1090
1091 CONTEXT_CONTROL = (CONTEXT_i386 | 0x00000001), // SS:SP, CS:IP, FLAGS, BP
1092 CONTEXT_INTEGER = (CONTEXT_i386 | 0x00000002), // AX, BX, CX, DX, SI, DI
1093 CONTEXT_SEGMENTS = (CONTEXT_i386 | 0x00000004), // DS, ES, FS, GS
1094 CONTEXT_FLOATING_POINT = (CONTEXT_i386 | 0x00000008), // 387 state
1095 CONTEXT_DEBUG_REGISTERS = (CONTEXT_i386 | 0x00000010), // DB 0-3,6,7
1096
1097 CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS),
1098 }
1099
1100 struct CONTEXT
1101 {
1102
1103 //
1104 // The flags values within this flag control the contents of
1105 // a CONTEXT record.
1106 //
1107 // If the context record is used as an input parameter, then
1108 // for each portion of the context record controlled by a flag
1109 // whose value is set, it is assumed that that portion of the
1110 // context record contains valid context. If the context record
1111 // is being used to modify a threads context, then only that
1112 // portion of the threads context will be modified.
1113 //
1114 // If the context record is used as an IN OUT parameter to capture
1115 // the context of a thread, then only those portions of the thread's
1116 // context corresponding to set flags will be returned.
1117 //
1118 // The context record is never used as an OUT only parameter.
1119 //
1120
1121 DWORD ContextFlags;
1122
1123 //
1124 // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
1125 // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
1126 // included in CONTEXT_FULL.
1127 //
1128
1129 DWORD Dr0;
1130 DWORD Dr1;
1131 DWORD Dr2;
1132 DWORD Dr3;
1133 DWORD Dr6;
1134 DWORD Dr7;
1135
1136 //
1137 // This section is specified/returned if the
1138 // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
1139 //
1140
1141 FLOATING_SAVE_AREA FloatSave;
1142
1143 //
1144 // This section is specified/returned if the
1145 // ContextFlags word contians the flag CONTEXT_SEGMENTS.
1146 //
1147
1148 DWORD SegGs;
1149 DWORD SegFs;
1150 DWORD SegEs;
1151 DWORD SegDs;
1152
1153 //
1154 // This section is specified/returned if the
1155 // ContextFlags word contians the flag CONTEXT_INTEGER.
1156 //
1157
1158 DWORD Edi;
1159 DWORD Esi;
1160 DWORD Ebx;
1161 DWORD Edx;
1162 DWORD Ecx;
1163 DWORD Eax;
1164
1165 //
1166 // This section is specified/returned if the
1167 // ContextFlags word contians the flag CONTEXT_CONTROL.
1168 //
1169
1170 DWORD Ebp;
1171 DWORD Eip;
1172 DWORD SegCs; // MUST BE SANITIZED
1173 DWORD EFlags; // MUST BE SANITIZED
1174 DWORD Esp;
1175 DWORD SegSs;
1176 }
1177
1178 enum
1179 {
1180 THREAD_BASE_PRIORITY_LOWRT = 15, // value that gets a thread to LowRealtime-1
1181 THREAD_BASE_PRIORITY_MAX = 2, // maximum thread base priority boost
1182 THREAD_BASE_PRIORITY_MIN = -2, // minimum thread base priority boost
1183 THREAD_BASE_PRIORITY_IDLE = -15, // value that gets a thread to idle
1184
1185 THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN,
1186 THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST+1),
1187 THREAD_PRIORITY_NORMAL = 0,
1188 THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX,
1189 THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST-1),
1190 THREAD_PRIORITY_ERROR_RETURN = int.max,
1191
1192 THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT,
1193 THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE,
1194 }
1195
1196 export HANDLE GetCurrentThread();
1197 export BOOL GetProcessTimes(HANDLE hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
1198 export HANDLE GetCurrentProcess();
1199 export DWORD GetCurrentProcessId();
1200 export BOOL DuplicateHandle (HANDLE sourceProcess, HANDLE sourceThread,
1201 HANDLE targetProcessHandle, HANDLE *targetHandle, DWORD access,
1202 BOOL inheritHandle, DWORD options);
1203 export DWORD GetCurrentThreadId();
1204 export BOOL SetThreadPriority(HANDLE hThread, int nPriority);
1205 export BOOL SetThreadPriorityBoost(HANDLE hThread, BOOL bDisablePriorityBoost);
1206 export BOOL GetThreadPriorityBoost(HANDLE hThread, PBOOL pDisablePriorityBoost);
1207 export BOOL GetThreadTimes(HANDLE hThread, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime);
1208 export int GetThreadPriority(HANDLE hThread);
1209 export BOOL GetThreadContext(HANDLE hThread, CONTEXT* lpContext);
1210 export BOOL SetThreadContext(HANDLE hThread, CONTEXT* lpContext);
1211 export DWORD SuspendThread(HANDLE hThread);
1212 export DWORD ResumeThread(HANDLE hThread);
1213 export DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
1214 export DWORD WaitForMultipleObjects(DWORD nCount, HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds);
1215 export void Sleep(DWORD dwMilliseconds);
1216
1217 // Synchronization
1218
1219 export
1220 {
1221 LONG InterlockedIncrement(LPLONG lpAddend);
1222 LONG InterlockedDecrement(LPLONG lpAddend);
1223 LONG InterlockedExchange(LPLONG Target, LONG Value);
1224 LONG InterlockedExchangeAdd(LPLONG Addend, LONG Value);
1225 PVOID InterlockedCompareExchange(PVOID *Destination, PVOID Exchange, PVOID Comperand);
1226
1227 void InitializeCriticalSection(CRITICAL_SECTION * lpCriticalSection);
1228 void EnterCriticalSection(CRITICAL_SECTION * lpCriticalSection);
1229 BOOL TryEnterCriticalSection(CRITICAL_SECTION * lpCriticalSection);
1230 void LeaveCriticalSection(CRITICAL_SECTION * lpCriticalSection);
1231 void DeleteCriticalSection(CRITICAL_SECTION * lpCriticalSection);
1232
1233 }
1234
1235
1236
1237 export BOOL QueryPerformanceCounter(long* lpPerformanceCount);
1238 export BOOL QueryPerformanceFrequency(long* lpFrequency);
1239
1240 enum
1241 {
1242 WM_NOTIFY = 0x004E,
1243 WM_INPUTLANGCHANGEREQUEST = 0x0050,
1244 WM_INPUTLANGCHANGE = 0x0051,
1245 WM_TCARD = 0x0052,
1246 WM_HELP = 0x0053,
1247 WM_USERCHANGED = 0x0054,
1248 WM_NOTIFYFORMAT = 0x0055,
1249
1250 NFR_ANSI = 1,
1251 NFR_UNICODE = 2,
1252 NF_QUERY = 3,
1253 NF_REQUERY = 4,
1254
1255 WM_CONTEXTMENU = 0x007B,
1256 WM_STYLECHANGING = 0x007C,
1257 WM_STYLECHANGED = 0x007D,
1258 WM_DISPLAYCHANGE = 0x007E,
1259 WM_GETICON = 0x007F,
1260 WM_SETICON = 0x0080,
1261
1262
1263
1264 WM_NCCREATE = 0x0081,
1265 WM_NCDESTROY = 0x0082,
1266 WM_NCCALCSIZE = 0x0083,
1267 WM_NCHITTEST = 0x0084,
1268 WM_NCPAINT = 0x0085,
1269 WM_NCACTIVATE = 0x0086,
1270 WM_GETDLGCODE = 0x0087,
1271
1272 WM_NCMOUSEMOVE = 0x00A0,
1273 WM_NCLBUTTONDOWN = 0x00A1,
1274 WM_NCLBUTTONUP = 0x00A2,
1275 WM_NCLBUTTONDBLCLK = 0x00A3,
1276 WM_NCRBUTTONDOWN = 0x00A4,
1277 WM_NCRBUTTONUP = 0x00A5,
1278 WM_NCRBUTTONDBLCLK = 0x00A6,
1279 WM_NCMBUTTONDOWN = 0x00A7,
1280 WM_NCMBUTTONUP = 0x00A8,
1281 WM_NCMBUTTONDBLCLK = 0x00A9,
1282
1283 WM_KEYFIRST = 0x0100,
1284 WM_KEYDOWN = 0x0100,
1285 WM_KEYUP = 0x0101,
1286 WM_CHAR = 0x0102,
1287 WM_DEADCHAR = 0x0103,
1288 WM_SYSKEYDOWN = 0x0104,
1289 WM_SYSKEYUP = 0x0105,
1290 WM_SYSCHAR = 0x0106,
1291 WM_SYSDEADCHAR = 0x0107,
1292 WM_KEYLAST = 0x0108,
1293
1294
1295 WM_IME_STARTCOMPOSITION = 0x010D,
1296 WM_IME_ENDCOMPOSITION = 0x010E,
1297 WM_IME_COMPOSITION = 0x010F,
1298 WM_IME_KEYLAST = 0x010F,
1299
1300
1301 WM_INITDIALOG = 0x0110,
1302 WM_COMMAND = 0x0111,
1303 WM_SYSCOMMAND = 0x0112,
1304 WM_TIMER = 0x0113,
1305 WM_HSCROLL = 0x0114,
1306 WM_VSCROLL = 0x0115,
1307 WM_INITMENU = 0x0116,
1308 WM_INITMENUPOPUP = 0x0117,
1309 WM_MENUSELECT = 0x011F,
1310 WM_MENUCHAR = 0x0120,
1311 WM_ENTERIDLE = 0x0121,
1312
1313 WM_CTLCOLORMSGBOX = 0x0132,
1314 WM_CTLCOLOREDIT = 0x0133,
1315 WM_CTLCOLORLISTBOX = 0x0134,
1316 WM_CTLCOLORBTN = 0x0135,
1317 WM_CTLCOLORDLG = 0x0136,
1318 WM_CTLCOLORSCROLLBAR = 0x0137,
1319 WM_CTLCOLORSTATIC = 0x0138,
1320
1321
1322
1323 WM_MOUSEFIRST = 0x0200,
1324 WM_MOUSEMOVE = 0x0200,
1325 WM_LBUTTONDOWN = 0x0201,
1326 WM_LBUTTONUP = 0x0202,
1327 WM_LBUTTONDBLCLK = 0x0203,
1328 WM_RBUTTONDOWN = 0x0204,
1329 WM_RBUTTONUP = 0x0205,
1330 WM_RBUTTONDBLCLK = 0x0206,
1331 WM_MBUTTONDOWN = 0x0207,
1332 WM_MBUTTONUP = 0x0208,
1333 WM_MBUTTONDBLCLK = 0x0209,
1334
1335
1336
1337 WM_MOUSELAST = 0x0209,
1338
1339
1340
1341
1342
1343
1344
1345
1346 WM_PARENTNOTIFY = 0x0210,
1347 MENULOOP_WINDOW = 0,
1348 MENULOOP_POPUP = 1,
1349 WM_ENTERMENULOOP = 0x0211,
1350 WM_EXITMENULOOP = 0x0212,
1351
1352
1353 WM_NEXTMENU = 0x0213,
1354 }
1355
1356 enum
1357 {
1358 /*
1359 * Dialog Box Command IDs
1360 */
1361 IDOK = 1,
1362 IDCANCEL = 2,
1363 IDABORT = 3,
1364 IDRETRY = 4,
1365 IDIGNORE = 5,
1366 IDYES = 6,
1367 IDNO = 7,
1368
1369 IDCLOSE = 8,
1370 IDHELP = 9,
1371
1372
1373 // end_r_winuser
1374
1375
1376
1377 /*
1378 * Control Manager Structures and Definitions
1379 */
1380
1381
1382
1383 // begin_r_winuser
1384
1385 /*
1386 * Edit Control Styles
1387 */
1388 ES_LEFT = 0x0000,
1389 ES_CENTER = 0x0001,
1390 ES_RIGHT = 0x0002,
1391 ES_MULTILINE = 0x0004,
1392 ES_UPPERCASE = 0x0008,
1393 ES_LOWERCASE = 0x0010,
1394 ES_PASSWORD = 0x0020,
1395 ES_AUTOVSCROLL = 0x0040,
1396 ES_AUTOHSCROLL = 0x0080,
1397 ES_NOHIDESEL = 0x0100,
1398 ES_OEMCONVERT = 0x0400,
1399 ES_READONLY = 0x0800,
1400 ES_WANTRETURN = 0x1000,
1401
1402 ES_NUMBER = 0x2000,
1403
1404
1405 // end_r_winuser
1406
1407
1408
1409 /*
1410 * Edit Control Notification Codes
1411 */
1412 EN_SETFOCUS = 0x0100,
1413 EN_KILLFOCUS = 0x0200,
1414 EN_CHANGE = 0x0300,
1415 EN_UPDATE = 0x0400,
1416 EN_ERRSPACE = 0x0500,
1417 EN_MAXTEXT = 0x0501,
1418 EN_HSCROLL = 0x0601,
1419 EN_VSCROLL = 0x0602,
1420
1421
1422 /* Edit control EM_SETMARGIN parameters */
1423 EC_LEFTMARGIN = 0x0001,
1424 EC_RIGHTMARGIN = 0x0002,
1425 EC_USEFONTINFO = 0xffff,
1426
1427
1428
1429
1430 // begin_r_winuser
1431
1432 /*
1433 * Edit Control Messages
1434 */
1435 EM_GETSEL = 0x00B0,
1436 EM_SETSEL = 0x00B1,
1437 EM_GETRECT = 0x00B2,
1438 EM_SETRECT = 0x00B3,
1439 EM_SETRECTNP = 0x00B4,
1440 EM_SCROLL = 0x00B5,
1441 EM_LINESCROLL = 0x00B6,
1442 EM_SCROLLCARET = 0x00B7,
1443 EM_GETMODIFY = 0x00B8,
1444 EM_SETMODIFY = 0x00B9,
1445 EM_GETLINECOUNT = 0x00BA,
1446 EM_LINEINDEX = 0x00BB,
1447 EM_SETHANDLE = 0x00BC,
1448 EM_GETHANDLE = 0x00BD,
1449 EM_GETTHUMB = 0x00BE,
1450 EM_LINELENGTH = 0x00C1,
1451 EM_REPLACESEL = 0x00C2,
1452 EM_GETLINE = 0x00C4,
1453 EM_LIMITTEXT = 0x00C5,
1454 EM_CANUNDO = 0x00C6,
1455 EM_UNDO = 0x00C7,
1456 EM_FMTLINES = 0x00C8,
1457 EM_LINEFROMCHAR = 0x00C9,
1458 EM_SETTABSTOPS = 0x00CB,
1459 EM_SETPASSWORDCHAR = 0x00CC,
1460 EM_EMPTYUNDOBUFFER = 0x00CD,
1461 EM_GETFIRSTVISIBLELINE = 0x00CE,
1462 EM_SETREADONLY = 0x00CF,
1463 EM_SETWORDBREAKPROC = 0x00D0,
1464 EM_GETWORDBREAKPROC = 0x00D1,
1465 EM_GETPASSWORDCHAR = 0x00D2,
1466
1467 EM_SETMARGINS = 0x00D3,
1468 EM_GETMARGINS = 0x00D4,
1469 EM_SETLIMITTEXT = EM_LIMITTEXT, /* ;win40 Name change */
1470 EM_GETLIMITTEXT = 0x00D5,
1471 EM_POSFROMCHAR = 0x00D6,
1472 EM_CHARFROMPOS = 0x00D7,
1473
1474
1475
1476 // end_r_winuser
1477
1478
1479 /*
1480 * EDITWORDBREAKPROC code values
1481 */
1482 WB_LEFT = 0,
1483 WB_RIGHT = 1,
1484 WB_ISDELIMITER = 2,
1485
1486 // begin_r_winuser
1487
1488 /*
1489 * Button Control Styles
1490 */
1491 BS_PUSHBUTTON = 0x00000000,
1492 BS_DEFPUSHBUTTON = 0x00000001,
1493 BS_CHECKBOX = 0x00000002,
1494 BS_AUTOCHECKBOX = 0x00000003,
1495 BS_RADIOBUTTON = 0x00000004,
1496 BS_3STATE = 0x00000005,
1497 BS_AUTO3STATE = 0x00000006,
1498 BS_GROUPBOX = 0x00000007,
1499 BS_USERBUTTON = 0x00000008,
1500 BS_AUTORADIOBUTTON = 0x00000009,
1501 BS_OWNERDRAW = 0x0000000B,
1502 BS_LEFTTEXT = 0x00000020,
1503
1504 BS_TEXT = 0x00000000,
1505 BS_ICON = 0x00000040,
1506 BS_BITMAP = 0x00000080,
1507 BS_LEFT = 0x00000100,
1508 BS_RIGHT = 0x00000200,
1509 BS_CENTER = 0x00000300,
1510 BS_TOP = 0x00000400,
1511 BS_BOTTOM = 0x00000800,
1512 BS_VCENTER = 0x00000C00,
1513 BS_PUSHLIKE = 0x00001000,
1514 BS_MULTILINE = 0x00002000,
1515 BS_NOTIFY = 0x00004000,
1516 BS_FLAT = 0x00008000,
1517 BS_RIGHTBUTTON = BS_LEFTTEXT,
1518
1519
1520
1521 /*
1522 * User Button Notification Codes
1523 */
1524 BN_CLICKED = 0,
1525 BN_PAINT = 1,
1526 BN_HILITE = 2,
1527 BN_UNHILITE = 3,
1528 BN_DISABLE = 4,
1529 BN_DOUBLECLICKED = 5,
1530
1531 BN_PUSHED = BN_HILITE,
1532 BN_UNPUSHED = BN_UNHILITE,
1533 BN_DBLCLK = BN_DOUBLECLICKED,
1534 BN_SETFOCUS = 6,
1535 BN_KILLFOCUS = 7,
1536
1537 /*
1538 * Button Control Messages
1539 */
1540 BM_GETCHECK = 0x00F0,
1541 BM_SETCHECK = 0x00F1,
1542 BM_GETSTATE = 0x00F2,
1543 BM_SETSTATE = 0x00F3,
1544 BM_SETSTYLE = 0x00F4,
1545
1546 BM_CLICK = 0x00F5,
1547 BM_GETIMAGE = 0x00F6,
1548 BM_SETIMAGE = 0x00F7,
1549
1550 BST_UNCHECKED = 0x0000,
1551 BST_CHECKED = 0x0001,
1552 BST_INDETERMINATE = 0x0002,
1553 BST_PUSHED = 0x0004,
1554 BST_FOCUS = 0x0008,
1555
1556
1557 /*
1558 * Static Control Constants
1559 */
1560 SS_LEFT = 0x00000000,
1561 SS_CENTER = 0x00000001,
1562 SS_RIGHT = 0x00000002,
1563 SS_ICON = 0x00000003,
1564 SS_BLACKRECT = 0x00000004,
1565 SS_GRAYRECT = 0x00000005,
1566 SS_WHITERECT = 0x00000006,
1567 SS_BLACKFRAME = 0x00000007,
1568 SS_GRAYFRAME = 0x00000008,
1569 SS_WHITEFRAME = 0x00000009,
1570 SS_USERITEM = 0x0000000A,
1571 SS_SIMPLE = 0x0000000B,
1572 SS_LEFTNOWORDWRAP = 0x0000000C,
1573
1574 SS_OWNERDRAW = 0x0000000D,
1575 SS_BITMAP = 0x0000000E,
1576 SS_ENHMETAFILE = 0x0000000F,
1577 SS_ETCHEDHORZ = 0x00000010,
1578 SS_ETCHEDVERT = 0x00000011,
1579 SS_ETCHEDFRAME = 0x00000012,
1580 SS_TYPEMASK = 0x0000001F,
1581
1582 SS_NOPREFIX = 0x00000080, /* Don't do "&" character translation */
1583
1584 SS_NOTIFY = 0x00000100,
1585 SS_CENTERIMAGE = 0x00000200,
1586 SS_RIGHTJUST = 0x00000400,
1587 SS_REALSIZEIMAGE = 0x00000800,
1588 SS_SUNKEN = 0x00001000,
1589 SS_ENDELLIPSIS = 0x00004000,
1590 SS_PATHELLIPSIS = 0x00008000,
1591 SS_WORDELLIPSIS = 0x0000C000,
1592 SS_ELLIPSISMASK = 0x0000C000,
1593
1594
1595 // end_r_winuser
1596
1597
1598 /*
1599 * Static Control Mesages
1600 */
1601 STM_SETICON = 0x0170,
1602 STM_GETICON = 0x0171,
1603
1604 STM_SETIMAGE = 0x0172,
1605 STM_GETIMAGE = 0x0173,
1606 STN_CLICKED = 0,
1607 STN_DBLCLK = 1,
1608 STN_ENABLE = 2,
1609 STN_DISABLE = 3,
1610
1611 STM_MSGMAX = 0x0174,
1612 }
1613
1614
1615 enum
1616 {
1617 /*
1618 * Window Messages
1619 */
1620
1621 WM_NULL = 0x0000,
1622 WM_CREATE = 0x0001,
1623 WM_DESTROY = 0x0002,
1624 WM_MOVE = 0x0003,
1625 WM_SIZE = 0x0005,
1626
1627 WM_ACTIVATE = 0x0006,
1628 /*
1629 * WM_ACTIVATE state values
1630 */
1631 WA_INACTIVE = 0,
1632 WA_ACTIVE = 1,
1633 WA_CLICKACTIVE = 2,
1634
1635 WM_SETFOCUS = 0x0007,
1636 WM_KILLFOCUS = 0x0008,
1637 WM_ENABLE = 0x000A,
1638 WM_SETREDRAW = 0x000B,
1639 WM_SETTEXT = 0x000C,
1640 WM_GETTEXT = 0x000D,
1641 WM_GETTEXTLENGTH = 0x000E,
1642 WM_PAINT = 0x000F,
1643 WM_CLOSE = 0x0010,
1644 WM_QUERYENDSESSION = 0x0011,
1645 WM_QUIT = 0x0012,
1646 WM_QUERYOPEN = 0x0013,
1647 WM_ERASEBKGND = 0x0014,
1648 WM_SYSCOLORCHANGE = 0x0015,
1649 WM_ENDSESSION = 0x0016,
1650 WM_SHOWWINDOW = 0x0018,
1651 WM_WININICHANGE = 0x001A,
1652
1653 WM_SETTINGCHANGE = WM_WININICHANGE,
1654
1655
1656
1657 WM_DEVMODECHANGE = 0x001B,
1658 WM_ACTIVATEAPP = 0x001C,
1659 WM_FONTCHANGE = 0x001D,
1660 WM_TIMECHANGE = 0x001E,
1661 WM_CANCELMODE = 0x001F,
1662 WM_SETCURSOR = 0x0020,
1663 WM_MOUSEACTIVATE = 0x0021,
1664 WM_CHILDACTIVATE = 0x0022,
1665 WM_QUEUESYNC = 0x0023,
1666
1667 WM_GETMINMAXINFO = 0x0024,
1668 }
1669
1670 struct RECT
1671 {
1672 LONG left;
1673 LONG top;
1674 LONG right;
1675 LONG bottom;
1676 }
1677 alias RECT* PRECT, NPRECT, LPRECT;
1678
1679 struct PAINTSTRUCT {
1680 HDC hdc;
1681 BOOL fErase;
1682 RECT rcPaint;
1683 BOOL fRestore;
1684 BOOL fIncUpdate;
1685 BYTE rgbReserved[32];
1686 }
1687 alias PAINTSTRUCT* PPAINTSTRUCT, NPPAINTSTRUCT, LPPAINTSTRUCT;
1688
1689 // flags for GetDCEx()
1690
1691 enum
1692 {
1693 DCX_WINDOW = 0x00000001,
1694 DCX_CACHE = 0x00000002,
1695 DCX_NORESETATTRS = 0x00000004,
1696 DCX_CLIPCHILDREN = 0x00000008,
1697 DCX_CLIPSIBLINGS = 0x00000010,
1698 DCX_PARENTCLIP = 0x00000020,
1699 DCX_EXCLUDERGN = 0x00000040,
1700 DCX_INTERSECTRGN = 0x00000080,
1701 DCX_EXCLUDEUPDATE = 0x00000100,
1702 DCX_INTERSECTUPDATE = 0x00000200,
1703 DCX_LOCKWINDOWUPDATE = 0x00000400,
1704 DCX_VALIDATE = 0x00200000,
1705 }
1706
1707 export
1708 {
1709 BOOL UpdateWindow(HWND hWnd);
1710 HWND SetActiveWindow(HWND hWnd);
1711 HWND GetForegroundWindow();
1712 BOOL PaintDesktop(HDC hdc);
1713 BOOL SetForegroundWindow(HWND hWnd);
1714 HWND WindowFromDC(HDC hDC);
1715 HDC GetDC(HWND hWnd);
1716 HDC GetDCEx(HWND hWnd, HRGN hrgnClip, DWORD flags);
1717 HDC GetWindowDC(HWND hWnd);
1718 int ReleaseDC(HWND hWnd, HDC hDC);
1719 HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
1720 BOOL EndPaint(HWND hWnd, PAINTSTRUCT *lpPaint);
1721 BOOL GetUpdateRect(HWND hWnd, LPRECT lpRect, BOOL bErase);
1722 int GetUpdateRgn(HWND hWnd, HRGN hRgn, BOOL bErase);
1723 int SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw);
1724 int GetWindowRgn(HWND hWnd, HRGN hRgn);
1725 int ExcludeUpdateRgn(HDC hDC, HWND hWnd);
1726 BOOL InvalidateRect(HWND hWnd, RECT *lpRect, BOOL bErase);
1727 BOOL ValidateRect(HWND hWnd, RECT *lpRect);
1728 BOOL InvalidateRgn(HWND hWnd, HRGN hRgn, BOOL bErase);
1729 BOOL ValidateRgn(HWND hWnd, HRGN hRgn);
1730 BOOL RedrawWindow(HWND hWnd, RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags);
1731 }
1732
1733 // flags for RedrawWindow()
1734 enum
1735 {
1736 RDW_INVALIDATE = 0x0001,
1737 RDW_INTERNALPAINT = 0x0002,
1738 RDW_ERASE = 0x0004,
1739 RDW_VALIDATE = 0x0008,
1740 RDW_NOINTERNALPAINT = 0x0010,
1741 RDW_NOERASE = 0x0020,
1742 RDW_NOCHILDREN = 0x0040,
1743 RDW_ALLCHILDREN = 0x0080,
1744 RDW_UPDATENOW = 0x0100,
1745 RDW_ERASENOW = 0x0200,
1746 RDW_FRAME = 0x0400,
1747 RDW_NOFRAME = 0x0800,
1748 }
1749
1750 export
1751 {
1752 BOOL GetClientRect(HWND hWnd, LPRECT lpRect);
1753 BOOL GetWindowRect(HWND hWnd, LPRECT lpRect);
1754 BOOL AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu);
1755 BOOL AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle);
1756 HFONT CreateFontA(int, int, int, int, int, DWORD,
1757 DWORD, DWORD, DWORD, DWORD, DWORD,
1758 DWORD, DWORD, LPCSTR);
1759 HFONT CreateFontW(int, int, int, int, int, DWORD,
1760 DWORD, DWORD, DWORD, DWORD, DWORD,
1761 DWORD, DWORD, LPCWSTR);
1762 }
1763
1764 enum
1765 {
1766 OUT_DEFAULT_PRECIS = 0,
1767 OUT_STRING_PRECIS = 1,
1768 OUT_CHARACTER_PRECIS = 2,
1769 OUT_STROKE_PRECIS = 3,
1770 OUT_TT_PRECIS = 4,
1771 OUT_DEVICE_PRECIS = 5,
1772 OUT_RASTER_PRECIS = 6,
1773 OUT_TT_ONLY_PRECIS = 7,
1774 OUT_OUTLINE_PRECIS = 8,
1775 OUT_SCREEN_OUTLINE_PRECIS = 9,
1776
1777 CLIP_DEFAULT_PRECIS = 0,
1778 CLIP_CHARACTER_PRECIS = 1,
1779 CLIP_STROKE_PRECIS = 2,
1780 CLIP_MASK = 0xf,
1781 CLIP_LH_ANGLES = (1<<4),
1782 CLIP_TT_ALWAYS = (2<<4),
1783 CLIP_EMBEDDED = (8<<4),
1784
1785 DEFAULT_QUALITY = 0,
1786 DRAFT_QUALITY = 1,
1787 PROOF_QUALITY = 2,
1788
1789 NONANTIALIASED_QUALITY = 3,
1790 ANTIALIASED_QUALITY = 4,
1791
1792
1793 DEFAULT_PITCH = 0,
1794 FIXED_PITCH = 1,
1795 VARIABLE_PITCH = 2,
1796
1797 MONO_FONT = 8,
1798
1799
1800 ANSI_CHARSET = 0,
1801 DEFAULT_CHARSET = 1,
1802 SYMBOL_CHARSET = 2,
1803 SHIFTJIS_CHARSET = 128,
1804 HANGEUL_CHARSET = 129,
1805 GB2312_CHARSET = 134,
1806 CHINESEBIG5_CHARSET = 136,
1807 OEM_CHARSET = 255,
1808
1809 JOHAB_CHARSET = 130,
1810 HEBREW_CHARSET = 177,
1811 ARABIC_CHARSET = 178,
1812 GREEK_CHARSET = 161,
1813 TURKISH_CHARSET = 162,
1814 VIETNAMESE_CHARSET = 163,
1815 THAI_CHARSET = 222,
1816 EASTEUROPE_CHARSET = 238,
1817 RUSSIAN_CHARSET = 204,
1818
1819 MAC_CHARSET = 77,
1820 BALTIC_CHARSET = 186,
1821
1822 FS_LATIN1 = 0x00000001L,
1823 FS_LATIN2 = 0x00000002L,
1824 FS_CYRILLIC = 0x00000004L,
1825 FS_GREEK = 0x00000008L,
1826 FS_TURKISH = 0x00000010L,
1827 FS_HEBREW = 0x00000020L,
1828 FS_ARABIC = 0x00000040L,
1829 FS_BALTIC = 0x00000080L,
1830 FS_VIETNAMESE = 0x00000100L,
1831 FS_THAI = 0x00010000L,
1832 FS_JISJAPAN = 0x00020000L,
1833 FS_CHINESESIMP = 0x00040000L,
1834 FS_WANSUNG = 0x00080000L,
1835 FS_CHINESETRAD = 0x00100000L,
1836 FS_JOHAB = 0x00200000L,
1837 FS_SYMBOL = cast(int)0x80000000L,
1838
1839
1840 /* Font Families */
1841 FF_DONTCARE = (0<<4), /* Don't care or don't know. */
1842 FF_ROMAN = (1<<4), /* Variable stroke width, serifed. */
1843 /* Times Roman, Century Schoolbook, etc. */
1844 FF_SWISS = (2<<4), /* Variable stroke width, sans-serifed. */
1845 /* Helvetica, Swiss, etc. */
1846 FF_MODERN = (3<<4), /* Constant stroke width, serifed or sans-serifed. */
1847 /* Pica, Elite, Courier, etc. */
1848 FF_SCRIPT = (4<<4), /* Cursive, etc. */
1849 FF_DECORATIVE = (5<<4), /* Old English, etc. */
1850
1851 /* Font Weights */
1852 FW_DONTCARE = 0,
1853 FW_THIN = 100,
1854 FW_EXTRALIGHT = 200,
1855 FW_LIGHT = 300,
1856 FW_NORMAL = 400,
1857 FW_MEDIUM = 500,
1858 FW_SEMIBOLD = 600,
1859 FW_BOLD = 700,
1860 FW_EXTRABOLD = 800,
1861 FW_HEAVY = 900,
1862
1863 FW_ULTRALIGHT = FW_EXTRALIGHT,
1864 FW_REGULAR = FW_NORMAL,
1865 FW_DEMIBOLD = FW_SEMIBOLD,
1866 FW_ULTRABOLD = FW_EXTRABOLD,
1867 FW_BLACK = FW_HEAVY,
1868
1869 PANOSE_COUNT = 10,
1870 PAN_FAMILYTYPE_INDEX = 0,
1871 PAN_SERIFSTYLE_INDEX = 1,
1872 PAN_WEIGHT_INDEX = 2,
1873 PAN_PROPORTION_INDEX = 3,
1874 PAN_CONTRAST_INDEX = 4,
1875 PAN_STROKEVARIATION_INDEX = 5,
1876 PAN_ARMSTYLE_INDEX = 6,
1877 PAN_LETTERFORM_INDEX = 7,
1878 PAN_MIDLINE_INDEX = 8,
1879 PAN_XHEIGHT_INDEX = 9,
1880
1881 PAN_CULTURE_LATIN = 0,
1882 }
1883
1884 struct RGBQUAD {
1885 BYTE rgbBlue;
1886 BYTE rgbGreen;
1887 BYTE rgbRed;
1888 BYTE rgbReserved;
1889 }
1890 alias RGBQUAD* LPRGBQUAD;
1891
1892 struct BITMAPINFOHEADER
1893 {
1894 DWORD biSize;
1895 LONG biWidth;
1896 LONG biHeight;
1897 WORD biPlanes;
1898 WORD biBitCount;
1899 DWORD biCompression;
1900 DWORD biSizeImage;
1901 LONG biXPelsPerMeter;
1902 LONG biYPelsPerMeter;
1903 DWORD biClrUsed;
1904 DWORD biClrImportant;
1905 }
1906 alias BITMAPINFOHEADER* LPBITMAPINFOHEADER, PBITMAPINFOHEADER;
1907
1908 struct BITMAPINFO {
1909 BITMAPINFOHEADER bmiHeader;
1910 RGBQUAD bmiColors[1];
1911 }
1912 alias BITMAPINFO* LPBITMAPINFO, PBITMAPINFO;
1913
1914 struct PALETTEENTRY {
1915 BYTE peRed;
1916 BYTE peGreen;
1917 BYTE peBlue;
1918 BYTE peFlags;
1919 }
1920 alias PALETTEENTRY* PPALETTEENTRY, LPPALETTEENTRY;
1921
1922 struct LOGPALETTE {
1923 WORD palVersion;
1924 WORD palNumEntries;
1925 PALETTEENTRY palPalEntry[1];
1926 }
1927 alias LOGPALETTE* PLOGPALETTE, NPLOGPALETTE, LPLOGPALETTE;
1928
1929 /* Pixel format descriptor */
1930 struct PIXELFORMATDESCRIPTOR
1931 {
1932 WORD nSize;
1933 WORD nVersion;
1934 DWORD dwFlags;
1935 BYTE iPixelType;
1936 BYTE cColorBits;
1937 BYTE cRedBits;
1938 BYTE cRedShift;
1939 BYTE cGreenBits;
1940 BYTE cGreenShift;
1941 BYTE cBlueBits;
1942 BYTE cBlueShift;
1943 BYTE cAlphaBits;
1944 BYTE cAlphaShift;
1945 BYTE cAccumBits;
1946 BYTE cAccumRedBits;
1947 BYTE cAccumGreenBits;
1948 BYTE cAccumBlueBits;
1949 BYTE cAccumAlphaBits;
1950 BYTE cDepthBits;
1951 BYTE cStencilBits;
1952 BYTE cAuxBuffers;
1953 BYTE iLayerType;
1954 BYTE bReserved;
1955 DWORD dwLayerMask;
1956 DWORD dwVisibleMask;
1957 DWORD dwDamageMask;
1958 }
1959 alias PIXELFORMATDESCRIPTOR* PPIXELFORMATDESCRIPTOR, LPPIXELFORMATDESCRIPTOR;
1960
1961
1962 export
1963 {
1964 BOOL RoundRect(HDC, int, int, int, int, int, int);
1965 BOOL ResizePalette(HPALETTE, UINT);
1966 int SaveDC(HDC);
1967 int SelectClipRgn(HDC, HRGN);
1968 int ExtSelectClipRgn(HDC, HRGN, int);
1969 int SetMetaRgn(HDC);
1970 HGDIOBJ SelectObject(HDC, HGDIOBJ);
1971 HPALETTE SelectPalette(HDC, HPALETTE, BOOL);
1972 COLORREF SetBkColor(HDC, COLORREF);
1973 int SetBkMode(HDC, int);
1974 LONG SetBitmapBits(HBITMAP, DWORD, void *);
1975 UINT SetBoundsRect(HDC, RECT *, UINT);
1976 int SetDIBits(HDC, HBITMAP, UINT, UINT, void *, BITMAPINFO *, UINT);
1977 int SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int,
1978 int, UINT, UINT, void *, BITMAPINFO *, UINT);
1979 DWORD SetMapperFlags(HDC, DWORD);
1980 int SetGraphicsMode(HDC hdc, int iMode);
1981 int SetMapMode(HDC, int);
1982 HMETAFILE SetMetaFileBitsEx(UINT, BYTE *);
1983 UINT SetPaletteEntries(HPALETTE, UINT, UINT, PALETTEENTRY *);
1984 COLORREF SetPixel(HDC, int, int, COLORREF);
1985 BOOL SetPixelV(HDC, int, int, COLORREF);
1986 BOOL SetPixelFormat(HDC, int, PIXELFORMATDESCRIPTOR *);
1987 int SetPolyFillMode(HDC, int);
1988 BOOL StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
1989 BOOL SetRectRgn(HRGN, int, int, int, int);
1990 int StretchDIBits(HDC, int, int, int, int, int, int, int, int,
1991 void *, BITMAPINFO *, UINT, DWORD);
1992 int SetROP2(HDC, int);
1993 int SetStretchBltMode(HDC, int);
1994 UINT SetSystemPaletteUse(HDC, UINT);
1995 int SetTextCharacterExtra(HDC, int);
1996 COLORREF SetTextColor(HDC, COLORREF);
1997 UINT SetTextAlign(HDC, UINT);
1998 BOOL SetTextJustification(HDC, int, int);
1999 BOOL UpdateColors(HDC);
2000 }
2001
2002 /* Text Alignment Options */
2003 enum
2004 {
2005 TA_NOUPDATECP = 0,
2006 TA_UPDATECP = 1,
2007
2008 TA_LEFT = 0,
2009 TA_RIGHT = 2,
2010 TA_CENTER = 6,
2011
2012 TA_TOP = 0,
2013 TA_BOTTOM = 8,
2014 TA_BASELINE = 24,
2015
2016 TA_RTLREADING = 256,
2017 TA_MASK = (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING),
2018 }
2019
2020 struct POINT
2021 {
2022 LONG x;
2023 LONG y;
2024 }
2025 alias POINT* PPOINT, NPPOINT, LPPOINT;
2026
2027
2028 export
2029 {
2030 BOOL MoveToEx(HDC, int, int, LPPOINT);
2031 BOOL TextOutA(HDC, int, int, LPCSTR, int);
2032 BOOL TextOutW(HDC, int, int, LPCWSTR, int);
2033 }
2034
2035 export void PostQuitMessage(int nExitCode);
2036 export LRESULT DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
2037 export HMODULE GetModuleHandleA(LPCSTR lpModuleName);
2038
2039 alias LRESULT (* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
2040
2041 struct WNDCLASSEXA {
2042 UINT cbSize;
2043 /* Win 3.x */
2044 UINT style;
2045 WNDPROC lpfnWndProc;
2046 int cbClsExtra;
2047 int cbWndExtra;
2048 HINSTANCE hInstance;
2049 HICON hIcon;
2050 HCURSOR hCursor;
2051 HBRUSH hbrBackground;
2052 LPCSTR lpszMenuName;
2053 LPCSTR lpszClassName;
2054 /* Win 4.0 */
2055 HICON hIconSm;
2056 }
2057 alias WNDCLASSEXA* PWNDCLASSEXA, NPWNDCLASSEXA, LPWNDCLASSEXA;
2058
2059
2060 struct WNDCLASSA {
2061 UINT style;
2062 WNDPROC lpfnWndProc;
2063 int cbClsExtra;
2064 int cbWndExtra;
2065 HINSTANCE hInstance;
2066 HICON hIcon;
2067 HCURSOR hCursor;
2068 HBRUSH hbrBackground;
2069 LPCSTR lpszMenuName;
2070 LPCSTR lpszClassName;
2071 }
2072 alias WNDCLASSA* PWNDCLASSA, NPWNDCLASSA, LPWNDCLASSA;
2073 alias WNDCLASSA WNDCLASS;
2074
2075 /*
2076 * Window Styles
2077 */
2078 enum : uint
2079 {
2080 WS_OVERLAPPED = 0x00000000,
2081 WS_POPUP = 0x80000000,
2082 WS_CHILD = 0x40000000,
2083 WS_MINIMIZE = 0x20000000,
2084 WS_VISIBLE = 0x10000000,
2085 WS_DISABLED = 0x08000000,
2086 WS_CLIPSIBLINGS = 0x04000000,
2087 WS_CLIPCHILDREN = 0x02000000,
2088 WS_MAXIMIZE = 0x01000000,
2089 WS_CAPTION = 0x00C00000, /* WS_BORDER | WS_DLGFRAME */
2090 WS_BORDER = 0x00800000,
2091 WS_DLGFRAME = 0x00400000,
2092 WS_VSCROLL = 0x00200000,
2093 WS_HSCROLL = 0x00100000,
2094 WS_SYSMENU = 0x00080000,
2095 WS_THICKFRAME = 0x00040000,
2096 WS_GROUP = 0x00020000,
2097 WS_TABSTOP = 0x00010000,
2098
2099 WS_MINIMIZEBOX = 0x00020000,
2100 WS_MAXIMIZEBOX = 0x00010000,
2101
2102 WS_TILED = WS_OVERLAPPED,
2103 WS_ICONIC = WS_MINIMIZE,
2104 WS_SIZEBOX = WS_THICKFRAME,
2105
2106 /*
2107 * Common Window Styles
2108 */
2109 WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),
2110 WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW,
2111 WS_POPUPWINDOW = (WS_POPUP | WS_BORDER | WS_SYSMENU),
2112 WS_CHILDWINDOW = (WS_CHILD),
2113 }
2114
2115 /*
2116 * Class styles
2117 */
2118 enum
2119 {
2120 CS_VREDRAW = 0x0001,
2121 CS_HREDRAW = 0x0002,
2122 CS_KEYCVTWINDOW = 0x0004,
2123 CS_DBLCLKS = 0x0008,
2124 CS_OWNDC = 0x0020,
2125 CS_CLASSDC = 0x0040,
2126 CS_PARENTDC = 0x0080,
2127 CS_NOKEYCVT = 0x0100,
2128 CS_NOCLOSE = 0x0200,
2129 CS_SAVEBITS = 0x0800,
2130 CS_BYTEALIGNCLIENT = 0x1000,
2131 CS_BYTEALIGNWINDOW = 0x2000,
2132 CS_GLOBALCLASS = 0x4000,
2133
2134
2135 CS_IME = 0x00010000,
2136 }
2137
2138 export
2139 {
2140 HICON LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName);
2141 HICON LoadIconW(HINSTANCE hInstance, LPCWSTR lpIconName);
2142 HCURSOR LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName);
2143 HCURSOR LoadCursorW(HINSTANCE hInstance, LPCWSTR lpCursorName);
2144 }
2145
2146
2147 enum : LPSTR
2148 {
2149 IDI_APPLICATION = cast(LPSTR)(32512),
2150
2151 IDC_ARROW = cast(LPSTR)(32512),
2152 IDC_CROSS = cast(LPSTR)(32515),
2153 }
2154
2155
2156 /*
2157 * Color Types
2158 */
2159 enum
2160 {
2161 CTLCOLOR_MSGBOX = 0,
2162 CTLCOLOR_EDIT = 1,
2163 CTLCOLOR_LISTBOX = 2,
2164 CTLCOLOR_BTN = 3,
2165 CTLCOLOR_DLG = 4,
2166 CTLCOLOR_SCROLLBAR = 5,
2167 CTLCOLOR_STATIC = 6,
2168 CTLCOLOR_MAX = 7,
2169
2170 COLOR_SCROLLBAR = 0,
2171 COLOR_BACKGROUND = 1,
2172 COLOR_ACTIVECAPTION = 2,
2173 COLOR_INACTIVECAPTION = 3,
2174 COLOR_MENU = 4,
2175 COLOR_WINDOW = 5,
2176 COLOR_WINDOWFRAME = 6,
2177 COLOR_MENUTEXT = 7,
2178 COLOR_WINDOWTEXT = 8,
2179 COLOR_CAPTIONTEXT = 9,
2180 COLOR_ACTIVEBORDER = 10,
2181 COLOR_INACTIVEBORDER = 11,
2182 COLOR_APPWORKSPACE = 12,
2183 COLOR_HIGHLIGHT = 13,
2184 COLOR_HIGHLIGHTTEXT = 14,
2185 COLOR_BTNFACE = 15,
2186 COLOR_BTNSHADOW = 16,
2187 COLOR_GRAYTEXT = 17,
2188 COLOR_BTNTEXT = 18,
2189 COLOR_INACTIVECAPTIONTEXT = 19,
2190 COLOR_BTNHIGHLIGHT = 20,
2191
2192
2193 COLOR_3DDKSHADOW = 21,
2194 COLOR_3DLIGHT = 22,
2195 COLOR_INFOTEXT = 23,
2196 COLOR_INFOBK = 24,
2197
2198 COLOR_DESKTOP = COLOR_BACKGROUND,
2199 COLOR_3DFACE = COLOR_BTNFACE,
2200 COLOR_3DSHADOW = COLOR_BTNSHADOW,
2201 COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT,
2202 COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT,
2203 COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT,
2204 }
2205
2206 enum : int
2207 {
2208 CW_USEDEFAULT = cast(int)0x80000000
2209 }
2210
2211 /*
2212 * Special value for CreateWindow, et al.
2213 */
2214 enum : HWND
2215 {
2216 HWND_DESKTOP = cast(HWND)0,
2217 }
2218
2219 export ATOM RegisterClassA(WNDCLASSA *lpWndClass);
2220
2221 export HWND CreateWindowExA(
2222 DWORD dwExStyle,
2223 LPCSTR lpClassName,
2224 LPCSTR lpWindowName,
2225 DWORD dwStyle,
2226 int X,
2227 int Y,
2228 int nWidth,
2229 int nHeight,
2230 HWND hWndParent ,
2231 HMENU hMenu,
2232 HINSTANCE hInstance,
2233 LPVOID lpParam);
2234
2235
2236 HWND CreateWindowA(
2237 LPCSTR lpClassName,
2238 LPCSTR lpWindowName,
2239 DWORD dwStyle,
2240 int X,
2241 int Y,
2242 int nWidth,
2243 int nHeight,
2244 HWND hWndParent ,
2245 HMENU hMenu,
2246 HINSTANCE hInstance,
2247 LPVOID lpParam)
2248 {
2249 return CreateWindowExA(0, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
2250 }
2251
2252 /*
2253 * Message structure
2254 */
2255 struct MSG {
2256 HWND hwnd;
2257 UINT message;
2258 WPARAM wParam;
2259 LPARAM lParam;
2260 DWORD time;
2261 POINT pt;
2262 }
2263 alias MSG* PMSG, NPMSG, LPMSG;
2264
2265 export
2266 {
2267 BOOL GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
2268 BOOL TranslateMessage(MSG *lpMsg);
2269 LONG DispatchMessageA(MSG *lpMsg);
2270 BOOL PeekMessageA(MSG *lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
2271 HWND GetFocus();
2272 }
2273
2274 export DWORD ExpandEnvironmentStringsA(LPCSTR lpSrc, LPSTR lpDst, DWORD nSize);
2275
2276 export
2277 {
2278 BOOL IsValidCodePage(UINT CodePage);
2279 UINT GetACP();
2280 UINT GetOEMCP();
2281 //BOOL GetCPInfo(UINT CodePage, LPCPINFO lpCPInfo);
2282 BOOL IsDBCSLeadByte(BYTE TestChar);
2283 BOOL IsDBCSLeadByteEx(UINT CodePage, BYTE TestChar);
2284 int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar);
2285 int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar);
2286 }
2287
2288 export HANDLE CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName);
2289 export HANDLE CreateFileMappingW(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName);
2290
2291 export BOOL GetMailslotInfo(HANDLE hMailslot, LPDWORD lpMaxMessageSize, LPDWORD lpNextSize, LPDWORD lpMessageCount, LPDWORD lpReadTimeout);
2292 export BOOL SetMailslotInfo(HANDLE hMailslot, DWORD lReadTimeout);
2293 export LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap);
2294 export LPVOID MapViewOfFileEx(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap, LPVOID lpBaseAddress);
2295 export BOOL FlushViewOfFile(LPCVOID lpBaseAddress, DWORD dwNumberOfBytesToFlush);
2296 export BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
2297
2298 export HGDIOBJ GetStockObject(int);
2299 export BOOL ShowWindow(HWND hWnd, int nCmdShow);
2300
2301 /* Stock Logical Objects */
2302 enum
2303 { WHITE_BRUSH = 0,
2304 LTGRAY_BRUSH = 1,
2305 GRAY_BRUSH = 2,
2306 DKGRAY_BRUSH = 3,
2307 BLACK_BRUSH = 4,
2308 NULL_BRUSH = 5,
2309 HOLLOW_BRUSH = NULL_BRUSH,
2310 WHITE_PEN = 6,
2311 BLACK_PEN = 7,
2312 NULL_PEN = 8,
2313 OEM_FIXED_FONT = 10,
2314 ANSI_FIXED_FONT = 11,
2315 ANSI_VAR_FONT = 12,
2316 SYSTEM_FONT = 13,
2317 DEVICE_DEFAULT_FONT = 14,
2318 DEFAULT_PALETTE = 15,
2319 SYSTEM_FIXED_FONT = 16,
2320 DEFAULT_GUI_FONT = 17,
2321 STOCK_LAST = 17,
2322 }
2323
2324 /*
2325 * ShowWindow() Commands
2326 */
2327 enum
2328 { SW_HIDE = 0,
2329 SW_SHOWNORMAL = 1,
2330 SW_NORMAL = 1,
2331 SW_SHOWMINIMIZED = 2,
2332 SW_SHOWMAXIMIZED = 3,
2333 SW_MAXIMIZE = 3,
2334 SW_SHOWNOACTIVATE = 4,
2335 SW_SHOW = 5,
2336 SW_MINIMIZE = 6,
2337 SW_SHOWMINNOACTIVE = 7,
2338 SW_SHOWNA = 8,
2339 SW_RESTORE = 9,
2340 SW_SHOWDEFAULT = 10,
2341 SW_MAX = 10,
2342 }
2343
2344 struct TEXTMETRICA
2345 {
2346 LONG tmHeight;
2347 LONG tmAscent;
2348 LONG tmDescent;
2349 LONG tmInternalLeading;
2350 LONG tmExternalLeading;
2351 LONG tmAveCharWidth;
2352 LONG tmMaxCharWidth;
2353 LONG tmWeight;
2354 LONG tmOverhang;
2355 LONG tmDigitizedAspectX;
2356 LONG tmDigitizedAspectY;
2357 BYTE tmFirstChar;
2358 BYTE tmLastChar;
2359 BYTE tmDefaultChar;
2360 BYTE tmBreakChar;
2361 BYTE tmItalic;
2362 BYTE tmUnderlined;
2363 BYTE tmStruckOut;
2364 BYTE tmPitchAndFamily;
2365 BYTE tmCharSet;
2366 }
2367
2368 export BOOL GetTextMetricsA(HDC, TEXTMETRICA*);
2369
2370 /*
2371 * Scroll Bar Constants
2372 */
2373 enum
2374 { SB_HORZ = 0,
2375 SB_VERT = 1,
2376 SB_CTL = 2,
2377 SB_BOTH = 3,
2378 }
2379
2380 /*
2381 * Scroll Bar Commands
2382 */
2383 enum
2384 { SB_LINEUP = 0,
2385 SB_LINELEFT = 0,
2386 SB_LINEDOWN = 1,
2387 SB_LINERIGHT = 1,
2388 SB_PAGEUP = 2,
2389 SB_PAGELEFT = 2,
2390 SB_PAGEDOWN = 3,
2391 SB_PAGERIGHT = 3,
2392 SB_THUMBPOSITION = 4,
2393 SB_THUMBTRACK = 5,
2394 SB_TOP = 6,
2395 SB_LEFT = 6,
2396 SB_BOTTOM = 7,
2397 SB_RIGHT = 7,
2398 SB_ENDSCROLL = 8,
2399 }
2400
2401 export int SetScrollPos(HWND hWnd, int nBar, int nPos, BOOL bRedraw);
2402 export int GetScrollPos(HWND hWnd, int nBar);
2403 export BOOL SetScrollRange(HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw);
2404 export BOOL GetScrollRange(HWND hWnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos);
2405 export BOOL ShowScrollBar(HWND hWnd, int wBar, BOOL bShow);
2406 export BOOL EnableScrollBar(HWND hWnd, UINT wSBflags, UINT wArrows);
2407
2408 /*
2409 * LockWindowUpdate API
2410 */
2411
2412 export BOOL LockWindowUpdate(HWND hWndLock);
2413 export BOOL ScrollWindow(HWND hWnd, int XAmount, int YAmount, RECT* lpRect, RECT* lpClipRect);
2414 export BOOL ScrollDC(HDC hDC, int dx, int dy, RECT* lprcScroll, RECT* lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate);
2415 export int ScrollWindowEx(HWND hWnd, int dx, int dy, RECT* prcScroll, RECT* prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags);
2416
2417 /*
2418 * Virtual Keys, Standard Set
2419 */
2420 enum
2421 { VK_LBUTTON = 0x01,
2422 VK_RBUTTON = 0x02,
2423 VK_CANCEL = 0x03,
2424 VK_MBUTTON = 0x04, /* NOT contiguous with L & RBUTTON */
2425
2426 VK_BACK = 0x08,
2427 VK_TAB = 0x09,
2428
2429 VK_CLEAR = 0x0C,
2430 VK_RETURN = 0x0D,
2431
2432 VK_SHIFT = 0x10,
2433 VK_CONTROL = 0x11,
2434 VK_MENU = 0x12,
2435 VK_PAUSE = 0x13,
2436 VK_CAPITAL = 0x14,
2437
2438
2439 VK_ESCAPE = 0x1B,
2440
2441 VK_SPACE = 0x20,
2442 VK_PRIOR = 0x21,
2443 VK_NEXT = 0x22,
2444 VK_END = 0x23,
2445 VK_HOME = 0x24,
2446 VK_LEFT = 0x25,
2447 VK_UP = 0x26,
2448 VK_RIGHT = 0x27,
2449 VK_DOWN = 0x28,
2450 VK_SELECT = 0x29,
2451 VK_PRINT = 0x2A,
2452 VK_EXECUTE = 0x2B,
2453 VK_SNAPSHOT = 0x2C,
2454 VK_INSERT = 0x2D,
2455 VK_DELETE = 0x2E,
2456 VK_HELP = 0x2F,
2457
2458 /* VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */
2459 /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */
2460
2461 VK_LWIN = 0x5B,
2462 VK_RWIN = 0x5C,
2463 VK_APPS = 0x5D,
2464
2465 VK_NUMPAD0 = 0x60,
2466 VK_NUMPAD1 = 0x61,
2467 VK_NUMPAD2 = 0x62,
2468 VK_NUMPAD3 = 0x63,
2469 VK_NUMPAD4 = 0x64,
2470 VK_NUMPAD5 = 0x65,
2471 VK_NUMPAD6 = 0x66,
2472 VK_NUMPAD7 = 0x67,
2473 VK_NUMPAD8 = 0x68,
2474 VK_NUMPAD9 = 0x69,
2475 VK_MULTIPLY = 0x6A,
2476 VK_ADD = 0x6B,
2477 VK_SEPARATOR = 0x6C,
2478 VK_SUBTRACT = 0x6D,
2479 VK_DECIMAL = 0x6E,
2480 VK_DIVIDE = 0x6F,
2481 VK_F1 = 0x70,
2482 VK_F2 = 0x71,
2483 VK_F3 = 0x72,
2484 VK_F4 = 0x73,
2485 VK_F5 = 0x74,
2486 VK_F6 = 0x75,
2487 VK_F7 = 0x76,
2488 VK_F8 = 0x77,
2489 VK_F9 = 0x78,
2490 VK_F10 = 0x79,
2491 VK_F11 = 0x7A,
2492 VK_F12 = 0x7B,
2493 VK_F13 = 0x7C,
2494 VK_F14 = 0x7D,
2495 VK_F15 = 0x7E,
2496 VK_F16 = 0x7F,
2497 VK_F17 = 0x80,
2498 VK_F18 = 0x81,
2499 VK_F19 = 0x82,
2500 VK_F20 = 0x83,
2501 VK_F21 = 0x84,
2502 VK_F22 = 0x85,
2503 VK_F23 = 0x86,
2504 VK_F24 = 0x87,
2505
2506 VK_NUMLOCK = 0x90,
2507 VK_SCROLL = 0x91,
2508
2509 /*
2510 * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
2511 * Used only as parameters to GetAsyncKeyState() and GetKeyState().
2512 * No other API or message will distinguish left and right keys in this way.
2513 */
2514 VK_LSHIFT = 0xA0,
2515 VK_RSHIFT = 0xA1,
2516 VK_LCONTROL = 0xA2,
2517 VK_RCONTROL = 0xA3,
2518 VK_LMENU = 0xA4,
2519 VK_RMENU = 0xA5,
2520
2521
2522 VK_PROCESSKEY = 0xE5,
2523
2524
2525 VK_ATTN = 0xF6,
2526 VK_CRSEL = 0xF7,
2527 VK_EXSEL = 0xF8,
2528 VK_EREOF = 0xF9,
2529 VK_PLAY = 0xFA,
2530 VK_ZOOM = 0xFB,
2531 VK_NONAME = 0xFC,
2532 VK_PA1 = 0xFD,
2533 VK_OEM_CLEAR = 0xFE,
2534 }
2535
2536 export LRESULT SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
2537
2538 alias UINT (*LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
2539
2540 struct OPENFILENAMEA {
2541 DWORD lStructSize;
2542 HWND hwndOwner;
2543 HINSTANCE hInstance;
2544 LPCSTR lpstrFilter;
2545 LPSTR lpstrCustomFilter;
2546 DWORD nMaxCustFilter;
2547 DWORD nFilterIndex;
2548 LPSTR lpstrFile;
2549 DWORD nMaxFile;
2550 LPSTR lpstrFileTitle;
2551 DWORD nMaxFileTitle;
2552 LPCSTR lpstrInitialDir;
2553 LPCSTR lpstrTitle;
2554 DWORD Flags;
2555 WORD nFileOffset;
2556 WORD nFileExtension;
2557 LPCSTR lpstrDefExt;
2558 LPARAM lCustData;
2559 LPOFNHOOKPROC lpfnHook;
2560 LPCSTR lpTemplateName;
2561 }
2562 alias OPENFILENAMEA *LPOPENFILENAMEA;
2563
2564 struct OPENFILENAMEW {
2565 DWORD lStructSize;
2566 HWND hwndOwner;
2567 HINSTANCE hInstance;
2568 LPCWSTR lpstrFilter;
2569 LPWSTR lpstrCustomFilter;
2570 DWORD nMaxCustFilter;
2571 DWORD nFilterIndex;
2572 LPWSTR lpstrFile;
2573 DWORD nMaxFile;
2574 LPWSTR lpstrFileTitle;
2575 DWORD nMaxFileTitle;
2576 LPCWSTR lpstrInitialDir;
2577 LPCWSTR lpstrTitle;
2578 DWORD Flags;
2579 WORD nFileOffset;
2580 WORD nFileExtension;
2581 LPCWSTR lpstrDefExt;
2582 LPARAM lCustData;
2583 LPOFNHOOKPROC lpfnHook;
2584 LPCWSTR lpTemplateName;
2585 }
2586 alias OPENFILENAMEW *LPOPENFILENAMEW;
2587
2588 BOOL GetOpenFileNameA(LPOPENFILENAMEA);
2589 BOOL GetOpenFileNameW(LPOPENFILENAMEW);
2590
2591 BOOL GetSaveFileNameA(LPOPENFILENAMEA);
2592 BOOL GetSaveFileNameW(LPOPENFILENAMEW);
2593
2594 short GetFileTitleA(LPCSTR, LPSTR, WORD);
2595 short GetFileTitleW(LPCWSTR, LPWSTR, WORD);
2596
2597 enum
2598 {
2599 PM_NOREMOVE = 0x0000,
2600 PM_REMOVE = 0x0001,
2601 PM_NOYIELD = 0x0002,
2602 }
2603
2604 /* Bitmap Header Definition */
2605 struct BITMAP
2606 {
2607 LONG bmType;
2608 LONG bmWidth;
2609 LONG bmHeight;
2610 LONG bmWidthBytes;
2611 WORD bmPlanes;
2612 WORD bmBitsPixel;
2613 LPVOID bmBits;
2614 }
2615 alias BITMAP* PBITMAP, NPBITMAP, LPBITMAP;
2616
2617
2618 export HDC CreateCompatibleDC(HDC);
2619
2620 export int GetObjectA(HGDIOBJ, int, LPVOID);
2621 export int GetObjectW(HGDIOBJ, int, LPVOID);
2622 export BOOL DeleteDC(HDC);
2623
2624 struct LOGFONTA
2625 {
2626 LONG lfHeight;
2627 LONG lfWidth;
2628 LONG lfEscapement;
2629 LONG lfOrientation;
2630 LONG lfWeight;
2631 BYTE lfItalic;
2632 BYTE lfUnderline;
2633 BYTE lfStrikeOut;
2634 BYTE lfCharSet;
2635 BYTE lfOutPrecision;
2636 BYTE lfClipPrecision;
2637 BYTE lfQuality;
2638 BYTE lfPitchAndFamily;
2639 CHAR lfFaceName[32 ];
2640 }
2641 alias LOGFONTA* PLOGFONTA, NPLOGFONTA, LPLOGFONTA;
2642
2643 export HMENU LoadMenuA(HINSTANCE hInstance, LPCSTR lpMenuName);
2644 export HMENU LoadMenuW(HINSTANCE hInstance, LPCWSTR lpMenuName);
2645
2646 export HMENU GetSubMenu(HMENU hMenu, int nPos);
2647
2648 export HBITMAP LoadBitmapA(HINSTANCE hInstance, LPCSTR lpBitmapName);
2649 export HBITMAP LoadBitmapW(HINSTANCE hInstance, LPCWSTR lpBitmapName);
2650
2651 LPSTR MAKEINTRESOURCEA(int i) { return cast(LPSTR)(cast(DWORD)(cast(WORD)(i))); }
2652
2653 export HFONT CreateFontIndirectA(LOGFONTA *);
2654
2655 export BOOL MessageBeep(UINT uType);
2656 export int ShowCursor(BOOL bShow);
2657 export BOOL SetCursorPos(int X, int Y);
2658 export HCURSOR SetCursor(HCURSOR hCursor);
2659 export BOOL GetCursorPos(LPPOINT lpPoint);
2660 export BOOL ClipCursor( RECT *lpRect);
2661 export BOOL GetClipCursor(LPRECT lpRect);
2662 export HCURSOR GetCursor();
2663 export BOOL CreateCaret(HWND hWnd, HBITMAP hBitmap , int nWidth, int nHeight);
2664 export UINT GetCaretBlinkTime();
2665 export BOOL SetCaretBlinkTime(UINT uMSeconds);
2666 export BOOL DestroyCaret();
2667 export BOOL HideCaret(HWND hWnd);
2668 export BOOL ShowCaret(HWND hWnd);
2669 export BOOL SetCaretPos(int X, int Y);
2670 export BOOL GetCaretPos(LPPOINT lpPoint);
2671 export BOOL ClientToScreen(HWND hWnd, LPPOINT lpPoint);
2672 export BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint);
2673 export int MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints);
2674 export HWND WindowFromPoint(POINT Point);
2675 export HWND ChildWindowFromPoint(HWND hWndParent, POINT Point);
2676
2677
2678 export BOOL TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y,
2679 int nReserved, HWND hWnd, RECT *prcRect);
2680
2681 align (2) struct DLGTEMPLATE {
2682 DWORD style;
2683 DWORD dwExtendedStyle;
2684 WORD cdit;
2685 short x;
2686 short y;
2687 short cx;
2688 short cy;
2689 }
2690 alias DLGTEMPLATE *LPDLGTEMPLATEA;
2691 alias DLGTEMPLATE *LPDLGTEMPLATEW;
2692
2693
2694 alias LPDLGTEMPLATEA LPDLGTEMPLATE;
2695
2696 alias DLGTEMPLATE *LPCDLGTEMPLATEA;
2697 alias DLGTEMPLATE *LPCDLGTEMPLATEW;
2698
2699
2700 alias LPCDLGTEMPLATEA LPCDLGTEMPLATE;
2701
2702
2703 export int DialogBoxParamA(HINSTANCE hInstance, LPCSTR lpTemplateName,
2704 HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);
2705 export int DialogBoxIndirectParamA(HINSTANCE hInstance,
2706 LPCDLGTEMPLATEA hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc,
2707 LPARAM dwInitParam);
2708
2709 enum : DWORD
2710 {
2711 SRCCOPY = cast(DWORD)0x00CC0020, /* dest = source */
2712 SRCPAINT = cast(DWORD)0x00EE0086, /* dest = source OR dest */
2713 SRCAND = cast(DWORD)0x008800C6, /* dest = source AND dest */
2714 SRCINVERT = cast(DWORD)0x00660046, /* dest = source XOR dest */
2715 SRCERASE = cast(DWORD)0x00440328, /* dest = source AND (NOT dest) */
2716 NOTSRCCOPY = cast(DWORD)0x00330008, /* dest = (NOT source) */
2717 NOTSRCERASE = cast(DWORD)0x001100A6, /* dest = (NOT src) AND (NOT dest) */
2718 MERGECOPY = cast(DWORD)0x00C000CA, /* dest = (source AND pattern) */
2719 MERGEPAINT = cast(DWORD)0x00BB0226, /* dest = (NOT source) OR dest */
2720 PATCOPY = cast(DWORD)0x00F00021, /* dest = pattern */
2721 PATPAINT = cast(DWORD)0x00FB0A09, /* dest = DPSnoo */
2722 PATINVERT = cast(DWORD)0x005A0049, /* dest = pattern XOR dest */
2723 DSTINVERT = cast(DWORD)0x00550009, /* dest = (NOT dest) */
2724 BLACKNESS = cast(DWORD)0x00000042, /* dest = BLACK */
2725 WHITENESS = cast(DWORD)0x00FF0062, /* dest = WHITE */
2726 }
2727
2728 enum
2729 {
2730 SND_SYNC = 0x0000, /* play synchronously (default) */
2731 SND_ASYNC = 0x0001, /* play asynchronously */
2732 SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
2733 SND_MEMORY = 0x0004, /* pszSound points to a memory file */
2734 SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
2735 SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */
2736
2737 SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
2738 SND_ALIAS = 0x00010000, /* name is a registry alias */
2739 SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
2740 SND_FILENAME = 0x00020000, /* name is file name */
2741 SND_RESOURCE = 0x00040004, /* name is resource name or atom */
2742
2743 SND_PURGE = 0x0040, /* purge non-static events for task */
2744 SND_APPLICATION = 0x0080, /* look for application specific association */
2745
2746
2747 SND_ALIAS_START = 0, /* alias base */
2748 }
2749
2750 export BOOL PlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
2751 export BOOL PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound);
2752
2753 export int GetClipBox(HDC, LPRECT);
2754 export int GetClipRgn(HDC, HRGN);
2755 export int GetMetaRgn(HDC, HRGN);
2756 export HGDIOBJ GetCurrentObject(HDC, UINT);
2757 export BOOL GetCurrentPositionEx(HDC, LPPOINT);
2758 export int GetDeviceCaps(HDC, int);
2759
2760 struct LOGPEN
2761 {
2762 UINT lopnStyle;
2763 POINT lopnWidth;
2764 COLORREF lopnColor;
2765 }
2766 alias LOGPEN* PLOGPEN, NPLOGPEN, LPLOGPEN;
2767
2768 enum
2769 {
2770 PS_SOLID = 0,
2771 PS_DASH = 1, /* ------- */
2772 PS_DOT = 2, /* ....... */
2773 PS_DASHDOT = 3, /* _._._._ */
2774 PS_DASHDOTDOT = 4, /* _.._.._ */
2775 PS_NULL = 5,
2776 PS_INSIDEFRAME = 6,
2777 PS_USERSTYLE = 7,
2778 PS_ALTERNATE = 8,
2779 PS_STYLE_MASK = 0x0000000F,
2780
2781 PS_ENDCAP_ROUND = 0x00000000,
2782 PS_ENDCAP_SQUARE = 0x00000100,
2783 PS_ENDCAP_FLAT = 0x00000200,
2784 PS_ENDCAP_MASK = 0x00000F00,
2785
2786 PS_JOIN_ROUND = 0x00000000,
2787 PS_JOIN_BEVEL = 0x00001000,
2788 PS_JOIN_MITER = 0x00002000,
2789 PS_JOIN_MASK = 0x0000F000,
2790
2791 PS_COSMETIC = 0x00000000,
2792 PS_GEOMETRIC = 0x00010000,
2793 PS_TYPE_MASK = 0x000F0000,
2794 }
2795
2796 export HPALETTE CreatePalette(LOGPALETTE *);
2797 export HPEN CreatePen(int, int, COLORREF);
2798 export HPEN CreatePenIndirect(LOGPEN *);
2799 export HRGN CreatePolyPolygonRgn(POINT *, INT *, int, int);
2800 export HBRUSH CreatePatternBrush(HBITMAP);
2801 export HRGN CreateRectRgn(int, int, int, int);
2802 export HRGN CreateRectRgnIndirect(RECT *);
2803 export HRGN CreateRoundRectRgn(int, int, int, int, int, int);
2804 export BOOL CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR);
2805 export BOOL CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);
2806
2807 COLORREF RGB(int r, int g, int b)
2808 {
2809 return cast(COLORREF)
2810 ((cast(BYTE)r|(cast(WORD)(cast(BYTE)g)<<8))|((cast(DWORD)cast(BYTE)b)<<16));
2811 }
2812
2813 export BOOL LineTo(HDC, int, int);
2814 export BOOL DeleteObject(HGDIOBJ);
2815 export int FillRect(HDC hDC, RECT *lprc, HBRUSH hbr);
2816
2817
2818 export BOOL EndDialog(HWND hDlg, int nResult);
2819 export HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
2820
2821 export BOOL SetDlgItemInt(HWND hDlg, int nIDDlgItem, UINT uValue, BOOL bSigned);
2822 export UINT GetDlgItemInt(HWND hDlg, int nIDDlgItem, BOOL *lpTranslated,
2823 BOOL bSigned);
2824
2825 export BOOL SetDlgItemTextA(HWND hDlg, int nIDDlgItem, LPCSTR lpString);
2826 export BOOL SetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPCWSTR lpString);
2827
2828 export UINT GetDlgItemTextA(HWND hDlg, int nIDDlgItem, LPSTR lpString, int nMaxCount);
2829 export UINT GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount);
2830
2831 export BOOL CheckDlgButton(HWND hDlg, int nIDButton, UINT uCheck);
2832 export BOOL CheckRadioButton(HWND hDlg, int nIDFirstButton, int nIDLastButton,
2833 int nIDCheckButton);
2834
2835 export UINT IsDlgButtonChecked(HWND hDlg, int nIDButton);
2836
2837 export HWND SetFocus(HWND hWnd);
2838
2839 export int wsprintfA(LPSTR, LPCSTR, ...);
2840 export int wsprintfW(LPWSTR, LPCWSTR, ...);
2841
2842 enum : uint
2843 {
2844 INFINITE = uint.max,
2845 WAIT_OBJECT_0 = 0,
2846 WAIT_ABANDONED_0 = 0x80,
2847 WAIT_TIMEOUT = 0x102,
2848 WAIT_IO_COMPLETION = 0xc0,
2849 WAIT_ABANDONED = 0x80,
2850 WAIT_FAILED = uint.max,
2851 }
2852
2853 export HANDLE CreateSemaphoreA(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName);
2854 export HANDLE OpenSemaphoreA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName);
2855 export BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);
2856
2857 struct COORD {
2858 SHORT X;
2859 SHORT Y;
2860 }
2861 alias COORD *PCOORD;
2862
2863 struct SMALL_RECT {
2864 SHORT Left;
2865 SHORT Top;
2866 SHORT Right;
2867 SHORT Bottom;
2868 }
2869 alias SMALL_RECT *PSMALL_RECT;
2870
2871 struct KEY_EVENT_RECORD {
2872 BOOL bKeyDown;
2873 WORD wRepeatCount;
2874 WORD wVirtualKeyCode;
2875 WORD wVirtualScanCode;
2876 union {
2877 WCHAR UnicodeChar;
2878 CHAR AsciiChar;
2879 }
2880 DWORD dwControlKeyState;
2881 }
2882 alias KEY_EVENT_RECORD *PKEY_EVENT_RECORD;
2883
2884 //
2885 // ControlKeyState flags
2886 //
2887
2888 enum
2889 {
2890 RIGHT_ALT_PRESSED = 0x0001, // the right alt key is pressed.
2891 LEFT_ALT_PRESSED = 0x0002, // the left alt key is pressed.
2892 RIGHT_CTRL_PRESSED = 0x0004, // the right ctrl key is pressed.
2893 LEFT_CTRL_PRESSED = 0x0008, // the left ctrl key is pressed.
2894 SHIFT_PRESSED = 0x0010, // the shift key is pressed.
2895 NUMLOCK_ON = 0x0020, // the numlock light is on.
2896 SCROLLLOCK_ON = 0x0040, // the scrolllock light is on.
2897 CAPSLOCK_ON = 0x0080, // the capslock light is on.
2898 ENHANCED_KEY = 0x0100, // the key is enhanced.
2899 }
2900
2901 struct MOUSE_EVENT_RECORD {
2902 COORD dwMousePosition;
2903 DWORD dwButtonState;
2904 DWORD dwControlKeyState;
2905 DWORD dwEventFlags;
2906 }
2907 alias MOUSE_EVENT_RECORD *PMOUSE_EVENT_RECORD;
2908
2909 //
2910 // ButtonState flags
2911 //
2912 enum
2913 {
2914 FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001,
2915 RIGHTMOST_BUTTON_PRESSED = 0x0002,
2916 FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004,
2917 FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008,
2918 FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010,
2919 }
2920
2921 //
2922 // EventFlags
2923 //
2924
2925 enum
2926 {
2927 MOUSE_MOVED = 0x0001,
2928 DOUBLE_CLICK = 0x0002,
2929 }
2930
2931 struct WINDOW_BUFFER_SIZE_RECORD {
2932 COORD dwSize;
2933 }
2934 alias WINDOW_BUFFER_SIZE_RECORD *PWINDOW_BUFFER_SIZE_RECORD;
2935
2936 struct MENU_EVENT_RECORD {
2937 UINT dwCommandId;
2938 }
2939 alias MENU_EVENT_RECORD *PMENU_EVENT_RECORD;
2940
2941 struct FOCUS_EVENT_RECORD {
2942 BOOL bSetFocus;
2943 }
2944 alias FOCUS_EVENT_RECORD *PFOCUS_EVENT_RECORD;
2945
2946 struct INPUT_RECORD {
2947 WORD EventType;
2948 union {
2949 KEY_EVENT_RECORD KeyEvent;
2950 MOUSE_EVENT_RECORD MouseEvent;
2951 WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
2952 MENU_EVENT_RECORD MenuEvent;
2953 FOCUS_EVENT_RECORD FocusEvent;
2954 }
2955 }
2956 alias INPUT_RECORD *PINPUT_RECORD;
2957
2958 //
2959 // EventType flags:
2960 //
2961
2962 enum
2963 {
2964 KEY_EVENT = 0x0001, // Event contains key event record
2965 MOUSE_EVENT = 0x0002, // Event contains mouse event record
2966 WINDOW_BUFFER_SIZE_EVENT = 0x0004, // Event contains window change event record
2967 MENU_EVENT = 0x0008, // Event contains menu event record
2968 FOCUS_EVENT = 0x0010, // event contains focus change
2969 }
2970
2971 struct CHAR_INFO {
2972 union {
2973 WCHAR UnicodeChar;
2974 CHAR AsciiChar;
2975 }
2976 WORD Attributes;
2977 }
2978 alias CHAR_INFO *PCHAR_INFO;
2979
2980 //
2981 // Attributes flags:
2982 //
2983
2984 enum
2985 {
2986 FOREGROUND_BLUE = 0x0001, // text color contains blue.
2987 FOREGROUND_GREEN = 0x0002, // text color contains green.
2988 FOREGROUND_RED = 0x0004, // text color contains red.
2989 FOREGROUND_INTENSITY = 0x0008, // text color is intensified.
2990 BACKGROUND_BLUE = 0x0010, // background color contains blue.
2991 BACKGROUND_GREEN = 0x0020, // background color contains green.
2992 BACKGROUND_RED = 0x0040, // background color contains red.
2993 BACKGROUND_INTENSITY = 0x0080, // background color is intensified.
2994 }
2995
2996 struct CONSOLE_SCREEN_BUFFER_INFO {
2997 COORD dwSize;
2998 COORD dwCursorPosition;
2999 WORD wAttributes;
3000 SMALL_RECT srWindow;
3001 COORD dwMaximumWindowSize;
3002 }
3003 alias CONSOLE_SCREEN_BUFFER_INFO *PCONSOLE_SCREEN_BUFFER_INFO;
3004
3005 struct CONSOLE_CURSOR_INFO {
3006 DWORD dwSize;
3007 BOOL bVisible;
3008 }
3009 alias CONSOLE_CURSOR_INFO *PCONSOLE_CURSOR_INFO;
3010
3011 enum
3012 {
3013 ENABLE_PROCESSED_INPUT = 0x0001,
3014 ENABLE_LINE_INPUT = 0x0002,
3015 ENABLE_ECHO_INPUT = 0x0004,
3016 ENABLE_WINDOW_INPUT = 0x0008,
3017 ENABLE_MOUSE_INPUT = 0x0010,
3018 }
3019
3020 enum
3021 {
3022 ENABLE_PROCESSED_OUTPUT = 0x0001,
3023 ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002,
3024 }
3025
3026 BOOL PeekConsoleInputA(HANDLE hConsoleInput, PINPUT_RECORD lpBuffer, DWORD nLength, LPDWORD lpNumberOfEventsRead);
3027 BOOL PeekConsoleInputW(HANDLE hConsoleInput, PINPUT_RECORD lpBuffer, DWORD nLength, LPDWORD lpNumberOfEventsRead);
3028 BOOL ReadConsoleInputA(HANDLE hConsoleInput, PINPUT_RECORD lpBuffer, DWORD nLength, LPDWORD lpNumberOfEventsRead);
3029 BOOL ReadConsoleInputW(HANDLE hConsoleInput, PINPUT_RECORD lpBuffer, DWORD nLength, LPDWORD lpNumberOfEventsRead);
3030 BOOL WriteConsoleInputA(HANDLE hConsoleInput, in INPUT_RECORD *lpBuffer, DWORD nLength, LPDWORD lpNumberOfEventsWritten);
3031 BOOL WriteConsoleInputW(HANDLE hConsoleInput, in INPUT_RECORD *lpBuffer, DWORD nLength, LPDWORD lpNumberOfEventsWritten);
3032 BOOL ReadConsoleOutputA(HANDLE hConsoleOutput, PCHAR_INFO lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, PSMALL_RECT lpReadRegion);
3033 BOOL ReadConsoleOutputW(HANDLE hConsoleOutput, PCHAR_INFO lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, PSMALL_RECT lpReadRegion);
3034 BOOL WriteConsoleOutputA(HANDLE hConsoleOutput, in CHAR_INFO *lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, PSMALL_RECT lpWriteRegion);
3035 BOOL WriteConsoleOutputW(HANDLE hConsoleOutput, in CHAR_INFO *lpBuffer, COORD dwBufferSize, COORD dwBufferCoord, PSMALL_RECT lpWriteRegion);
3036 BOOL ReadConsoleOutputCharacterA(HANDLE hConsoleOutput, LPSTR lpCharacter, DWORD nLength, COORD dwReadCoord, LPDWORD lpNumberOfCharsRead);
3037 BOOL ReadConsoleOutputCharacterW(HANDLE hConsoleOutput, LPWSTR lpCharacter, DWORD nLength, COORD dwReadCoord, LPDWORD lpNumberOfCharsRead);
3038 BOOL ReadConsoleOutputAttribute(HANDLE hConsoleOutput, LPWORD lpAttribute, DWORD nLength, COORD dwReadCoord, LPDWORD lpNumberOfAttrsRead);
3039 BOOL WriteConsoleOutputCharacterA(HANDLE hConsoleOutput, LPCSTR lpCharacter, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten);
3040 BOOL WriteConsoleOutputCharacterW(HANDLE hConsoleOutput, LPCWSTR lpCharacter, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten);
3041 BOOL WriteConsoleOutputAttribute(HANDLE hConsoleOutput, in WORD *lpAttribute, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfAttrsWritten);
3042 BOOL FillConsoleOutputCharacterA(HANDLE hConsoleOutput, CHAR cCharacter, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten);
3043 BOOL FillConsoleOutputCharacterW(HANDLE hConsoleOutput, WCHAR cCharacter, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten);
3044 BOOL FillConsoleOutputAttribute(HANDLE hConsoleOutput, WORD wAttribute, DWORD nLength, COORD dwWriteCoord, LPDWORD lpNumberOfAttrsWritten);
3045 BOOL GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode);
3046 BOOL GetNumberOfConsoleInputEvents(HANDLE hConsoleInput, LPDWORD lpNumberOfEvents);
3047 BOOL GetConsoleScreenBufferInfo(HANDLE hConsoleOutput, PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo);
3048 COORD GetLargestConsoleWindowSize( HANDLE hConsoleOutput);
3049 BOOL GetConsoleCursorInfo(HANDLE hConsoleOutput, PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);
3050 BOOL GetNumberOfConsoleMouseButtons( LPDWORD lpNumberOfMouseButtons);
3051 BOOL SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode);
3052 BOOL SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput);
3053 BOOL FlushConsoleInputBuffer(HANDLE hConsoleInput);
3054 BOOL SetConsoleScreenBufferSize(HANDLE hConsoleOutput, COORD dwSize);
3055 BOOL SetConsoleCursorPosition(HANDLE hConsoleOutput, COORD dwCursorPosition);
3056 BOOL SetConsoleCursorInfo(HANDLE hConsoleOutput, in CONSOLE_CURSOR_INFO *lpConsoleCursorInfo);
3057 BOOL ScrollConsoleScreenBufferA(HANDLE hConsoleOutput, in SMALL_RECT *lpScrollRectangle, in SMALL_RECT *lpClipRectangle, COORD dwDestinationOrigin, in CHAR_INFO *lpFill);
3058 BOOL ScrollConsoleScreenBufferW(HANDLE hConsoleOutput, in SMALL_RECT *lpScrollRectangle, in SMALL_RECT *lpClipRectangle, COORD dwDestinationOrigin, in CHAR_INFO *lpFill);
3059 BOOL SetConsoleWindowInfo(HANDLE hConsoleOutput, BOOL bAbsolute, in SMALL_RECT *lpConsoleWindow);
3060 BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
3061 alias BOOL(*PHANDLER_ROUTINE)(DWORD CtrlType);
3062 BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, BOOL Add);
3063 BOOL GenerateConsoleCtrlEvent( DWORD dwCtrlEvent, DWORD dwProcessGroupId);
3064 BOOL AllocConsole();
3065 BOOL FreeConsole();
3066 DWORD GetConsoleTitleA(LPSTR lpConsoleTitle, DWORD nSize);
3067 DWORD GetConsoleTitleW(LPWSTR lpConsoleTitle, DWORD nSize);
3068 BOOL SetConsoleTitleA(LPCSTR lpConsoleTitle);
3069 BOOL SetConsoleTitleW(LPCWSTR lpConsoleTitle);
3070 BOOL ReadConsoleA(HANDLE hConsoleInput, LPVOID lpBuffer, DWORD nNumberOfCharsToRead, LPDWORD lpNumberOfCharsRead, LPVOID lpReserved);
3071 BOOL ReadConsoleW(HANDLE hConsoleInput, LPVOID lpBuffer, DWORD nNumberOfCharsToRead, LPDWORD lpNumberOfCharsRead, LPVOID lpReserved);
3072 BOOL WriteConsoleA(HANDLE hConsoleOutput, in void *lpBuffer, DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved);
3073 BOOL WriteConsoleW(HANDLE hConsoleOutput, in void *lpBuffer, DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved);
3074 HANDLE CreateConsoleScreenBuffer(DWORD dwDesiredAccess, DWORD dwShareMode, in SECURITY_ATTRIBUTES *lpSecurityAttributes, DWORD dwFlags, LPVOID lpScreenBufferData);
3075 UINT GetConsoleCP();
3076 BOOL SetConsoleCP( UINT wCodePageID);
3077 UINT GetConsoleOutputCP();
3078 BOOL SetConsoleOutputCP(UINT wCodePageID);
3079
3080 enum
3081 {
3082 CONSOLE_TEXTMODE_BUFFER = 1,
3083 }
3084
3085 enum
3086 {
3087 SM_CXSCREEN = 0,
3088 SM_CYSCREEN = 1,
3089 SM_CXVSCROLL = 2,
3090 SM_CYHSCROLL = 3,
3091 SM_CYCAPTION = 4,
3092 SM_CXBORDER = 5,
3093 SM_CYBORDER = 6,
3094 SM_CXDLGFRAME = 7,
3095 SM_CYDLGFRAME = 8,
3096 SM_CYVTHUMB = 9,
3097 SM_CXHTHUMB = 10,
3098 SM_CXICON = 11,
3099 SM_CYICON = 12,
3100 SM_CXCURSOR = 13,
3101 SM_CYCURSOR = 14,
3102 SM_CYMENU = 15,
3103 SM_CXFULLSCREEN = 16,
3104 SM_CYFULLSCREEN = 17,
3105 SM_CYKANJIWINDOW = 18,
3106 SM_MOUSEPRESENT = 19,
3107 SM_CYVSCROLL = 20,
3108 SM_CXHSCROLL = 21,
3109 SM_DEBUG = 22,
3110 SM_SWAPBUTTON = 23,
3111 SM_RESERVED1 = 24,
3112 SM_RESERVED2 = 25,
3113 SM_RESERVED3 = 26,
3114 SM_RESERVED4 = 27,
3115 SM_CXMIN = 28,
3116 SM_CYMIN = 29,
3117 SM_CXSIZE = 30,
3118 SM_CYSIZE = 31,
3119 SM_CXFRAME = 32,
3120 SM_CYFRAME = 33,
3121 SM_CXMINTRACK = 34,
3122 SM_CYMINTRACK = 35,
3123 SM_CXDOUBLECLK = 36,
3124 SM_CYDOUBLECLK = 37,
3125 SM_CXICONSPACING = 38,
3126 SM_CYICONSPACING = 39,
3127 SM_MENUDROPALIGNMENT = 40,
3128 SM_PENWINDOWS = 41,
3129 SM_DBCSENABLED = 42,
3130 SM_CMOUSEBUTTONS = 43,
3131
3132
3133 SM_CXFIXEDFRAME = SM_CXDLGFRAME,
3134 SM_CYFIXEDFRAME = SM_CYDLGFRAME,
3135 SM_CXSIZEFRAME = SM_CXFRAME,
3136 SM_CYSIZEFRAME = SM_CYFRAME,
3137
3138 SM_SECURE = 44,
3139 SM_CXEDGE = 45,
3140 SM_CYEDGE = 46,
3141 SM_CXMINSPACING = 47,
3142 SM_CYMINSPACING = 48,
3143 SM_CXSMICON = 49,
3144 SM_CYSMICON = 50,
3145 SM_CYSMCAPTION = 51,
3146 SM_CXSMSIZE = 52,
3147 SM_CYSMSIZE = 53,
3148 SM_CXMENUSIZE = 54,
3149 SM_CYMENUSIZE = 55,
3150 SM_ARRANGE = 56,
3151 SM_CXMINIMIZED = 57,
3152 SM_CYMINIMIZED = 58,
3153 SM_CXMAXTRACK = 59,
3154 SM_CYMAXTRACK = 60,
3155 SM_CXMAXIMIZED = 61,
3156 SM_CYMAXIMIZED = 62,
3157 SM_NETWORK = 63,
3158 SM_CLEANBOOT = 67,
3159 SM_CXDRAG = 68,
3160 SM_CYDRAG = 69,
3161 SM_SHOWSOUNDS = 70,
3162 SM_CXMENUCHECK = 71,
3163 SM_CYMENUCHECK = 72,
3164 SM_SLOWMACHINE = 73,
3165 SM_MIDEASTENABLED = 74,
3166 SM_CMETRICS = 75,
3167 }
3168
3169 int GetSystemMetrics(int nIndex);
3170
3171 enum : DWORD
3172 {
3173 STILL_ACTIVE = (0x103),
3174 }
3175
3176 DWORD TlsAlloc();
3177 LPVOID TlsGetValue(DWORD);
3178 BOOL TlsSetValue(DWORD, LPVOID);
3179 BOOL TlsFree(DWORD);
3180
3181 }