winapi_ui_automation/um/
winuser.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! USER procedure declarations, constant definitions and macros
7use ctypes::{c_int, c_long, c_short, c_uint};
8use shared::basetsd::{
9    DWORD_PTR, INT32, INT_PTR, PDWORD_PTR, UINT16, UINT32, UINT64, UINT_PTR, ULONG_PTR,
10};
11#[cfg(target_pointer_width = "64")]
12use shared::basetsd::LONG_PTR;
13use shared::guiddef::{GUID, LPCGUID};
14use shared::minwindef::{
15    ATOM, BOOL, BYTE, DWORD, HINSTANCE, HIWORD, HKL, HMODULE, HRGN, HWINSTA, INT, LOWORD, LPARAM,
16    LPBYTE, LPDWORD, LPINT, LPVOID, LPWORD, LRESULT, PBYTE, PUINT, PULONG, TRUE, UCHAR, UINT,
17    ULONG, USHORT, WORD, WPARAM,
18};
19use shared::windef::{
20    COLORREF, DPI_AWARENESS, DPI_AWARENESS_CONTEXT, DPI_HOSTING_BEHAVIOR, HACCEL, HBITMAP, HBRUSH,
21    HCURSOR, HDC, HDESK, HHOOK, HICON, HMENU, HMONITOR, HWINEVENTHOOK, HWND, LPCRECT, LPPOINT,
22    LPRECT, POINT, RECT, SIZE,
23};
24use um::minwinbase::LPSECURITY_ATTRIBUTES;
25use um::wingdi::{
26    BLENDFUNCTION, DEVMODEA, DEVMODEW, LOGFONTA, LOGFONTW, PDISPLAY_DEVICEA, PDISPLAY_DEVICEW
27};
28use um::winnt::{
29    ACCESS_MASK, BOOLEAN, CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, LUID,
30    PSECURITY_DESCRIPTOR, PSECURITY_INFORMATION, PVOID, SHORT, VOID, WCHAR,
31};
32use vc::limits::UINT_MAX;
33use vc::vadefs::va_list;
34pub type HDWP = HANDLE;
35pub type MENUTEMPLATEA = VOID;
36pub type MENUTEMPLATEW = VOID;
37pub type LPMENUTEMPLATEA = PVOID;
38pub type LPMENUTEMPLATEW = PVOID;
39FN!{stdcall WNDPROC(
40    HWND,
41    UINT,
42    WPARAM,
43    LPARAM,
44) -> LRESULT}
45FN!{stdcall DLGPROC(
46    HWND,
47    UINT,
48    WPARAM,
49    LPARAM,
50) -> INT_PTR}
51FN!{stdcall TIMERPROC(
52    HWND,
53    UINT,
54    UINT_PTR,
55    DWORD,
56) -> ()}
57FN!{stdcall GRAYSTRINGPROC(
58    HDC,
59    LPARAM,
60    c_int,
61) -> BOOL}
62FN!{stdcall WNDENUMPROC(
63    HWND,
64    LPARAM,
65) -> BOOL}
66FN!{stdcall HOOKPROC(
67    code: c_int,
68    wParam: WPARAM,
69    lParam: LPARAM,
70) -> LRESULT}
71FN!{stdcall SENDASYNCPROC(
72    HWND,
73    UINT,
74    ULONG_PTR,
75    LRESULT,
76) -> ()}
77FN!{stdcall PROPENUMPROCA(
78    HWND,
79    LPCSTR,
80    HANDLE,
81) -> BOOL}
82FN!{stdcall PROPENUMPROCW(
83    HWND,
84    LPCWSTR,
85    HANDLE,
86) -> BOOL}
87FN!{stdcall PROPENUMPROCEXA(
88    HWND,
89    LPSTR,
90    HANDLE,
91    ULONG_PTR,
92) -> BOOL}
93FN!{stdcall PROPENUMPROCEXW(
94    HWND,
95    LPWSTR,
96    HANDLE,
97    ULONG_PTR,
98) -> BOOL}
99FN!{stdcall EDITWORDBREAKPROCA(
100    lpch: LPSTR,
101    ichCurrent: c_int,
102    cch: c_int,
103    code: c_int,
104) -> c_int}
105FN!{stdcall EDITWORDBREAKPROCW(
106    lpch: LPWSTR,
107    ichCurrent: c_int,
108    cch: c_int,
109    code: c_int,
110) -> c_int}
111FN!{stdcall DRAWSTATEPROC(
112    hdc: HDC,
113    lData: LPARAM,
114    wData: WPARAM,
115    cx: c_int,
116    cy: c_int,
117) -> BOOL}
118FN!{stdcall NAMEENUMPROCA(
119    LPSTR,
120    LPARAM,
121) -> BOOL}
122FN!{stdcall NAMEENUMPROCW(
123    LPWSTR,
124    LPARAM,
125) -> BOOL}
126pub type WINSTAENUMPROCA = NAMEENUMPROCA;
127pub type DESKTOPENUMPROCA = NAMEENUMPROCA;
128pub type WINSTAENUMPROCW = NAMEENUMPROCW;
129pub type DESKTOPENUMPROCW = NAMEENUMPROCW;
130#[inline]
131pub fn IS_INTRESOURCE(r: ULONG_PTR) -> bool {
132    (r >> 16) == 0
133}
134#[inline]
135pub fn MAKEINTRESOURCEA(i: WORD) -> LPSTR {
136    i as ULONG_PTR as LPSTR
137}
138#[inline]
139pub fn MAKEINTRESOURCEW(i: WORD) -> LPWSTR {
140    i as ULONG_PTR as LPWSTR
141}
142pub const RT_CURSOR: LPWSTR = MAKEINTRESOURCE!(1);
143pub const RT_BITMAP: LPWSTR = MAKEINTRESOURCE!(2);
144pub const RT_ICON: LPWSTR = MAKEINTRESOURCE!(3);
145pub const RT_MENU: LPWSTR = MAKEINTRESOURCE!(4);
146pub const RT_DIALOG: LPWSTR = MAKEINTRESOURCE!(5);
147pub const RT_STRING: LPWSTR = MAKEINTRESOURCE!(6);
148pub const RT_FONTDIR: LPWSTR = MAKEINTRESOURCE!(7);
149pub const RT_FONT: LPWSTR = MAKEINTRESOURCE!(8);
150pub const RT_ACCELERATOR: LPWSTR = MAKEINTRESOURCE!(9);
151pub const RT_RCDATA: LPWSTR = MAKEINTRESOURCE!(10);
152pub const RT_MESSAGETABLE: LPWSTR = MAKEINTRESOURCE!(11);
153pub const DIFFERENCE: WORD = 11;
154pub const RT_GROUP_CURSOR: LPWSTR = MAKEINTRESOURCE!(1 + DIFFERENCE);
155pub const RT_GROUP_ICON: LPWSTR = MAKEINTRESOURCE!(3 + DIFFERENCE);
156pub const RT_VERSION: LPWSTR = MAKEINTRESOURCE!(16);
157pub const RT_DLGINCLUDE: LPWSTR = MAKEINTRESOURCE!(17);
158pub const RT_PLUGPLAY: LPWSTR = MAKEINTRESOURCE!(19);
159pub const RT_VXD: LPWSTR = MAKEINTRESOURCE!(20);
160pub const RT_ANICURSOR: LPWSTR = MAKEINTRESOURCE!(21);
161pub const RT_ANIICON: LPWSTR = MAKEINTRESOURCE!(22);
162pub const RT_HTML: LPWSTR = MAKEINTRESOURCE!(23);
163pub const RT_MANIFEST: LPWSTR = MAKEINTRESOURCE!(24);
164pub const CREATEPROCESS_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(1);
165pub const ISOLATIONAWARE_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(2);
166pub const ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID: LPWSTR
167    = MAKEINTRESOURCE!(3);
168pub const MINIMUM_RESERVED_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(1);
169pub const MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(16);
170extern "system" {
171    pub fn wvsprintfA(
172        _: LPSTR,
173        _: LPCSTR,
174        arglist: va_list,
175    ) -> c_int;
176    pub fn wvsprintfW(
177        _: LPWSTR,
178        _: LPCWSTR,
179        arglist: va_list,
180    ) -> c_int;
181}
182extern "C" {
183    pub fn wsprintfA(
184        _: LPSTR,
185        _: LPCSTR,
186        ...
187    ) -> c_int;
188    pub fn wsprintfW(
189        _: LPWSTR,
190        _: LPCWSTR,
191        ...
192    ) -> c_int;
193}
194pub const SETWALLPAPER_DEFAULT: LPWSTR = -1isize as LPWSTR;
195pub const SB_HORZ: UINT = 0;
196pub const SB_VERT: UINT = 1;
197pub const SB_CTL: UINT = 2;
198pub const SB_BOTH: UINT = 3;
199pub const SB_LINEUP: LPARAM = 0;
200pub const SB_LINELEFT: LPARAM = 0;
201pub const SB_LINEDOWN: LPARAM = 1;
202pub const SB_LINERIGHT: LPARAM = 1;
203pub const SB_PAGEUP: LPARAM = 2;
204pub const SB_PAGELEFT: LPARAM = 2;
205pub const SB_PAGEDOWN: LPARAM = 3;
206pub const SB_PAGERIGHT: LPARAM = 3;
207pub const SB_THUMBPOSITION: LPARAM = 4;
208pub const SB_THUMBTRACK: LPARAM = 5;
209pub const SB_TOP: LPARAM = 6;
210pub const SB_LEFT: LPARAM = 6;
211pub const SB_BOTTOM: LPARAM = 7;
212pub const SB_RIGHT: LPARAM = 7;
213pub const SB_ENDSCROLL: LPARAM = 8;
214pub const SW_HIDE: c_int = 0;
215pub const SW_SHOWNORMAL: c_int = 1;
216pub const SW_NORMAL: c_int = 1;
217pub const SW_SHOWMINIMIZED: c_int = 2;
218pub const SW_SHOWMAXIMIZED: c_int = 3;
219pub const SW_MAXIMIZE: c_int = 3;
220pub const SW_SHOWNOACTIVATE: c_int = 4;
221pub const SW_SHOW: c_int = 5;
222pub const SW_MINIMIZE: c_int = 6;
223pub const SW_SHOWMINNOACTIVE: c_int = 7;
224pub const SW_SHOWNA: c_int = 8;
225pub const SW_RESTORE: c_int = 9;
226pub const SW_SHOWDEFAULT: c_int = 10;
227pub const SW_FORCEMINIMIZE: c_int = 11;
228pub const SW_MAX: c_int = 11;
229pub const HIDE_WINDOW: c_int = 0;
230pub const SHOW_OPENWINDOW: c_int = 1;
231pub const SHOW_ICONWINDOW: c_int = 2;
232pub const SHOW_FULLSCREEN: c_int = 3;
233pub const SHOW_OPENNOACTIVATE: c_int = 4;
234pub const SW_PARENTCLOSING: LPARAM = 1;
235pub const SW_OTHERZOOM: LPARAM = 2;
236pub const SW_PARENTOPENING: LPARAM = 3;
237pub const SW_OTHERUNZOOM: LPARAM = 4;
238pub const AW_HOR_POSITIVE: DWORD = 0x00000001;
239pub const AW_HOR_NEGATIVE: DWORD = 0x00000002;
240pub const AW_VER_POSITIVE: DWORD = 0x00000004;
241pub const AW_VER_NEGATIVE: DWORD = 0x00000008;
242pub const AW_CENTER: DWORD = 0x00000010;
243pub const AW_HIDE: DWORD = 0x00010000;
244pub const AW_ACTIVATE: DWORD = 0x00020000;
245pub const AW_SLIDE: DWORD = 0x00040000;
246pub const AW_BLEND: DWORD = 0x00080000;
247pub const KF_EXTENDED: WORD = 0x0100;
248pub const KF_DLGMODE: WORD = 0x0800;
249pub const KF_MENUMODE: WORD = 0x1000;
250pub const KF_ALTDOWN: WORD = 0x2000;
251pub const KF_REPEAT: WORD = 0x4000;
252pub const KF_UP: WORD = 0x8000;
253pub const VK_LBUTTON: c_int = 0x01;
254pub const VK_RBUTTON: c_int = 0x02;
255pub const VK_CANCEL: c_int = 0x03;
256pub const VK_MBUTTON: c_int = 0x04;
257pub const VK_XBUTTON1: c_int = 0x05;
258pub const VK_XBUTTON2: c_int = 0x06;
259pub const VK_BACK: c_int = 0x08;
260pub const VK_TAB: c_int = 0x09;
261pub const VK_CLEAR: c_int = 0x0C;
262pub const VK_RETURN: c_int = 0x0D;
263pub const VK_SHIFT: c_int = 0x10;
264pub const VK_CONTROL: c_int = 0x11;
265pub const VK_MENU: c_int = 0x12;
266pub const VK_PAUSE: c_int = 0x13;
267pub const VK_CAPITAL: c_int = 0x14;
268pub const VK_KANA: c_int = 0x15;
269pub const VK_HANGEUL: c_int = 0x15;
270pub const VK_HANGUL: c_int = 0x15;
271pub const VK_JUNJA: c_int = 0x17;
272pub const VK_FINAL: c_int = 0x18;
273pub const VK_HANJA: c_int = 0x19;
274pub const VK_KANJI: c_int = 0x19;
275pub const VK_ESCAPE: c_int = 0x1B;
276pub const VK_CONVERT: c_int = 0x1C;
277pub const VK_NONCONVERT: c_int = 0x1D;
278pub const VK_ACCEPT: c_int = 0x1E;
279pub const VK_MODECHANGE: c_int = 0x1F;
280pub const VK_SPACE: c_int = 0x20;
281pub const VK_PRIOR: c_int = 0x21;
282pub const VK_NEXT: c_int = 0x22;
283pub const VK_END: c_int = 0x23;
284pub const VK_HOME: c_int = 0x24;
285pub const VK_LEFT: c_int = 0x25;
286pub const VK_UP: c_int = 0x26;
287pub const VK_RIGHT: c_int = 0x27;
288pub const VK_DOWN: c_int = 0x28;
289pub const VK_SELECT: c_int = 0x29;
290pub const VK_PRINT: c_int = 0x2A;
291pub const VK_EXECUTE: c_int = 0x2B;
292pub const VK_SNAPSHOT: c_int = 0x2C;
293pub const VK_INSERT: c_int = 0x2D;
294pub const VK_DELETE: c_int = 0x2E;
295pub const VK_HELP: c_int = 0x2F;
296pub const VK_LWIN: c_int = 0x5B;
297pub const VK_RWIN: c_int = 0x5C;
298pub const VK_APPS: c_int = 0x5D;
299pub const VK_SLEEP: c_int = 0x5F;
300pub const VK_NUMPAD0: c_int = 0x60;
301pub const VK_NUMPAD1: c_int = 0x61;
302pub const VK_NUMPAD2: c_int = 0x62;
303pub const VK_NUMPAD3: c_int = 0x63;
304pub const VK_NUMPAD4: c_int = 0x64;
305pub const VK_NUMPAD5: c_int = 0x65;
306pub const VK_NUMPAD6: c_int = 0x66;
307pub const VK_NUMPAD7: c_int = 0x67;
308pub const VK_NUMPAD8: c_int = 0x68;
309pub const VK_NUMPAD9: c_int = 0x69;
310pub const VK_MULTIPLY: c_int = 0x6A;
311pub const VK_ADD: c_int = 0x6B;
312pub const VK_SEPARATOR: c_int = 0x6C;
313pub const VK_SUBTRACT: c_int = 0x6D;
314pub const VK_DECIMAL: c_int = 0x6E;
315pub const VK_DIVIDE: c_int = 0x6F;
316pub const VK_F1: c_int = 0x70;
317pub const VK_F2: c_int = 0x71;
318pub const VK_F3: c_int = 0x72;
319pub const VK_F4: c_int = 0x73;
320pub const VK_F5: c_int = 0x74;
321pub const VK_F6: c_int = 0x75;
322pub const VK_F7: c_int = 0x76;
323pub const VK_F8: c_int = 0x77;
324pub const VK_F9: c_int = 0x78;
325pub const VK_F10: c_int = 0x79;
326pub const VK_F11: c_int = 0x7A;
327pub const VK_F12: c_int = 0x7B;
328pub const VK_F13: c_int = 0x7C;
329pub const VK_F14: c_int = 0x7D;
330pub const VK_F15: c_int = 0x7E;
331pub const VK_F16: c_int = 0x7F;
332pub const VK_F17: c_int = 0x80;
333pub const VK_F18: c_int = 0x81;
334pub const VK_F19: c_int = 0x82;
335pub const VK_F20: c_int = 0x83;
336pub const VK_F21: c_int = 0x84;
337pub const VK_F22: c_int = 0x85;
338pub const VK_F23: c_int = 0x86;
339pub const VK_F24: c_int = 0x87;
340pub const VK_NAVIGATION_VIEW: c_int = 0x88;
341pub const VK_NAVIGATION_MENU: c_int = 0x89;
342pub const VK_NAVIGATION_UP: c_int = 0x8A;
343pub const VK_NAVIGATION_DOWN: c_int = 0x8B;
344pub const VK_NAVIGATION_LEFT: c_int = 0x8C;
345pub const VK_NAVIGATION_RIGHT: c_int = 0x8D;
346pub const VK_NAVIGATION_ACCEPT: c_int = 0x8E;
347pub const VK_NAVIGATION_CANCEL: c_int = 0x8F;
348pub const VK_NUMLOCK: c_int = 0x90;
349pub const VK_SCROLL: c_int = 0x91;
350pub const VK_OEM_NEC_EQUAL: c_int = 0x92;
351pub const VK_OEM_FJ_JISHO: c_int = 0x92;
352pub const VK_OEM_FJ_MASSHOU: c_int = 0x93;
353pub const VK_OEM_FJ_TOUROKU: c_int = 0x94;
354pub const VK_OEM_FJ_LOYA: c_int = 0x95;
355pub const VK_OEM_FJ_ROYA: c_int = 0x96;
356pub const VK_LSHIFT: c_int = 0xA0;
357pub const VK_RSHIFT: c_int = 0xA1;
358pub const VK_LCONTROL: c_int = 0xA2;
359pub const VK_RCONTROL: c_int = 0xA3;
360pub const VK_LMENU: c_int = 0xA4;
361pub const VK_RMENU: c_int = 0xA5;
362pub const VK_BROWSER_BACK: c_int = 0xA6;
363pub const VK_BROWSER_FORWARD: c_int = 0xA7;
364pub const VK_BROWSER_REFRESH: c_int = 0xA8;
365pub const VK_BROWSER_STOP: c_int = 0xA9;
366pub const VK_BROWSER_SEARCH: c_int = 0xAA;
367pub const VK_BROWSER_FAVORITES: c_int = 0xAB;
368pub const VK_BROWSER_HOME: c_int = 0xAC;
369pub const VK_VOLUME_MUTE: c_int = 0xAD;
370pub const VK_VOLUME_DOWN: c_int = 0xAE;
371pub const VK_VOLUME_UP: c_int = 0xAF;
372pub const VK_MEDIA_NEXT_TRACK: c_int = 0xB0;
373pub const VK_MEDIA_PREV_TRACK: c_int = 0xB1;
374pub const VK_MEDIA_STOP: c_int = 0xB2;
375pub const VK_MEDIA_PLAY_PAUSE: c_int = 0xB3;
376pub const VK_LAUNCH_MAIL: c_int = 0xB4;
377pub const VK_LAUNCH_MEDIA_SELECT: c_int = 0xB5;
378pub const VK_LAUNCH_APP1: c_int = 0xB6;
379pub const VK_LAUNCH_APP2: c_int = 0xB7;
380pub const VK_OEM_1: c_int = 0xBA;
381pub const VK_OEM_PLUS: c_int = 0xBB;
382pub const VK_OEM_COMMA: c_int = 0xBC;
383pub const VK_OEM_MINUS: c_int = 0xBD;
384pub const VK_OEM_PERIOD: c_int = 0xBE;
385pub const VK_OEM_2: c_int = 0xBF;
386pub const VK_OEM_3: c_int = 0xC0;
387pub const VK_GAMEPAD_A: c_int = 0xC3;
388pub const VK_GAMEPAD_B: c_int = 0xC4;
389pub const VK_GAMEPAD_X: c_int = 0xC5;
390pub const VK_GAMEPAD_Y: c_int = 0xC6;
391pub const VK_GAMEPAD_RIGHT_SHOULDER: c_int = 0xC7;
392pub const VK_GAMEPAD_LEFT_SHOULDER: c_int = 0xC8;
393pub const VK_GAMEPAD_LEFT_TRIGGER: c_int = 0xC9;
394pub const VK_GAMEPAD_RIGHT_TRIGGER: c_int = 0xCA;
395pub const VK_GAMEPAD_DPAD_UP: c_int = 0xCB;
396pub const VK_GAMEPAD_DPAD_DOWN: c_int = 0xCC;
397pub const VK_GAMEPAD_DPAD_LEFT: c_int = 0xCD;
398pub const VK_GAMEPAD_DPAD_RIGHT: c_int = 0xCE;
399pub const VK_GAMEPAD_MENU: c_int = 0xCF;
400pub const VK_GAMEPAD_VIEW: c_int = 0xD0;
401pub const VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON: c_int = 0xD1;
402pub const VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON: c_int = 0xD2;
403pub const VK_GAMEPAD_LEFT_THUMBSTICK_UP: c_int = 0xD3;
404pub const VK_GAMEPAD_LEFT_THUMBSTICK_DOWN: c_int = 0xD4;
405pub const VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT: c_int = 0xD5;
406pub const VK_GAMEPAD_LEFT_THUMBSTICK_LEFT: c_int = 0xD6;
407pub const VK_GAMEPAD_RIGHT_THUMBSTICK_UP: c_int = 0xD7;
408pub const VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN: c_int = 0xD8;
409pub const VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT: c_int = 0xD9;
410pub const VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT: c_int = 0xDA;
411pub const VK_OEM_4: c_int = 0xDB;
412pub const VK_OEM_5: c_int = 0xDC;
413pub const VK_OEM_6: c_int = 0xDD;
414pub const VK_OEM_7: c_int = 0xDE;
415pub const VK_OEM_8: c_int = 0xDF;
416pub const VK_OEM_AX: c_int = 0xE1;
417pub const VK_OEM_102: c_int = 0xE2;
418pub const VK_ICO_HELP: c_int = 0xE3;
419pub const VK_ICO_00: c_int = 0xE4;
420pub const VK_PROCESSKEY: c_int = 0xE5;
421pub const VK_ICO_CLEAR: c_int = 0xE6;
422pub const VK_PACKET: c_int = 0xE7;
423pub const VK_OEM_RESET: c_int = 0xE9;
424pub const VK_OEM_JUMP: c_int = 0xEA;
425pub const VK_OEM_PA1: c_int = 0xEB;
426pub const VK_OEM_PA2: c_int = 0xEC;
427pub const VK_OEM_PA3: c_int = 0xED;
428pub const VK_OEM_WSCTRL: c_int = 0xEE;
429pub const VK_OEM_CUSEL: c_int = 0xEF;
430pub const VK_OEM_ATTN: c_int = 0xF0;
431pub const VK_OEM_FINISH: c_int = 0xF1;
432pub const VK_OEM_COPY: c_int = 0xF2;
433pub const VK_OEM_AUTO: c_int = 0xF3;
434pub const VK_OEM_ENLW: c_int = 0xF4;
435pub const VK_OEM_BACKTAB: c_int = 0xF5;
436pub const VK_ATTN: c_int = 0xF6;
437pub const VK_CRSEL: c_int = 0xF7;
438pub const VK_EXSEL: c_int = 0xF8;
439pub const VK_EREOF: c_int = 0xF9;
440pub const VK_PLAY: c_int = 0xFA;
441pub const VK_ZOOM: c_int = 0xFB;
442pub const VK_NONAME: c_int = 0xFC;
443pub const VK_PA1: c_int = 0xFD;
444pub const VK_OEM_CLEAR: c_int = 0xFE;
445pub const WH_MIN: c_int = -1;
446pub const WH_MSGFILTER: c_int = -1;
447pub const WH_JOURNALRECORD: c_int = 0;
448pub const WH_JOURNALPLAYBACK: c_int = 1;
449pub const WH_KEYBOARD: c_int = 2;
450pub const WH_GETMESSAGE: c_int = 3;
451pub const WH_CALLWNDPROC: c_int = 4;
452pub const WH_CBT: c_int = 5;
453pub const WH_SYSMSGFILTER: c_int = 6;
454pub const WH_MOUSE: c_int = 7;
455pub const WH_HARDWARE: c_int = 8;
456pub const WH_DEBUG: c_int = 9;
457pub const WH_SHELL: c_int = 10;
458pub const WH_FOREGROUNDIDLE: c_int = 11;
459pub const WH_CALLWNDPROCRET: c_int = 12;
460pub const WH_KEYBOARD_LL: c_int = 13;
461pub const WH_MOUSE_LL: c_int = 14;
462pub const WH_MAX: c_int = 14;
463pub const WH_MINHOOK: c_int = WH_MIN;
464pub const WH_MAXHOOK: c_int = WH_MAX;
465pub const HC_ACTION: c_int = 0;
466pub const HC_GETNEXT: c_int = 1;
467pub const HC_SKIP: c_int = 2;
468pub const HC_NOREMOVE: c_int = 3;
469pub const HC_NOREM: c_int = HC_NOREMOVE;
470pub const HC_SYSMODALON: c_int = 4;
471pub const HC_SYSMODALOFF: c_int = 5;
472pub const HCBT_MOVESIZE: c_int = 0;
473pub const HCBT_MINMAX: c_int = 1;
474pub const HCBT_QS: c_int = 2;
475pub const HCBT_CREATEWND: c_int = 3;
476pub const HCBT_DESTROYWND: c_int = 4;
477pub const HCBT_ACTIVATE: c_int = 5;
478pub const HCBT_CLICKSKIPPED: c_int = 6;
479pub const HCBT_KEYSKIPPED: c_int = 7;
480pub const HCBT_SYSCOMMAND: c_int = 8;
481pub const HCBT_SETFOCUS: c_int = 9;
482STRUCT!{struct CBT_CREATEWNDA {
483    lpcs: *mut CREATESTRUCTA,
484    hwndInsertAfter: HWND,
485}}
486pub type LPCBT_CREATEWNDA = *mut CBT_CREATEWNDA;
487STRUCT!{struct CBT_CREATEWNDW {
488    lpcs: *mut CREATESTRUCTW,
489    hwndInsertAfter: HWND,
490}}
491pub type LPCBT_CREATEWNDW = *mut CBT_CREATEWNDW;
492STRUCT!{struct CBTACTIVATESTRUCT {
493    fMouse: BOOL,
494    hWndActive: HWND,
495}}
496pub type LPCBTACTIVATESTRUCT = *mut CBTACTIVATESTRUCT;
497STRUCT!{struct WTSSESSION_NOTIFICATION {
498    cbSize: DWORD,
499    dwSessionId: DWORD,
500}}
501pub type PWTSSESSION_NOTIFICATION = *mut WTSSESSION_NOTIFICATION;
502pub const WTS_CONSOLE_CONNECT: WPARAM = 0x1;
503pub const WTS_CONSOLE_DISCONNECT: WPARAM = 0x2;
504pub const WTS_REMOTE_CONNECT: WPARAM = 0x3;
505pub const WTS_REMOTE_DISCONNECT: WPARAM = 0x4;
506pub const WTS_SESSION_LOGON: WPARAM = 0x5;
507pub const WTS_SESSION_LOGOFF: WPARAM = 0x6;
508pub const WTS_SESSION_LOCK: WPARAM = 0x7;
509pub const WTS_SESSION_UNLOCK: WPARAM = 0x8;
510pub const WTS_SESSION_REMOTE_CONTROL: WPARAM = 0x9;
511pub const WTS_SESSION_CREATE: WPARAM = 0xa;
512pub const WTS_SESSION_TERMINATE: WPARAM = 0xb;
513pub const MSGF_DIALOGBOX: c_int = 0;
514pub const MSGF_MESSAGEBOX: c_int = 1;
515pub const MSGF_MENU: c_int = 2;
516pub const MSGF_SCROLLBAR: c_int = 5;
517pub const MSGF_NEXTWINDOW: c_int = 6;
518pub const MSGF_MAX: c_int = 8;
519pub const MSGF_USER: c_int = 4096;
520pub const HSHELL_WINDOWCREATED: c_int = 1;
521pub const HSHELL_WINDOWDESTROYED: c_int = 2;
522pub const HSHELL_ACTIVATESHELLWINDOW: c_int = 3;
523pub const HSHELL_WINDOWACTIVATED: c_int = 4;
524pub const HSHELL_GETMINRECT: c_int = 5;
525pub const HSHELL_REDRAW: c_int = 6;
526pub const HSHELL_TASKMAN: c_int = 7;
527pub const HSHELL_LANGUAGE: c_int = 8;
528pub const HSHELL_SYSMENU: c_int = 9;
529pub const HSHELL_ENDTASK: c_int = 10;
530pub const HSHELL_ACCESSIBILITYSTATE: c_int = 11;
531pub const HSHELL_APPCOMMAND: c_int = 12;
532pub const HSHELL_WINDOWREPLACED: c_int = 13;
533pub const HSHELL_WINDOWREPLACING: c_int = 14;
534pub const HSHELL_MONITORCHANGED: c_int = 16;
535pub const HSHELL_HIGHBIT: c_int = 0x8000;
536pub const HSHELL_FLASH: c_int = HSHELL_REDRAW | HSHELL_HIGHBIT;
537pub const HSHELL_RUDEAPPACTIVATED: c_int = HSHELL_WINDOWACTIVATED | HSHELL_HIGHBIT;
538pub const APPCOMMAND_BROWSER_BACKWARD: c_short = 1;
539pub const APPCOMMAND_BROWSER_FORWARD: c_short = 2;
540pub const APPCOMMAND_BROWSER_REFRESH: c_short = 3;
541pub const APPCOMMAND_BROWSER_STOP: c_short = 4;
542pub const APPCOMMAND_BROWSER_SEARCH: c_short = 5;
543pub const APPCOMMAND_BROWSER_FAVORITES: c_short = 6;
544pub const APPCOMMAND_BROWSER_HOME: c_short = 7;
545pub const APPCOMMAND_VOLUME_MUTE: c_short = 8;
546pub const APPCOMMAND_VOLUME_DOWN: c_short = 9;
547pub const APPCOMMAND_VOLUME_UP: c_short = 10;
548pub const APPCOMMAND_MEDIA_NEXTTRACK: c_short = 11;
549pub const APPCOMMAND_MEDIA_PREVIOUSTRACK: c_short = 12;
550pub const APPCOMMAND_MEDIA_STOP: c_short = 13;
551pub const APPCOMMAND_MEDIA_PLAY_PAUSE: c_short = 14;
552pub const APPCOMMAND_LAUNCH_MAIL: c_short = 15;
553pub const APPCOMMAND_LAUNCH_MEDIA_SELECT: c_short = 16;
554pub const APPCOMMAND_LAUNCH_APP1: c_short = 17;
555pub const APPCOMMAND_LAUNCH_APP2: c_short = 18;
556pub const APPCOMMAND_BASS_DOWN: c_short = 19;
557pub const APPCOMMAND_BASS_BOOST: c_short = 20;
558pub const APPCOMMAND_BASS_UP: c_short = 21;
559pub const APPCOMMAND_TREBLE_DOWN: c_short = 22;
560pub const APPCOMMAND_TREBLE_UP: c_short = 23;
561pub const APPCOMMAND_MICROPHONE_VOLUME_MUTE: c_short = 24;
562pub const APPCOMMAND_MICROPHONE_VOLUME_DOWN: c_short = 25;
563pub const APPCOMMAND_MICROPHONE_VOLUME_UP: c_short = 26;
564pub const APPCOMMAND_HELP: c_short = 27;
565pub const APPCOMMAND_FIND: c_short = 28;
566pub const APPCOMMAND_NEW: c_short = 29;
567pub const APPCOMMAND_OPEN: c_short = 30;
568pub const APPCOMMAND_CLOSE: c_short = 31;
569pub const APPCOMMAND_SAVE: c_short = 32;
570pub const APPCOMMAND_PRINT: c_short = 33;
571pub const APPCOMMAND_UNDO: c_short = 34;
572pub const APPCOMMAND_REDO: c_short = 35;
573pub const APPCOMMAND_COPY: c_short = 36;
574pub const APPCOMMAND_CUT: c_short = 37;
575pub const APPCOMMAND_PASTE: c_short = 38;
576pub const APPCOMMAND_REPLY_TO_MAIL: c_short = 39;
577pub const APPCOMMAND_FORWARD_MAIL: c_short = 40;
578pub const APPCOMMAND_SEND_MAIL: c_short = 41;
579pub const APPCOMMAND_SPELL_CHECK: c_short = 42;
580pub const APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE: c_short = 43;
581pub const APPCOMMAND_MIC_ON_OFF_TOGGLE: c_short = 44;
582pub const APPCOMMAND_CORRECTION_LIST: c_short = 45;
583pub const APPCOMMAND_MEDIA_PLAY: c_short = 46;
584pub const APPCOMMAND_MEDIA_PAUSE: c_short = 47;
585pub const APPCOMMAND_MEDIA_RECORD: c_short = 48;
586pub const APPCOMMAND_MEDIA_FAST_FORWARD: c_short = 49;
587pub const APPCOMMAND_MEDIA_REWIND: c_short = 50;
588pub const APPCOMMAND_MEDIA_CHANNEL_UP: c_short = 51;
589pub const APPCOMMAND_MEDIA_CHANNEL_DOWN: c_short = 52;
590pub const APPCOMMAND_DELETE: c_short = 53;
591pub const APPCOMMAND_DWM_FLIP3D: c_short = 54;
592pub const FAPPCOMMAND_MOUSE: WORD = 0x8000;
593pub const FAPPCOMMAND_KEY: WORD = 0;
594pub const FAPPCOMMAND_OEM: WORD = 0x1000;
595pub const FAPPCOMMAND_MASK: WORD = 0xF000;
596#[inline]
597pub fn GET_APPCOMMAND_LPARAM(lParam: LPARAM) -> c_short {
598    (HIWORD(lParam as DWORD) & !FAPPCOMMAND_MASK) as c_short
599}
600#[inline]
601pub fn GET_DEVICE_LPARAM(lParam: LPARAM) -> WORD {
602    HIWORD(lParam as DWORD) & FAPPCOMMAND_MASK
603}
604pub use self::GET_DEVICE_LPARAM as GET_MOUSEORKEY_LPARAM;
605pub use shared::minwindef::LOWORD as GET_FLAGS_LPARAM;
606pub use self::GET_FLAGS_LPARAM as GET_KEYSTATE_LPARAM;
607STRUCT!{struct SHELLHOOKINFO {
608    hwnd: HWND,
609    rc: RECT,
610}}
611pub type LPSHELLHOOKINFO = *mut SHELLHOOKINFO;
612STRUCT!{struct EVENTMSG {
613    message: UINT,
614    paramL: UINT,
615    paramH: UINT,
616    time: DWORD,
617    hwnd: HWND,
618}}
619pub type PEVENTMSGMSG = *mut EVENTMSG;
620pub type NPEVENTMSGMSG = *mut EVENTMSG;
621pub type LPEVENTMSGMSG = *mut EVENTMSG;
622pub type PEVENTMSG = *mut EVENTMSG;
623pub type NPEVENTMSG = *mut EVENTMSG;
624pub type LPEVENTMSG = *mut EVENTMSG;
625STRUCT!{struct CWPSTRUCT {
626    lParam: LPARAM,
627    wParam: WPARAM,
628    message: UINT,
629    hwnd: HWND,
630}}
631pub type PCWPSTRUCT = *mut CWPSTRUCT;
632pub type NPCWPSTRUCT = *mut CWPSTRUCT;
633pub type LPCWPSTRUCT = *mut CWPSTRUCT;
634STRUCT!{struct CWPRETSTRUCT {
635    lResult: LRESULT,
636    lParam: LPARAM,
637    wParam: WPARAM,
638    message: UINT,
639    hwnd: HWND,
640}}
641pub type PCWPRETSTRUCT = *mut CWPRETSTRUCT;
642pub type NPCWPRETSTRUCT = *mut CWPRETSTRUCT;
643pub type LPCWPRETSTRUCT = *mut CWPRETSTRUCT;
644pub const LLKHF_EXTENDED: DWORD = (KF_EXTENDED >> 8) as u32;
645pub const LLKHF_INJECTED: DWORD = 0x00000010;
646pub const LLKHF_ALTDOWN: DWORD = (KF_ALTDOWN >> 8) as u32;
647pub const LLKHF_UP: DWORD = (KF_UP >> 8) as u32;
648pub const LLKHF_LOWER_IL_INJECTED: DWORD = 0x00000002;
649pub const LLMHF_INJECTED: DWORD = 0x00000001;
650pub const LLMHF_LOWER_IL_INJECTED: DWORD = 0x00000002;
651STRUCT!{struct KBDLLHOOKSTRUCT {
652    vkCode: DWORD,
653    scanCode: DWORD,
654    flags: DWORD,
655    time: DWORD,
656    dwExtraInfo: ULONG_PTR,
657}}
658pub type LPKBDLLHOOKSTRUCT = *mut KBDLLHOOKSTRUCT;
659pub type PKBDLLHOOKSTRUCT = *mut KBDLLHOOKSTRUCT;
660STRUCT!{struct MSLLHOOKSTRUCT {
661    pt: POINT,
662    mouseData: DWORD,
663    flags: DWORD,
664    time: DWORD,
665    dwExtraInfo: ULONG_PTR,
666}}
667pub type LPMSLLHOOKSTRUCT = *mut MSLLHOOKSTRUCT;
668pub type PMSLLHOOKSTRUCT = *mut MSLLHOOKSTRUCT;
669STRUCT!{struct DEBUGHOOKINFO {
670    idThread: DWORD,
671    idThreadInstaller: DWORD,
672    lParam: LPARAM,
673    wParam: WPARAM,
674    code: c_int,
675}}
676pub type PDEBUGHOOKINFO = *mut DEBUGHOOKINFO;
677pub type NPDEBUGHOOKINFO = *mut DEBUGHOOKINFO;
678pub type LPDEBUGHOOKINFO = *mut DEBUGHOOKINFO;
679STRUCT!{struct MOUSEHOOKSTRUCT {
680    pt: POINT,
681    hwnd: HWND,
682    wHitTestCode: UINT,
683    dwExtraInfo: ULONG_PTR,
684}}
685pub type LPMOUSEHOOKSTRUCT = *mut MOUSEHOOKSTRUCT;
686pub type PMOUSEHOOKSTRUCT = *mut MOUSEHOOKSTRUCT;
687STRUCT!{struct MOUSEHOOKSTRUCTEX {
688    parent: MOUSEHOOKSTRUCT,
689    mouseData: DWORD,
690}}
691pub type LPMOUSEHOOKSTRUCTEX = *mut MOUSEHOOKSTRUCTEX;
692pub type PMOUSEHOOKSTRUCTEX = *mut MOUSEHOOKSTRUCTEX;
693STRUCT!{struct HARDWAREHOOKSTRUCT {
694    hwnd: HWND,
695    message: UINT,
696    wParam: WPARAM,
697    lParam: LPARAM,
698}}
699pub type LPHARDWAREHOOKSTRUCT = *mut HARDWAREHOOKSTRUCT;
700pub type PHARDWAREHOOKSTRUCT = *mut HARDWAREHOOKSTRUCT;
701pub const HKL_PREV: HKL = 0 as HKL;
702pub const HKL_NEXT: HKL = 1 as HKL;
703pub const KLF_ACTIVATE: UINT = 0x00000001;
704pub const KLF_SUBSTITUTE_OK: UINT = 0x00000002;
705pub const KLF_REORDER: UINT = 0x00000008;
706pub const KLF_REPLACELANG: UINT = 0x00000010;
707pub const KLF_NOTELLSHELL: UINT = 0x00000080;
708pub const KLF_SETFORPROCESS: UINT = 0x00000100;
709pub const KLF_SHIFTLOCK: UINT = 0x00010000;
710pub const KLF_RESET: UINT = 0x40000000;
711pub const INPUTLANGCHANGE_SYSCHARSET: WPARAM = 0x0001;
712pub const INPUTLANGCHANGE_FORWARD: WPARAM = 0x0002;
713pub const INPUTLANGCHANGE_BACKWARD: WPARAM = 0x0004;
714pub const KL_NAMELENGTH: usize = 9;
715extern "system" {
716    pub fn LoadKeyboardLayoutA(
717        pwszKLID: LPCSTR,
718        Flags: DWORD,
719    ) -> HKL;
720    pub fn LoadKeyboardLayoutW(
721        pwszKLID: LPCWSTR,
722        Flags: DWORD,
723    ) -> HKL;
724    pub fn ActivateKeyboardLayout(
725        hkl: HKL,
726        Flags: UINT,
727    ) -> HKL;
728    pub fn ToUnicodeEx(
729        wVirtKey: UINT,
730        wScanCode: UINT,
731        lpKeyState: *const BYTE,
732        pwszBuff: LPWSTR,
733        cchBuff: c_int,
734        wFlags: UINT,
735        dwhkl: HKL,
736    ) -> c_int;
737    pub fn UnloadKeyboardLayout(
738        hkl: HKL,
739    ) -> BOOL;
740    pub fn GetKeyboardLayoutNameA(
741        pwszKLID: LPSTR,
742    ) -> BOOL;
743    pub fn GetKeyboardLayoutNameW(
744        pwszKLID: LPWSTR,
745    ) -> BOOL;
746    pub fn GetKeyboardLayoutList(
747        nBuff: c_int,
748        lpList: *mut HKL,
749    ) -> c_int;
750    pub fn GetKeyboardLayout(
751        idThread: DWORD,
752    ) -> HKL;
753}
754STRUCT!{struct MOUSEMOVEPOINT {
755    x: c_int,
756    y: c_int,
757    time: DWORD,
758    dwExtraInfo: ULONG_PTR,
759}}
760pub type PMOUSEMOVEPOINT = *mut MOUSEMOVEPOINT;
761pub type LPMOUSEMOVEPOINT = *mut MOUSEMOVEPOINT;
762pub const GMMP_USE_DISPLAY_POINTS: DWORD = 1;
763pub const GMMP_USE_HIGH_RESOLUTION_POINTS: DWORD = 2;
764extern "system" {
765    pub fn GetMouseMovePointsEx(
766        cbSize: UINT,
767        lppt: LPMOUSEMOVEPOINT,
768        lpptBuf: LPMOUSEMOVEPOINT,
769        nBufPoints: c_int,
770        resolution: DWORD,
771    ) -> c_int;
772}
773pub const DESKTOP_READOBJECTS: DWORD = 0x0001;
774pub const DESKTOP_CREATEWINDOW: DWORD = 0x0002;
775pub const DESKTOP_CREATEMENU: DWORD = 0x0004;
776pub const DESKTOP_HOOKCONTROL: DWORD = 0x0008;
777pub const DESKTOP_JOURNALRECORD: DWORD = 0x0010;
778pub const DESKTOP_JOURNALPLAYBACK: DWORD = 0x0020;
779pub const DESKTOP_ENUMERATE: DWORD = 0x0040;
780pub const DESKTOP_WRITEOBJECTS: DWORD = 0x0080;
781pub const DESKTOP_SWITCHDESKTOP: DWORD = 0x0100;
782pub const DF_ALLOWOTHERACCOUNTHOOK: DWORD = 0x0001;
783extern "system" {
784    pub fn CreateDesktopA(
785        lpszDesktop: LPCSTR,
786        lpszDevice: LPCSTR,
787        pDevmode: *mut DEVMODEA,
788        dwFlags: DWORD,
789        dwDesiredAccess: ACCESS_MASK,
790        lpsa: LPSECURITY_ATTRIBUTES,
791    ) -> HDESK;
792    pub fn CreateDesktopW(
793        lpszDesktop: LPCWSTR,
794        lpszDevice: LPCWSTR,
795        pDevmode: *mut DEVMODEW,
796        dwFlags: DWORD,
797        dwDesiredAccess: ACCESS_MASK,
798        lpsa: LPSECURITY_ATTRIBUTES,
799    ) -> HDESK;
800    pub fn CreateDesktopExA(
801        lpszDesktop: LPCSTR,
802        lpszDevice: LPCSTR,
803        pDevmode: *mut DEVMODEA,
804        dwFlags: DWORD,
805        dwDesiredAccess: ACCESS_MASK,
806        lpsa: LPSECURITY_ATTRIBUTES,
807        ulHeapSize: ULONG,
808        pvoid: PVOID,
809    ) -> HDESK;
810    pub fn CreateDesktopExW(
811        lpszDesktop: LPCWSTR,
812        lpszDevice: LPCWSTR,
813        pDevmode: *mut DEVMODEW,
814        dwFlags: DWORD,
815        dwDesiredAccess: ACCESS_MASK,
816        lpsa: LPSECURITY_ATTRIBUTES,
817        ulHeapSize: ULONG,
818        pvoid: PVOID,
819    ) -> HDESK;
820    pub fn OpenDesktopA(
821        lpszDesktop: LPCSTR,
822        dwFlags: DWORD,
823        fInherit: BOOL,
824        dwDesiredAccess: ACCESS_MASK,
825    ) -> HDESK;
826    pub fn OpenDesktopW(
827        lpszDesktop: LPCWSTR,
828        dwFlags: DWORD,
829        fInherit: BOOL,
830        dwDesiredAccess: ACCESS_MASK,
831    ) -> HDESK;
832    pub fn OpenInputDesktop(
833        dwFlags: DWORD,
834        fInherit: BOOL,
835        dwDesiredAccess: ACCESS_MASK,
836    ) -> HDESK;
837    pub fn EnumDesktopsA(
838        hwinsta: HWINSTA,
839        lpEnumFunc: DESKTOPENUMPROCA,
840        lParam: LPARAM,
841    ) -> BOOL;
842    pub fn EnumDesktopsW(
843        hwinsta: HWINSTA,
844        lpEnumFunc: DESKTOPENUMPROCW,
845        lParam: LPARAM,
846    ) -> BOOL;
847    pub fn EnumDesktopWindows(
848        hDesktop: HDESK,
849        lpfn: WNDENUMPROC,
850        lParam: LPARAM,
851    ) -> BOOL;
852    pub fn SwitchDesktop(
853        hDesktop: HDESK,
854    ) -> BOOL;
855    pub fn SetThreadDesktop(
856        hDesktop: HDESK,
857    ) -> BOOL;
858    pub fn CloseDesktop(
859        hDesktop: HDESK,
860    ) -> BOOL;
861    pub fn GetThreadDesktop(
862        dwThreadId: DWORD,
863    ) -> HDESK;
864}
865pub const WINSTA_ENUMDESKTOPS: DWORD = 0x0001;
866pub const WINSTA_READATTRIBUTES: DWORD = 0x0002;
867pub const WINSTA_ACCESSCLIPBOARD: DWORD = 0x0004;
868pub const WINSTA_CREATEDESKTOP: DWORD = 0x0008;
869pub const WINSTA_WRITEATTRIBUTES: DWORD = 0x0010;
870pub const WINSTA_ACCESSGLOBALATOMS: DWORD = 0x0020;
871pub const WINSTA_EXITWINDOWS: DWORD = 0x0040;
872pub const WINSTA_ENUMERATE: DWORD = 0x0100;
873pub const WINSTA_READSCREEN: DWORD = 0x0200;
874pub const WINSTA_ALL_ACCESS: DWORD = WINSTA_ENUMDESKTOPS | WINSTA_READATTRIBUTES
875    | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES
876    | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS | WINSTA_ENUMERATE | WINSTA_READSCREEN;
877pub const CWF_CREATE_ONLY: DWORD = 0x00000001;
878pub const WSF_VISIBLE: DWORD = 0x0001;
879extern "system" {
880    pub fn CreateWindowStationA(
881        lpwinsta: LPCSTR,
882        dwFlags: DWORD,
883        dwDesiredAccess: ACCESS_MASK,
884        lpsa: LPSECURITY_ATTRIBUTES,
885    ) -> HWINSTA;
886    pub fn CreateWindowStationW(
887        lpwinsta: LPCWSTR,
888        dwFlags: DWORD,
889        dwDesiredAccess: ACCESS_MASK,
890        lpsa: LPSECURITY_ATTRIBUTES,
891    ) -> HWINSTA;
892    pub fn OpenWindowStationA(
893        lpszWinSta: LPCSTR,
894        fInherit: BOOL,
895        dwDesiredAccess: ACCESS_MASK,
896    ) -> HWINSTA;
897    pub fn OpenWindowStationW(
898        lpszWinSta: LPCWSTR,
899        fInherit: BOOL,
900        dwDesiredAccess: ACCESS_MASK,
901    ) -> HWINSTA;
902    pub fn EnumWindowStationsA(
903        lpEnumFunc: WINSTAENUMPROCA,
904        lParam: LPARAM,
905    ) -> BOOL;
906    pub fn EnumWindowStationsW(
907        lpEnumFunc: WINSTAENUMPROCW,
908        lParam: LPARAM,
909    ) -> BOOL;
910    pub fn CloseWindowStation(
911        hWinSta: HWINSTA,
912    ) -> BOOL;
913    pub fn SetProcessWindowStation(
914        hWinSta: HWINSTA,
915    ) -> BOOL;
916    pub fn GetProcessWindowStation() -> HWINSTA;
917    pub fn SetUserObjectSecurity(
918        hObj: HANDLE,
919        pSIRequested: PSECURITY_INFORMATION,
920        pSID: PSECURITY_DESCRIPTOR,
921    ) -> BOOL;
922    pub fn GetUserObjectSecurity(
923        hObj: HANDLE,
924        pSIRequested: PSECURITY_INFORMATION,
925        pSID: PSECURITY_DESCRIPTOR,
926        nLength: DWORD,
927        lpnLengthNeeded: LPDWORD,
928    ) -> BOOL;
929}
930pub const UOI_FLAGS: DWORD = 1;
931pub const UOI_NAME: DWORD = 2;
932pub const UOI_TYPE: DWORD = 3;
933pub const UOI_USER_SID: DWORD = 4;
934pub const UOI_HEAPSIZE: DWORD = 5;
935pub const UOI_IO: DWORD = 6;
936pub const UOI_TIMERPROC_EXCEPTION_SUPPRESSION: DWORD = 7;
937STRUCT!{struct USEROBJECTFLAGS {
938    fInherit: BOOL,
939    fReserved: BOOL,
940    dwFlags: DWORD,
941}}
942pub type PUSEROBJECTFLAGS = *mut USEROBJECTFLAGS;
943extern "system" {
944    pub fn GetUserObjectInformationA(
945        hObj: HANDLE,
946        nIndex: c_int,
947        pvInfo: PVOID,
948        nLength: DWORD,
949        lpnLengthNeeded: LPDWORD,
950    ) -> BOOL;
951    pub fn GetUserObjectInformationW(
952        hObj: HANDLE,
953        nIndex: c_int,
954        pvInfo: PVOID,
955        nLength: DWORD,
956        lpnLengthNeeded: LPDWORD,
957    ) -> BOOL;
958    pub fn SetUserObjectInformationA(
959        hObj: HANDLE,
960        nIndex: c_int,
961        pvInfo: PVOID,
962        nLength: DWORD,
963    ) -> BOOL;
964    pub fn SetUserObjectInformationW(
965        hObj: HANDLE,
966        nIndex: c_int,
967        pvInfo: PVOID,
968        nLength: DWORD,
969    ) -> BOOL;
970}
971STRUCT!{struct WNDCLASSEXA {
972    cbSize: UINT,
973    style: UINT,
974    lpfnWndProc: WNDPROC,
975    cbClsExtra: c_int,
976    cbWndExtra: c_int,
977    hInstance: HINSTANCE,
978    hIcon: HICON,
979    hCursor: HCURSOR,
980    hbrBackground: HBRUSH,
981    lpszMenuName: LPCSTR,
982    lpszClassName: LPCSTR,
983    hIconSm: HICON,
984}}
985pub type PWNDCLASSEXA = *mut WNDCLASSEXA;
986pub type NPWNDCLASSEXA = *mut WNDCLASSEXA;
987pub type LPWNDCLASSEXA = *mut WNDCLASSEXA;
988STRUCT!{struct WNDCLASSEXW {
989    cbSize: UINT,
990    style: UINT,
991    lpfnWndProc: WNDPROC,
992    cbClsExtra: c_int,
993    cbWndExtra: c_int,
994    hInstance: HINSTANCE,
995    hIcon: HICON,
996    hCursor: HCURSOR,
997    hbrBackground: HBRUSH,
998    lpszMenuName: LPCWSTR,
999    lpszClassName: LPCWSTR,
1000    hIconSm: HICON,
1001}}
1002pub type PWNDCLASSEXW = *mut WNDCLASSEXW;
1003pub type NPWNDCLASSEXW = *mut WNDCLASSEXW;
1004pub type LPWNDCLASSEXW = *mut WNDCLASSEXW;
1005STRUCT!{struct WNDCLASSA {
1006    style: UINT,
1007    lpfnWndProc: WNDPROC,
1008    cbClsExtra: c_int,
1009    cbWndExtra: c_int,
1010    hInstance: HINSTANCE,
1011    hIcon: HICON,
1012    hCursor: HCURSOR,
1013    hbrBackground: HBRUSH,
1014    lpszMenuName: LPCSTR,
1015    lpszClassName: LPCSTR,
1016}}
1017pub type PWNDCLASSA = *mut WNDCLASSA;
1018pub type NPWNDCLASSA = *mut WNDCLASSA;
1019pub type LPWNDCLASSA = *mut WNDCLASSA;
1020STRUCT!{struct WNDCLASSW {
1021    style: UINT,
1022    lpfnWndProc: WNDPROC,
1023    cbClsExtra: c_int,
1024    cbWndExtra: c_int,
1025    hInstance: HINSTANCE,
1026    hIcon: HICON,
1027    hCursor: HCURSOR,
1028    hbrBackground: HBRUSH,
1029    lpszMenuName: LPCWSTR,
1030    lpszClassName: LPCWSTR,
1031}}
1032pub type PWNDCLASSW = *mut WNDCLASSW;
1033pub type NPWNDCLASSW = *mut WNDCLASSW;
1034pub type LPWNDCLASSW = *mut WNDCLASSW;
1035extern "system" {
1036    pub fn IsHungAppWindow(
1037        hwnd: HWND,
1038    ) -> BOOL;
1039    pub fn DisableProcessWindowsGhosting();
1040}
1041STRUCT!{struct MSG {
1042    hwnd: HWND,
1043    message: UINT,
1044    wParam: WPARAM,
1045    lParam: LPARAM,
1046    time: DWORD,
1047    pt: POINT,
1048}}
1049pub type PMSG = *mut MSG;
1050pub type NPMSG = *mut MSG;
1051pub type LPMSG = *mut MSG;
1052//POINTSTOPOINT
1053//POINTTOPOINTS
1054//MAKEWPARAM
1055//MAKELPARAM
1056//MAKELRESULT
1057pub const GWL_WNDPROC: c_int = -4;
1058pub const GWL_HINSTANCE: c_int = -6;
1059pub const GWL_HWNDPARENT: c_int = -8;
1060pub const GWL_STYLE: c_int = -16;
1061pub const GWL_EXSTYLE: c_int = -20;
1062pub const GWL_USERDATA: c_int = -21;
1063pub const GWL_ID: c_int = -12;
1064pub const GWLP_WNDPROC: c_int = -4;
1065pub const GWLP_HINSTANCE: c_int = -6;
1066pub const GWLP_HWNDPARENT: c_int = -8;
1067pub const GWLP_USERDATA: c_int = -21;
1068pub const GWLP_ID: c_int = -12;
1069pub const GCL_MENUNAME: c_int = -8;
1070pub const GCL_HBRBACKGROUND: c_int = -10;
1071pub const GCL_HCURSOR: c_int = -12;
1072pub const GCL_HICON: c_int = -14;
1073pub const GCL_HMODULE: c_int = -16;
1074pub const GCL_CBWNDEXTRA: c_int = -18;
1075pub const GCL_CBCLSEXTRA: c_int = -20;
1076pub const GCL_WNDPROC: c_int = -24;
1077pub const GCL_STYLE: c_int = -26;
1078pub const GCW_ATOM: c_int = -32;
1079pub const GCL_HICONSM: c_int = -34;
1080pub const GCLP_MENUNAME: c_int = -8;
1081pub const GCLP_HBRBACKGROUND: c_int = -10;
1082pub const GCLP_HCURSOR: c_int = -12;
1083pub const GCLP_HICON: c_int = -14;
1084pub const GCLP_HMODULE: c_int = -16;
1085pub const GCLP_WNDPROC: c_int = -24;
1086pub const GCLP_HICONSM: c_int = -34;
1087pub const WM_NULL: UINT = 0x0000;
1088pub const WM_CREATE: UINT = 0x0001;
1089pub const WM_DESTROY: UINT = 0x0002;
1090pub const WM_MOVE: UINT = 0x0003;
1091pub const WM_SIZE: UINT = 0x0005;
1092pub const WM_ACTIVATE: UINT = 0x0006;
1093pub const WA_INACTIVE: WORD = 0;
1094pub const WA_ACTIVE: WORD = 1;
1095pub const WA_CLICKACTIVE: WORD = 2;
1096pub const WM_SETFOCUS: UINT = 0x0007;
1097pub const WM_KILLFOCUS: UINT = 0x0008;
1098pub const WM_ENABLE: UINT = 0x000A;
1099pub const WM_SETREDRAW: UINT = 0x000B;
1100pub const WM_SETTEXT: UINT = 0x000C;
1101pub const WM_GETTEXT: UINT = 0x000D;
1102pub const WM_GETTEXTLENGTH: UINT = 0x000E;
1103pub const WM_PAINT: UINT = 0x000F;
1104pub const WM_CLOSE: UINT = 0x0010;
1105pub const WM_QUERYENDSESSION: UINT = 0x0011;
1106pub const WM_QUERYOPEN: UINT = 0x0013;
1107pub const WM_ENDSESSION: UINT = 0x0016;
1108pub const WM_QUIT: UINT = 0x0012;
1109pub const WM_ERASEBKGND: UINT = 0x0014;
1110pub const WM_SYSCOLORCHANGE: UINT = 0x0015;
1111pub const WM_SHOWWINDOW: UINT = 0x0018;
1112pub const WM_WININICHANGE: UINT = 0x001A;
1113pub const WM_SETTINGCHANGE: UINT = WM_WININICHANGE;
1114pub const WM_DEVMODECHANGE: UINT = 0x001B;
1115pub const WM_ACTIVATEAPP: UINT = 0x001C;
1116pub const WM_FONTCHANGE: UINT = 0x001D;
1117pub const WM_TIMECHANGE: UINT = 0x001E;
1118pub const WM_CANCELMODE: UINT = 0x001F;
1119pub const WM_SETCURSOR: UINT = 0x0020;
1120pub const WM_MOUSEACTIVATE: UINT = 0x0021;
1121pub const WM_CHILDACTIVATE: UINT = 0x0022;
1122pub const WM_QUEUESYNC: UINT = 0x0023;
1123pub const WM_GETMINMAXINFO: UINT = 0x0024;
1124STRUCT!{struct MINMAXINFO {
1125    ptReserved: POINT,
1126    ptMaxSize: POINT,
1127    ptMaxPosition: POINT,
1128    ptMinTrackSize: POINT,
1129    ptMaxTrackSize: POINT,
1130}}
1131pub type PMINMAXINFO = *mut MINMAXINFO;
1132pub type LPMINMAXINFO = *mut MINMAXINFO;
1133pub const WM_PAINTICON: UINT = 0x0026;
1134pub const WM_ICONERASEBKGND: UINT = 0x0027;
1135pub const WM_NEXTDLGCTL: UINT = 0x0028;
1136pub const WM_SPOOLERSTATUS: UINT = 0x002A;
1137pub const WM_DRAWITEM: UINT = 0x002B;
1138pub const WM_MEASUREITEM: UINT = 0x002C;
1139pub const WM_DELETEITEM: UINT = 0x002D;
1140pub const WM_VKEYTOITEM: UINT = 0x002E;
1141pub const WM_CHARTOITEM: UINT = 0x002F;
1142pub const WM_SETFONT: UINT = 0x0030;
1143pub const WM_GETFONT: UINT = 0x0031;
1144pub const WM_SETHOTKEY: UINT = 0x0032;
1145pub const WM_GETHOTKEY: UINT = 0x0033;
1146pub const WM_QUERYDRAGICON: UINT = 0x0037;
1147pub const WM_COMPAREITEM: UINT = 0x0039;
1148pub const WM_GETOBJECT: UINT = 0x003D;
1149pub const WM_COMPACTING: UINT = 0x0041;
1150pub const WM_COMMNOTIFY: UINT = 0x0044;
1151pub const WM_WINDOWPOSCHANGING: UINT = 0x0046;
1152pub const WM_WINDOWPOSCHANGED: UINT = 0x0047;
1153pub const WM_POWER: UINT = 0x0048;
1154pub const PWR_OK: WPARAM = 1;
1155pub const PWR_FAIL: WPARAM = -1isize as usize;
1156pub const PWR_SUSPENDREQUEST: WPARAM = 1;
1157pub const PWR_SUSPENDRESUME: WPARAM = 2;
1158pub const PWR_CRITICALRESUME: WPARAM = 3;
1159pub const WM_COPYDATA: UINT = 0x004A;
1160pub const WM_CANCELJOURNAL: UINT = 0x004B;
1161STRUCT!{struct COPYDATASTRUCT {
1162    dwData: ULONG_PTR,
1163    cbData: DWORD,
1164    lpData: PVOID,
1165}}
1166pub type PCOPYDATASTRUCT = *mut COPYDATASTRUCT;
1167STRUCT!{struct MDINEXTMENU {
1168    hmenuIn: HMENU,
1169    hmenuNext: HMENU,
1170    hwndNext: HWND,
1171}}
1172pub type PMDINEXTMENU = *mut MDINEXTMENU;
1173pub type LPMDINEXTMENU = *mut MDINEXTMENU;
1174pub const WM_NOTIFY: UINT = 0x004E;
1175pub const WM_INPUTLANGCHANGEREQUEST: UINT = 0x0050;
1176pub const WM_INPUTLANGCHANGE: UINT = 0x0051;
1177pub const WM_TCARD: UINT = 0x0052;
1178pub const WM_HELP: UINT = 0x0053;
1179pub const WM_USERCHANGED: UINT = 0x0054;
1180pub const WM_NOTIFYFORMAT: UINT = 0x0055;
1181pub const NFR_ANSI: LRESULT = 1;
1182pub const NFR_UNICODE: LRESULT = 2;
1183pub const NF_QUERY: LPARAM = 3;
1184pub const NF_REQUERY: LPARAM = 4;
1185pub const WM_CONTEXTMENU: UINT = 0x007B;
1186pub const WM_STYLECHANGING: UINT = 0x007C;
1187pub const WM_STYLECHANGED: UINT = 0x007D;
1188pub const WM_DISPLAYCHANGE: UINT = 0x007E;
1189pub const WM_GETICON: UINT = 0x007F;
1190pub const WM_SETICON: UINT = 0x0080;
1191pub const WM_NCCREATE: UINT = 0x0081;
1192pub const WM_NCDESTROY: UINT = 0x0082;
1193pub const WM_NCCALCSIZE: UINT = 0x0083;
1194pub const WM_NCHITTEST: UINT = 0x0084;
1195pub const WM_NCPAINT: UINT = 0x0085;
1196pub const WM_NCACTIVATE: UINT = 0x0086;
1197pub const WM_GETDLGCODE: UINT = 0x0087;
1198pub const WM_SYNCPAINT: UINT = 0x0088;
1199pub const WM_NCMOUSEMOVE: UINT = 0x00A0;
1200pub const WM_NCLBUTTONDOWN: UINT = 0x00A1;
1201pub const WM_NCLBUTTONUP: UINT = 0x00A2;
1202pub const WM_NCLBUTTONDBLCLK: UINT = 0x00A3;
1203pub const WM_NCRBUTTONDOWN: UINT = 0x00A4;
1204pub const WM_NCRBUTTONUP: UINT = 0x00A5;
1205pub const WM_NCRBUTTONDBLCLK: UINT = 0x00A6;
1206pub const WM_NCMBUTTONDOWN: UINT = 0x00A7;
1207pub const WM_NCMBUTTONUP: UINT = 0x00A8;
1208pub const WM_NCMBUTTONDBLCLK: UINT = 0x00A9;
1209pub const WM_NCXBUTTONDOWN: UINT = 0x00AB;
1210pub const WM_NCXBUTTONUP: UINT = 0x00AC;
1211pub const WM_NCXBUTTONDBLCLK: UINT = 0x00AD;
1212pub const WM_INPUT_DEVICE_CHANGE: UINT = 0x00FE;
1213pub const WM_INPUT: UINT = 0x00FF;
1214pub const WM_KEYFIRST: UINT = 0x0100;
1215pub const WM_KEYDOWN: UINT = 0x0100;
1216pub const WM_KEYUP: UINT = 0x0101;
1217pub const WM_CHAR: UINT = 0x0102;
1218pub const WM_DEADCHAR: UINT = 0x0103;
1219pub const WM_SYSKEYDOWN: UINT = 0x0104;
1220pub const WM_SYSKEYUP: UINT = 0x0105;
1221pub const WM_SYSCHAR: UINT = 0x0106;
1222pub const WM_SYSDEADCHAR: UINT = 0x0107;
1223pub const WM_UNICHAR: UINT = 0x0109;
1224pub const WM_KEYLAST: UINT = 0x0109;
1225pub const UNICODE_NOCHAR: WPARAM = 0xFFFF;
1226pub const WM_IME_STARTCOMPOSITION: UINT = 0x010D;
1227pub const WM_IME_ENDCOMPOSITION: UINT = 0x010E;
1228pub const WM_IME_COMPOSITION: UINT = 0x010F;
1229pub const WM_IME_KEYLAST: UINT = 0x010F;
1230pub const WM_INITDIALOG: UINT = 0x0110;
1231pub const WM_COMMAND: UINT = 0x0111;
1232pub const WM_SYSCOMMAND: UINT = 0x0112;
1233pub const WM_TIMER: UINT = 0x0113;
1234pub const WM_HSCROLL: UINT = 0x0114;
1235pub const WM_VSCROLL: UINT = 0x0115;
1236pub const WM_INITMENU: UINT = 0x0116;
1237pub const WM_INITMENUPOPUP: UINT = 0x0117;
1238pub const WM_GESTURE: UINT = 0x0119;
1239pub const WM_GESTURENOTIFY: UINT = 0x011A;
1240pub const WM_MENUSELECT: UINT = 0x011F;
1241pub const WM_MENUCHAR: UINT = 0x0120;
1242pub const WM_ENTERIDLE: UINT = 0x0121;
1243pub const WM_MENURBUTTONUP: UINT = 0x0122;
1244pub const WM_MENUDRAG: UINT = 0x0123;
1245pub const WM_MENUGETOBJECT: UINT = 0x0124;
1246pub const WM_UNINITMENUPOPUP: UINT = 0x0125;
1247pub const WM_MENUCOMMAND: UINT = 0x0126;
1248pub const WM_CHANGEUISTATE: UINT = 0x0127;
1249pub const WM_UPDATEUISTATE: UINT = 0x0128;
1250pub const WM_QUERYUISTATE: UINT = 0x0129;
1251pub const UIS_SET: WORD = 1;
1252pub const UIS_CLEAR: WORD = 2;
1253pub const UIS_INITIALIZE: WORD = 3;
1254pub const UISF_HIDEFOCUS: WORD = 0x1;
1255pub const UISF_HIDEACCEL: WORD = 0x2;
1256pub const UISF_ACTIVE: WORD = 0x4;
1257pub const WM_CTLCOLORMSGBOX: UINT = 0x0132;
1258pub const WM_CTLCOLOREDIT: UINT = 0x0133;
1259pub const WM_CTLCOLORLISTBOX: UINT = 0x0134;
1260pub const WM_CTLCOLORBTN: UINT = 0x0135;
1261pub const WM_CTLCOLORDLG: UINT = 0x0136;
1262pub const WM_CTLCOLORSCROLLBAR: UINT = 0x0137;
1263pub const WM_CTLCOLORSTATIC: UINT = 0x0138;
1264pub const MN_GETHMENU: UINT = 0x01E1;
1265pub const WM_MOUSEFIRST: UINT = 0x0200;
1266pub const WM_MOUSEMOVE: UINT = 0x0200;
1267pub const WM_LBUTTONDOWN: UINT = 0x0201;
1268pub const WM_LBUTTONUP: UINT = 0x0202;
1269pub const WM_LBUTTONDBLCLK: UINT = 0x0203;
1270pub const WM_RBUTTONDOWN: UINT = 0x0204;
1271pub const WM_RBUTTONUP: UINT = 0x0205;
1272pub const WM_RBUTTONDBLCLK: UINT = 0x0206;
1273pub const WM_MBUTTONDOWN: UINT = 0x0207;
1274pub const WM_MBUTTONUP: UINT = 0x0208;
1275pub const WM_MBUTTONDBLCLK: UINT = 0x0209;
1276pub const WM_MOUSEWHEEL: UINT = 0x020A;
1277pub const WM_XBUTTONDOWN: UINT = 0x020B;
1278pub const WM_XBUTTONUP: UINT = 0x020C;
1279pub const WM_XBUTTONDBLCLK: UINT = 0x020D;
1280pub const WM_MOUSEHWHEEL: UINT = 0x020E;
1281pub const WM_MOUSELAST: UINT = 0x020E;
1282pub const WHEEL_DELTA: c_short = 120;
1283#[inline]
1284pub fn GET_WHEEL_DELTA_WPARAM(wParam: WPARAM) -> c_short {
1285    HIWORD(wParam as DWORD) as c_short
1286}
1287pub const WHEEL_PAGESCROLL: UINT = UINT_MAX;
1288#[inline]
1289pub fn GET_KEYSTATE_WPARAM(wParam: WPARAM) -> WORD {
1290    LOWORD(wParam as DWORD)
1291}
1292#[inline]
1293pub fn GET_NCHITTEST_WPARAM(wParam: WPARAM) -> c_short {
1294    LOWORD(wParam as DWORD) as c_short
1295}
1296#[inline]
1297pub fn GET_XBUTTON_WPARAM(wParam: WPARAM) -> WORD {
1298    HIWORD(wParam as DWORD)
1299}
1300pub const XBUTTON1: WORD = 0x0001;
1301pub const XBUTTON2: WORD = 0x0002;
1302pub const WM_PARENTNOTIFY: UINT = 0x0210;
1303pub const WM_ENTERMENULOOP: UINT = 0x0211;
1304pub const WM_EXITMENULOOP: UINT = 0x0212;
1305pub const WM_NEXTMENU: UINT = 0x0213;
1306pub const WM_SIZING: UINT = 0x0214;
1307pub const WM_CAPTURECHANGED: UINT = 0x0215;
1308pub const WM_MOVING: UINT = 0x0216;
1309pub const WM_POWERBROADCAST: UINT = 0x0218;
1310pub const PBT_APMQUERYSUSPEND: WPARAM = 0x0000;
1311pub const PBT_APMQUERYSTANDBY: WPARAM = 0x0001;
1312pub const PBT_APMQUERYSUSPENDFAILED: WPARAM = 0x0002;
1313pub const PBT_APMQUERYSTANDBYFAILED: WPARAM = 0x0003;
1314pub const PBT_APMSUSPEND: WPARAM = 0x0004;
1315pub const PBT_APMSTANDBY: WPARAM = 0x0005;
1316pub const PBT_APMRESUMECRITICAL: WPARAM = 0x0006;
1317pub const PBT_APMRESUMESUSPEND: WPARAM = 0x0007;
1318pub const PBT_APMRESUMESTANDBY: WPARAM = 0x0008;
1319pub const PBTF_APMRESUMEFROMFAILURE: LPARAM = 0x00000001;
1320pub const PBT_APMBATTERYLOW: WPARAM = 0x0009;
1321pub const PBT_APMPOWERSTATUSCHANGE: WPARAM = 0x000A;
1322pub const PBT_APMOEMEVENT: WPARAM = 0x000B;
1323pub const PBT_APMRESUMEAUTOMATIC: WPARAM = 0x0012;
1324pub const PBT_POWERSETTINGCHANGE: WPARAM = 0x8013;
1325STRUCT!{struct POWERBROADCAST_SETTING {
1326    PowerSetting: GUID,
1327    DataLength: DWORD,
1328    Data: [UCHAR; 1],
1329}}
1330pub type PPOWERBROADCAST_SETTING = *mut POWERBROADCAST_SETTING;
1331pub const WM_DEVICECHANGE: UINT = 0x0219;
1332pub const WM_MDICREATE: UINT = 0x0220;
1333pub const WM_MDIDESTROY: UINT = 0x0221;
1334pub const WM_MDIACTIVATE: UINT = 0x0222;
1335pub const WM_MDIRESTORE: UINT = 0x0223;
1336pub const WM_MDINEXT: UINT = 0x0224;
1337pub const WM_MDIMAXIMIZE: UINT = 0x0225;
1338pub const WM_MDITILE: UINT = 0x0226;
1339pub const WM_MDICASCADE: UINT = 0x0227;
1340pub const WM_MDIICONARRANGE: UINT = 0x0228;
1341pub const WM_MDIGETACTIVE: UINT = 0x0229;
1342pub const WM_MDISETMENU: UINT = 0x0230;
1343pub const WM_ENTERSIZEMOVE: UINT = 0x0231;
1344pub const WM_EXITSIZEMOVE: UINT = 0x0232;
1345pub const WM_DROPFILES: UINT = 0x0233;
1346pub const WM_MDIREFRESHMENU: UINT = 0x0234;
1347pub const WM_POINTERDEVICECHANGE: UINT = 0x238;
1348pub const WM_POINTERDEVICEINRANGE: UINT = 0x239;
1349pub const WM_POINTERDEVICEOUTOFRANGE: UINT = 0x23A;
1350pub const WM_TOUCH: UINT = 0x0240;
1351pub const WM_NCPOINTERUPDATE: UINT = 0x0241;
1352pub const WM_NCPOINTERDOWN: UINT = 0x0242;
1353pub const WM_NCPOINTERUP: UINT = 0x0243;
1354pub const WM_POINTERUPDATE: UINT = 0x0245;
1355pub const WM_POINTERDOWN: UINT = 0x0246;
1356pub const WM_POINTERUP: UINT = 0x0247;
1357pub const WM_POINTERENTER: UINT = 0x0249;
1358pub const WM_POINTERLEAVE: UINT = 0x024A;
1359pub const WM_POINTERACTIVATE: UINT = 0x024B;
1360pub const WM_POINTERCAPTURECHANGED: UINT = 0x024C;
1361pub const WM_TOUCHHITTESTING: UINT = 0x024D;
1362pub const WM_POINTERWHEEL: UINT = 0x024E;
1363pub const WM_POINTERHWHEEL: UINT = 0x024F;
1364pub const DM_POINTERHITTEST: UINT = 0x0250;
1365pub const WM_POINTERROUTEDTO: UINT = 0x0251;
1366pub const WM_POINTERROUTEDAWAY: UINT = 0x0252;
1367pub const WM_POINTERROUTEDRELEASED: UINT = 0x0253;
1368pub const WM_IME_SETCONTEXT: UINT = 0x0281;
1369pub const WM_IME_NOTIFY: UINT = 0x0282;
1370pub const WM_IME_CONTROL: UINT = 0x0283;
1371pub const WM_IME_COMPOSITIONFULL: UINT = 0x0284;
1372pub const WM_IME_SELECT: UINT = 0x0285;
1373pub const WM_IME_CHAR: UINT = 0x0286;
1374pub const WM_IME_REQUEST: UINT = 0x0288;
1375pub const WM_IME_KEYDOWN: UINT = 0x0290;
1376pub const WM_IME_KEYUP: UINT = 0x0291;
1377pub const WM_MOUSEHOVER: UINT = 0x02A1;
1378pub const WM_MOUSELEAVE: UINT = 0x02A3;
1379pub const WM_NCMOUSEHOVER: UINT = 0x02A0;
1380pub const WM_NCMOUSELEAVE: UINT = 0x02A2;
1381pub const WM_WTSSESSION_CHANGE: UINT = 0x02B1;
1382pub const WM_TABLET_FIRST: UINT = 0x02c0;
1383pub const WM_TABLET_LAST: UINT = 0x02df;
1384pub const WM_DPICHANGED: UINT = 0x02E0;
1385pub const WM_DPICHANGED_BEFOREPARENT: UINT = 0x02E2;
1386pub const WM_DPICHANGED_AFTERPARENT: UINT = 0x02E3;
1387pub const WM_GETDPISCALEDSIZE: UINT = 0x02E4;
1388pub const WM_CUT: UINT = 0x0300;
1389pub const WM_COPY: UINT = 0x0301;
1390pub const WM_PASTE: UINT = 0x0302;
1391pub const WM_CLEAR: UINT = 0x0303;
1392pub const WM_UNDO: UINT = 0x0304;
1393pub const WM_RENDERFORMAT: UINT = 0x0305;
1394pub const WM_RENDERALLFORMATS: UINT = 0x0306;
1395pub const WM_DESTROYCLIPBOARD: UINT = 0x0307;
1396pub const WM_DRAWCLIPBOARD: UINT = 0x0308;
1397pub const WM_PAINTCLIPBOARD: UINT = 0x0309;
1398pub const WM_VSCROLLCLIPBOARD: UINT = 0x030A;
1399pub const WM_SIZECLIPBOARD: UINT = 0x030B;
1400pub const WM_ASKCBFORMATNAME: UINT = 0x030C;
1401pub const WM_CHANGECBCHAIN: UINT = 0x030D;
1402pub const WM_HSCROLLCLIPBOARD: UINT = 0x030E;
1403pub const WM_QUERYNEWPALETTE: UINT = 0x030F;
1404pub const WM_PALETTEISCHANGING: UINT = 0x0310;
1405pub const WM_PALETTECHANGED: UINT = 0x0311;
1406pub const WM_HOTKEY: UINT = 0x0312;
1407pub const WM_PRINT: UINT = 0x0317;
1408pub const WM_PRINTCLIENT: UINT = 0x0318;
1409pub const WM_APPCOMMAND: UINT = 0x0319;
1410pub const WM_THEMECHANGED: UINT = 0x031A;
1411pub const WM_CLIPBOARDUPDATE: UINT = 0x031D;
1412pub const WM_DWMCOMPOSITIONCHANGED: UINT = 0x031E;
1413pub const WM_DWMNCRENDERINGCHANGED: UINT = 0x031F;
1414pub const WM_DWMCOLORIZATIONCOLORCHANGED: UINT = 0x0320;
1415pub const WM_DWMWINDOWMAXIMIZEDCHANGE: UINT = 0x0321;
1416pub const WM_DWMSENDICONICTHUMBNAIL: UINT = 0x0323;
1417pub const WM_DWMSENDICONICLIVEPREVIEWBITMAP: UINT = 0x0326;
1418pub const WM_GETTITLEBARINFOEX: UINT = 0x033F;
1419pub const WM_HANDHELDFIRST: UINT = 0x0358;
1420pub const WM_HANDHELDLAST: UINT = 0x035F;
1421pub const WM_AFXFIRST: UINT = 0x0360;
1422pub const WM_AFXLAST: UINT = 0x037F;
1423pub const WM_PENWINFIRST: UINT = 0x0380;
1424pub const WM_PENWINLAST: UINT = 0x038F;
1425pub const WM_APP: UINT = 0x8000;
1426pub const WM_USER: UINT = 0x0400;
1427pub const WMSZ_LEFT: UINT = 1;
1428pub const WMSZ_RIGHT: UINT = 2;
1429pub const WMSZ_TOP: UINT = 3;
1430pub const WMSZ_TOPLEFT: UINT = 4;
1431pub const WMSZ_TOPRIGHT: UINT = 5;
1432pub const WMSZ_BOTTOM: UINT = 6;
1433pub const WMSZ_BOTTOMLEFT: UINT = 7;
1434pub const WMSZ_BOTTOMRIGHT: UINT = 8;
1435pub const HTERROR: LRESULT = -2;
1436pub const HTTRANSPARENT: LRESULT = -1;
1437pub const HTNOWHERE: LRESULT = 0;
1438pub const HTCLIENT: LRESULT = 1;
1439pub const HTCAPTION: LRESULT = 2;
1440pub const HTSYSMENU: LRESULT = 3;
1441pub const HTGROWBOX: LRESULT = 4;
1442pub const HTSIZE: LRESULT = HTGROWBOX;
1443pub const HTMENU: LRESULT = 5;
1444pub const HTHSCROLL: LRESULT = 6;
1445pub const HTVSCROLL: LRESULT = 7;
1446pub const HTMINBUTTON: LRESULT = 8;
1447pub const HTMAXBUTTON: LRESULT = 9;
1448pub const HTLEFT: LRESULT = 10;
1449pub const HTRIGHT: LRESULT = 11;
1450pub const HTTOP: LRESULT = 12;
1451pub const HTTOPLEFT: LRESULT = 13;
1452pub const HTTOPRIGHT: LRESULT = 14;
1453pub const HTBOTTOM: LRESULT = 15;
1454pub const HTBOTTOMLEFT: LRESULT = 16;
1455pub const HTBOTTOMRIGHT: LRESULT = 17;
1456pub const HTBORDER: LRESULT = 18;
1457pub const HTREDUCE: LRESULT = HTMINBUTTON;
1458pub const HTZOOM: LRESULT = HTMAXBUTTON;
1459pub const HTSIZEFIRST: LRESULT = HTLEFT;
1460pub const HTSIZELAST: LRESULT = HTBOTTOMRIGHT;
1461pub const HTOBJECT: LRESULT = 19;
1462pub const HTCLOSE: LRESULT = 20;
1463pub const HTHELP: LRESULT = 21;
1464pub const SMTO_NORMAL: UINT = 0x0000;
1465pub const SMTO_BLOCK: UINT = 0x0001;
1466pub const SMTO_ABORTIFHUNG: UINT = 0x0002;
1467pub const SMTO_NOTIMEOUTIFNOTHUNG: UINT = 0x0008;
1468pub const SMTO_ERRORONEXIT: UINT = 0x0020;
1469pub const MA_ACTIVATE: UINT = 1;
1470pub const MA_ACTIVATEANDEAT: UINT = 2;
1471pub const MA_NOACTIVATE: UINT = 3;
1472pub const MA_NOACTIVATEANDEAT: UINT = 4;
1473pub const ICON_SMALL: UINT = 0;
1474pub const ICON_BIG: UINT = 1;
1475pub const ICON_SMALL2: UINT = 2;
1476extern "system" {
1477    pub fn RegisterWindowMessageA(
1478        lpString: LPCSTR,
1479    ) -> UINT;
1480    pub fn RegisterWindowMessageW(
1481        lpString: LPCWSTR,
1482    ) -> UINT;
1483}
1484pub const SIZE_RESTORED: WPARAM = 0;
1485pub const SIZE_MINIMIZED: WPARAM = 1;
1486pub const SIZE_MAXIMIZED: WPARAM = 2;
1487pub const SIZE_MAXSHOW: WPARAM = 3;
1488pub const SIZE_MAXHIDE: WPARAM = 4;
1489pub const SIZENORMAL: WPARAM = SIZE_RESTORED;
1490pub const SIZEICONIC: WPARAM = SIZE_MINIMIZED;
1491pub const SIZEFULLSCREEN: WPARAM = SIZE_MAXIMIZED;
1492pub const SIZEZOOMSHOW: WPARAM = SIZE_MAXSHOW;
1493pub const SIZEZOOMHIDE: WPARAM = SIZE_MAXHIDE;
1494STRUCT!{struct WINDOWPOS {
1495    hwnd: HWND,
1496    hwndInsertAfter: HWND,
1497    x: c_int,
1498    y: c_int,
1499    cx: c_int,
1500    cy: c_int,
1501    flags: UINT,
1502}}
1503pub type LPWINDOWPOS = *mut WINDOWPOS;
1504pub type PWINDOWPOS = *mut WINDOWPOS;
1505STRUCT!{struct NCCALCSIZE_PARAMS {
1506    rgrc: [RECT; 3],
1507    lppos: PWINDOWPOS,
1508}}
1509pub type LPNCCALCSIZE_PARAMS = *mut NCCALCSIZE_PARAMS;
1510pub const WVR_ALIGNTOP: LRESULT = 0x0010;
1511pub const WVR_ALIGNLEFT: LRESULT = 0x0020;
1512pub const WVR_ALIGNBOTTOM: LRESULT = 0x0040;
1513pub const WVR_ALIGNRIGHT: LRESULT = 0x0080;
1514pub const WVR_HREDRAW: LRESULT = 0x0100;
1515pub const WVR_VREDRAW: LRESULT = 0x0200;
1516pub const WVR_REDRAW: LRESULT = WVR_HREDRAW | WVR_VREDRAW;
1517pub const WVR_VALIDRECTS: LRESULT = 0x0400;
1518pub const MK_LBUTTON: WPARAM = 0x0001;
1519pub const MK_RBUTTON: WPARAM = 0x0002;
1520pub const MK_SHIFT: WPARAM = 0x0004;
1521pub const MK_CONTROL: WPARAM = 0x0008;
1522pub const MK_MBUTTON: WPARAM = 0x0010;
1523pub const MK_XBUTTON1: WPARAM = 0x0020;
1524pub const MK_XBUTTON2: WPARAM = 0x0040;
1525pub const TME_HOVER: DWORD = 0x00000001;
1526pub const TME_LEAVE: DWORD = 0x00000002;
1527pub const TME_NONCLIENT: DWORD = 0x00000010;
1528pub const TME_QUERY: DWORD = 0x40000000;
1529pub const TME_CANCEL: DWORD = 0x80000000;
1530pub const HOVER_DEFAULT: DWORD = 0xFFFFFFFF;
1531STRUCT!{struct TRACKMOUSEEVENT {
1532    cbSize: DWORD,
1533    dwFlags: DWORD,
1534    hwndTrack: HWND,
1535    dwHoverTime: DWORD,
1536}}
1537pub type LPTRACKMOUSEEVENT = *mut TRACKMOUSEEVENT;
1538extern "system" {
1539    pub fn TrackMouseEvent(
1540        lpEventTrack: LPTRACKMOUSEEVENT,
1541    ) -> BOOL;
1542}
1543pub const WS_OVERLAPPED: DWORD = 0x00000000;
1544pub const WS_POPUP: DWORD = 0x80000000;
1545pub const WS_CHILD: DWORD = 0x40000000;
1546pub const WS_MINIMIZE: DWORD = 0x20000000;
1547pub const WS_VISIBLE: DWORD = 0x10000000;
1548pub const WS_DISABLED: DWORD = 0x08000000;
1549pub const WS_CLIPSIBLINGS: DWORD = 0x04000000;
1550pub const WS_CLIPCHILDREN: DWORD = 0x02000000;
1551pub const WS_MAXIMIZE: DWORD = 0x01000000;
1552pub const WS_CAPTION: DWORD = 0x00C00000;
1553pub const WS_BORDER: DWORD = 0x00800000;
1554pub const WS_DLGFRAME: DWORD = 0x00400000;
1555pub const WS_VSCROLL: DWORD = 0x00200000;
1556pub const WS_HSCROLL: DWORD = 0x00100000;
1557pub const WS_SYSMENU: DWORD = 0x00080000;
1558pub const WS_THICKFRAME: DWORD = 0x00040000;
1559pub const WS_GROUP: DWORD = 0x00020000;
1560pub const WS_TABSTOP: DWORD = 0x00010000;
1561pub const WS_MINIMIZEBOX: DWORD = 0x00020000;
1562pub const WS_MAXIMIZEBOX: DWORD = 0x00010000;
1563pub const WS_TILED: DWORD = WS_OVERLAPPED;
1564pub const WS_ICONIC: DWORD = WS_MINIMIZE;
1565pub const WS_SIZEBOX: DWORD = WS_THICKFRAME;
1566pub const WS_TILEDWINDOW: DWORD = WS_OVERLAPPEDWINDOW;
1567pub const WS_OVERLAPPEDWINDOW: DWORD = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
1568    | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
1569pub const WS_POPUPWINDOW: DWORD = WS_POPUP | WS_BORDER | WS_SYSMENU;
1570pub const WS_CHILDWINDOW: DWORD = WS_CHILD;
1571pub const WS_EX_DLGMODALFRAME: DWORD = 0x00000001;
1572pub const WS_EX_NOPARENTNOTIFY: DWORD = 0x00000004;
1573pub const WS_EX_TOPMOST: DWORD = 0x00000008;
1574pub const WS_EX_ACCEPTFILES: DWORD = 0x00000010;
1575pub const WS_EX_TRANSPARENT: DWORD = 0x00000020;
1576pub const WS_EX_MDICHILD: DWORD = 0x00000040;
1577pub const WS_EX_TOOLWINDOW: DWORD = 0x00000080;
1578pub const WS_EX_WINDOWEDGE: DWORD = 0x00000100;
1579pub const WS_EX_CLIENTEDGE: DWORD = 0x00000200;
1580pub const WS_EX_CONTEXTHELP: DWORD = 0x00000400;
1581pub const WS_EX_RIGHT: DWORD = 0x00001000;
1582pub const WS_EX_LEFT: DWORD = 0x00000000;
1583pub const WS_EX_RTLREADING: DWORD = 0x00002000;
1584pub const WS_EX_LTRREADING: DWORD = 0x00000000;
1585pub const WS_EX_LEFTSCROLLBAR: DWORD = 0x00004000;
1586pub const WS_EX_RIGHTSCROLLBAR: DWORD = 0x00000000;
1587pub const WS_EX_CONTROLPARENT: DWORD = 0x00010000;
1588pub const WS_EX_STATICEDGE: DWORD = 0x00020000;
1589pub const WS_EX_APPWINDOW: DWORD = 0x00040000;
1590pub const WS_EX_OVERLAPPEDWINDOW: DWORD = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE;
1591pub const WS_EX_PALETTEWINDOW: DWORD = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
1592pub const WS_EX_LAYERED: DWORD = 0x00080000;
1593pub const WS_EX_NOINHERITLAYOUT: DWORD = 0x00100000;
1594pub const WS_EX_NOREDIRECTIONBITMAP: DWORD = 0x00200000;
1595pub const WS_EX_LAYOUTRTL: DWORD = 0x00400000;
1596pub const WS_EX_COMPOSITED: DWORD = 0x02000000;
1597pub const WS_EX_NOACTIVATE: DWORD = 0x08000000;
1598pub const CS_VREDRAW: UINT = 0x0001;
1599pub const CS_HREDRAW: UINT = 0x0002;
1600pub const CS_DBLCLKS: UINT = 0x0008;
1601pub const CS_OWNDC: UINT = 0x0020;
1602pub const CS_CLASSDC: UINT = 0x0040;
1603pub const CS_PARENTDC: UINT = 0x0080;
1604pub const CS_NOCLOSE: UINT = 0x0200;
1605pub const CS_SAVEBITS: UINT = 0x0800;
1606pub const CS_BYTEALIGNCLIENT: UINT = 0x1000;
1607pub const CS_BYTEALIGNWINDOW: UINT = 0x2000;
1608pub const CS_GLOBALCLASS: UINT = 0x4000;
1609pub const CS_IME: UINT = 0x00010000;
1610pub const CS_DROPSHADOW: UINT = 0x00020000;
1611pub const PRF_CHECKVISIBLE: UINT = 0x00000001;
1612pub const PRF_NONCLIENT: UINT = 0x00000002;
1613pub const PRF_CLIENT: UINT = 0x00000004;
1614pub const PRF_ERASEBKGND: UINT = 0x00000008;
1615pub const PRF_CHILDREN: UINT = 0x00000010;
1616pub const PRF_OWNED: UINT = 0x00000020;
1617pub const BDR_RAISEDOUTER: UINT = 0x0001;
1618pub const BDR_SUNKENOUTER: UINT = 0x0002;
1619pub const BDR_RAISEDINNER: UINT = 0x0004;
1620pub const BDR_SUNKENINNER: UINT = 0x0008;
1621pub const BDR_OUTER: UINT = BDR_RAISEDOUTER | BDR_SUNKENOUTER;
1622pub const BDR_INNER: UINT = BDR_RAISEDINNER | BDR_SUNKENINNER;
1623pub const BDR_RAISED: UINT = BDR_RAISEDOUTER | BDR_RAISEDINNER;
1624pub const BDR_SUNKEN: UINT = BDR_SUNKENOUTER | BDR_SUNKENINNER;
1625pub const EDGE_RAISED: UINT = BDR_RAISEDOUTER | BDR_RAISEDINNER;
1626pub const EDGE_SUNKEN: UINT = BDR_SUNKENOUTER | BDR_SUNKENINNER;
1627pub const EDGE_ETCHED: UINT = BDR_SUNKENOUTER | BDR_RAISEDINNER;
1628pub const EDGE_BUMP: UINT = BDR_RAISEDOUTER | BDR_SUNKENINNER;
1629pub const BF_LEFT: UINT = 0x0001;
1630pub const BF_TOP: UINT = 0x0002;
1631pub const BF_RIGHT: UINT = 0x0004;
1632pub const BF_BOTTOM: UINT = 0x0008;
1633pub const BF_TOPLEFT: UINT = BF_TOP | BF_LEFT;
1634pub const BF_TOPRIGHT: UINT = BF_TOP | BF_RIGHT;
1635pub const BF_BOTTOMLEFT: UINT = BF_BOTTOM | BF_LEFT;
1636pub const BF_BOTTOMRIGHT: UINT = BF_BOTTOM | BF_RIGHT;
1637pub const BF_RECT: UINT = BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM;
1638pub const BF_DIAGONAL: UINT = 0x0010;
1639pub const BF_DIAGONAL_ENDTOPRIGHT: UINT = BF_DIAGONAL | BF_TOP | BF_RIGHT;
1640pub const BF_DIAGONAL_ENDTOPLEFT: UINT = BF_DIAGONAL | BF_TOP | BF_LEFT;
1641pub const BF_DIAGONAL_ENDBOTTOMLEFT: UINT = BF_DIAGONAL | BF_BOTTOM | BF_LEFT;
1642pub const BF_DIAGONAL_ENDBOTTOMRIGHT: UINT = BF_DIAGONAL | BF_BOTTOM | BF_RIGHT;
1643pub const BF_MIDDLE: UINT = 0x0800;
1644pub const BF_SOFT: UINT = 0x1000;
1645pub const BF_ADJUST: UINT = 0x2000;
1646pub const BF_FLAT: UINT = 0x4000;
1647pub const BF_MONO: UINT = 0x8000;
1648extern "system" {
1649    pub fn DrawEdge(
1650        hdc: HDC,
1651        qrc: LPRECT,
1652        edge: UINT,
1653        grfFlags: UINT,
1654    ) -> BOOL;
1655}
1656pub const DFC_CAPTION: UINT = 1;
1657pub const DFC_MENU: UINT = 2;
1658pub const DFC_SCROLL: UINT = 3;
1659pub const DFC_BUTTON: UINT = 4;
1660pub const DFC_POPUPMENU: UINT = 5;
1661pub const DFCS_CAPTIONCLOSE: UINT = 0x0000;
1662pub const DFCS_CAPTIONMIN: UINT = 0x0001;
1663pub const DFCS_CAPTIONMAX: UINT = 0x0002;
1664pub const DFCS_CAPTIONRESTORE: UINT = 0x0003;
1665pub const DFCS_CAPTIONHELP: UINT = 0x0004;
1666pub const DFCS_MENUARROW: UINT = 0x0000;
1667pub const DFCS_MENUCHECK: UINT = 0x0001;
1668pub const DFCS_MENUBULLET: UINT = 0x0002;
1669pub const DFCS_MENUARROWRIGHT: UINT = 0x0004;
1670pub const DFCS_SCROLLUP: UINT = 0x0000;
1671pub const DFCS_SCROLLDOWN: UINT = 0x0001;
1672pub const DFCS_SCROLLLEFT: UINT = 0x0002;
1673pub const DFCS_SCROLLRIGHT: UINT = 0x0003;
1674pub const DFCS_SCROLLCOMBOBOX: UINT = 0x0005;
1675pub const DFCS_SCROLLSIZEGRIP: UINT = 0x0008;
1676pub const DFCS_SCROLLSIZEGRIPRIGHT: UINT = 0x0010;
1677pub const DFCS_BUTTONCHECK: UINT = 0x0000;
1678pub const DFCS_BUTTONRADIOIMAGE: UINT = 0x0001;
1679pub const DFCS_BUTTONRADIOMASK: UINT = 0x0002;
1680pub const DFCS_BUTTONRADIO: UINT = 0x0004;
1681pub const DFCS_BUTTON3STATE: UINT = 0x0008;
1682pub const DFCS_BUTTONPUSH: UINT = 0x0010;
1683pub const DFCS_INACTIVE: UINT = 0x0100;
1684pub const DFCS_PUSHED: UINT = 0x0200;
1685pub const DFCS_CHECKED: UINT = 0x0400;
1686pub const DFCS_TRANSPARENT: UINT = 0x0800;
1687pub const DFCS_HOT: UINT = 0x1000;
1688pub const DFCS_ADJUSTRECT: UINT = 0x2000;
1689pub const DFCS_FLAT: UINT = 0x4000;
1690pub const DFCS_MONO: UINT = 0x8000;
1691extern "system" {
1692    pub fn DrawFrameControl(
1693        hdc: HDC,
1694        lprc: LPRECT,
1695        uType: UINT,
1696        uState: UINT,
1697    ) -> BOOL;
1698}
1699pub const DC_ACTIVE: UINT = 0x0001;
1700pub const DC_SMALLCAP: UINT = 0x0002;
1701pub const DC_ICON: UINT = 0x0004;
1702pub const DC_TEXT: UINT = 0x0008;
1703pub const DC_INBUTTON: UINT = 0x0010;
1704pub const DC_GRADIENT: UINT = 0x0020;
1705pub const DC_BUTTONS: UINT = 0x1000;
1706extern "system" {
1707    pub fn DrawCaption(
1708        hwnd: HWND,
1709        hdc: HDC,
1710        lprect: *const RECT,
1711        flags: UINT,
1712    ) -> BOOL;
1713}
1714pub const IDANI_OPEN: c_int = 1;
1715pub const IDANI_CAPTION: c_int = 3;
1716extern "system" {
1717    pub fn DrawAnimatedRects(
1718        hwnd: HWND,
1719        idAni: c_int,
1720        lprcFrom: *const RECT,
1721        lprcTo: *const RECT,
1722    ) -> BOOL;
1723}
1724pub const CF_TEXT: UINT = 1;
1725pub const CF_BITMAP: UINT = 2;
1726pub const CF_METAFILEPICT: UINT = 3;
1727pub const CF_SYLK: UINT = 4;
1728pub const CF_DIF: UINT = 5;
1729pub const CF_TIFF: UINT = 6;
1730pub const CF_OEMTEXT: UINT = 7;
1731pub const CF_DIB: UINT = 8;
1732pub const CF_PALETTE: UINT = 9;
1733pub const CF_PENDATA: UINT = 10;
1734pub const CF_RIFF: UINT = 11;
1735pub const CF_WAVE: UINT = 12;
1736pub const CF_UNICODETEXT: UINT = 13;
1737pub const CF_ENHMETAFILE: UINT = 14;
1738pub const CF_HDROP: UINT = 15;
1739pub const CF_LOCALE: UINT = 16;
1740pub const CF_DIBV5: UINT = 17;
1741pub const CF_MAX: UINT = 18;
1742pub const CF_OWNERDISPLAY: UINT = 0x0080;
1743pub const CF_DSPTEXT: UINT = 0x0081;
1744pub const CF_DSPBITMAP: UINT = 0x0082;
1745pub const CF_DSPMETAFILEPICT: UINT = 0x0083;
1746pub const CF_DSPENHMETAFILE: UINT = 0x008E;
1747pub const CF_PRIVATEFIRST: UINT = 0x0200;
1748pub const CF_PRIVATELAST: UINT = 0x02FF;
1749pub const CF_GDIOBJFIRST: UINT = 0x0300;
1750pub const CF_GDIOBJLAST: UINT = 0x03FF;
1751pub const FVIRTKEY: BYTE = TRUE as u8;
1752pub const FNOINVERT: BYTE = 0x02;
1753pub const FSHIFT: BYTE = 0x04;
1754pub const FCONTROL: BYTE = 0x08;
1755pub const FALT: BYTE = 0x10;
1756STRUCT!{struct ACCEL {
1757    fVirt: BYTE,
1758    key: WORD,
1759    cmd: WORD,
1760}}
1761pub type LPACCEL = *mut ACCEL;
1762STRUCT!{struct PAINTSTRUCT {
1763    hdc: HDC,
1764    fErase: BOOL,
1765    rcPaint: RECT,
1766    fRestore: BOOL,
1767    fIncUpdate: BOOL,
1768    rgbReserved: [BYTE; 32],
1769}}
1770pub type PPAINTSTRUCT = *mut PAINTSTRUCT;
1771pub type NPPAINTSTRUCT = *mut PAINTSTRUCT;
1772pub type LPPAINTSTRUCT = *mut PAINTSTRUCT;
1773STRUCT!{struct CREATESTRUCTA {
1774    lpCreateParams: LPVOID,
1775    hInstance: HINSTANCE,
1776    hMenu: HMENU,
1777    hwndParent: HWND,
1778    cy: c_int,
1779    cx: c_int,
1780    y: c_int,
1781    x: c_int,
1782    style: LONG,
1783    lpszName: LPCSTR,
1784    lpszClass: LPCSTR,
1785    dwExStyle: DWORD,
1786}}
1787pub type LPCREATESTRUCTA = *mut CREATESTRUCTA;
1788STRUCT!{struct CREATESTRUCTW {
1789    lpCreateParams: LPVOID,
1790    hInstance: HINSTANCE,
1791    hMenu: HMENU,
1792    hwndParent: HWND,
1793    cy: c_int,
1794    cx: c_int,
1795    y: c_int,
1796    x: c_int,
1797    style: LONG,
1798    lpszName: LPCWSTR,
1799    lpszClass: LPCWSTR,
1800    dwExStyle: DWORD,
1801}}
1802pub type LPCREATESTRUCTW = *mut CREATESTRUCTW;
1803STRUCT!{struct WINDOWPLACEMENT {
1804    length: UINT,
1805    flags: UINT,
1806    showCmd: UINT,
1807    ptMinPosition: POINT,
1808    ptMaxPosition: POINT,
1809    rcNormalPosition: RECT,
1810}}
1811pub type PWINDOWPLACEMENT = *mut WINDOWPLACEMENT;
1812pub type LPWINDOWPLACEMENT = *mut WINDOWPLACEMENT;
1813pub const WPF_SETMINPOSITION: UINT = 0x0001;
1814pub const WPF_RESTORETOMAXIMIZED: UINT = 0x0002;
1815pub const WPF_ASYNCWINDOWPLACEMENT: UINT = 0x0004;
1816STRUCT!{struct NMHDR {
1817    hwndFrom: HWND,
1818    idFrom: UINT_PTR,
1819    code: UINT,
1820}}
1821pub type LPNMHDR = *mut NMHDR;
1822STRUCT!{struct STYLESTRUCT {
1823    styleOld: DWORD,
1824    styleNew: DWORD,
1825}}
1826pub type LPSTYLESTRUCT = *mut STYLESTRUCT;
1827pub const ODT_MENU: UINT = 1;
1828pub const ODT_LISTBOX: UINT = 2;
1829pub const ODT_COMBOBOX: UINT = 3;
1830pub const ODT_BUTTON: UINT = 4;
1831pub const ODT_STATIC: UINT = 5;
1832pub const ODA_DRAWENTIRE: UINT = 0x0001;
1833pub const ODA_SELECT: UINT = 0x0002;
1834pub const ODA_FOCUS: UINT = 0x0004;
1835pub const ODS_SELECTED: UINT = 0x0001;
1836pub const ODS_GRAYED: UINT = 0x0002;
1837pub const ODS_DISABLED: UINT = 0x0004;
1838pub const ODS_CHECKED: UINT = 0x0008;
1839pub const ODS_FOCUS: UINT = 0x0010;
1840pub const ODS_DEFAULT: UINT = 0x0020;
1841pub const ODS_COMBOBOXEDIT: UINT = 0x1000;
1842pub const ODS_HOTLIGHT: UINT = 0x0040;
1843pub const ODS_INACTIVE: UINT = 0x0080;
1844pub const ODS_NOACCEL: UINT = 0x0100;
1845pub const ODS_NOFOCUSRECT: UINT = 0x0200;
1846STRUCT!{struct MEASUREITEMSTRUCT {
1847    CtlType: UINT,
1848    CtlID: UINT,
1849    itemID: UINT,
1850    itemWidth: UINT,
1851    itemHeight: UINT,
1852    itemData: ULONG_PTR,
1853}}
1854pub type PMEASUREITEMSTRUCT = *mut MEASUREITEMSTRUCT;
1855pub type LPMEASUREITEMSTRUCT = *mut MEASUREITEMSTRUCT;
1856STRUCT!{struct DRAWITEMSTRUCT {
1857    CtlType: UINT,
1858    CtlID: UINT,
1859    itemID: UINT,
1860    itemAction: UINT,
1861    itemState: UINT,
1862    hwndItem: HWND,
1863    hDC: HDC,
1864    rcItem: RECT,
1865    itemData: ULONG_PTR,
1866}}
1867pub type PDRAWITEMSTRUCT = *mut DRAWITEMSTRUCT;
1868pub type LPDRAWITEMSTRUCT = *mut DRAWITEMSTRUCT;
1869STRUCT!{struct DELETEITEMSTRUCT {
1870    CtlType: UINT,
1871    CtlID: UINT,
1872    itemID: UINT,
1873    hwndItem: HWND,
1874    itemData: ULONG_PTR,
1875}}
1876pub type PDELETEITEMSTRUCT = *mut DELETEITEMSTRUCT;
1877pub type LPDELETEITEMSTRUCT = *mut DELETEITEMSTRUCT;
1878STRUCT!{struct COMPAREITEMSTRUCT {
1879    CtlType: UINT,
1880    CtlID: UINT,
1881    hwndItem: HWND,
1882    itemID1: UINT,
1883    itemData1: ULONG_PTR,
1884    itemID2: UINT,
1885    itemData2: ULONG_PTR,
1886    dwLocaleId: DWORD,
1887}}
1888pub type PCOMPAREITEMSTRUCT = *mut COMPAREITEMSTRUCT;
1889pub type LPCOMPAREITEMSTRUCT = *mut COMPAREITEMSTRUCT;
1890extern "system" {
1891    pub fn GetMessageA(
1892        lpMsg: LPMSG,
1893        hWnd: HWND,
1894        wMsgFilterMin: UINT,
1895        wMsgFilterMax: UINT,
1896    ) -> BOOL;
1897    pub fn GetMessageW(
1898        lpMsg: LPMSG,
1899        hWnd: HWND,
1900        wMsgFilterMin: UINT,
1901        wMsgFilterMax: UINT,
1902    ) -> BOOL;
1903    pub fn TranslateMessage(
1904        lpmsg: *const MSG,
1905    ) -> BOOL;
1906    pub fn DispatchMessageA(
1907        lpmsg: *const MSG,
1908    ) -> LRESULT;
1909    pub fn DispatchMessageW(
1910        lpmsg: *const MSG,
1911    ) -> LRESULT;
1912    pub fn SetMessageQueue(
1913        cMessagesMax: c_int,
1914    ) -> BOOL;
1915    pub fn PeekMessageA(
1916        lpMsg: LPMSG,
1917        hWnd: HWND,
1918        wMsgFilterMin: UINT,
1919        wMsgFilterMax: UINT,
1920        wRemoveMsg: UINT,
1921    ) -> BOOL;
1922    pub fn PeekMessageW(
1923        lpMsg: LPMSG,
1924        hWnd: HWND,
1925        wMsgFilterMin: UINT,
1926        wMsgFilterMax: UINT,
1927        wRemoveMsg: UINT,
1928    ) -> BOOL;
1929}
1930pub const PM_NOREMOVE: UINT = 0x0000;
1931pub const PM_REMOVE: UINT = 0x0001;
1932pub const PM_NOYIELD: UINT = 0x0002;
1933pub const PM_QS_INPUT: UINT = QS_INPUT << 16;
1934pub const PM_QS_POSTMESSAGE: UINT = (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16;
1935pub const PM_QS_PAINT: UINT = QS_PAINT << 16;
1936pub const PM_QS_SENDMESSAGE: UINT = QS_SENDMESSAGE << 16;
1937extern "system" {
1938    pub fn RegisterHotKey(
1939        hwnd: HWND,
1940        id: c_int,
1941        fsModifiers: UINT,
1942        vk: UINT,
1943    ) -> BOOL;
1944    pub fn UnregisterHotKey(
1945        hWnd: HWND,
1946        id: c_int,
1947    ) -> BOOL;
1948}
1949pub const MOD_ALT: LPARAM = 0x0001;
1950pub const MOD_CONTROL: LPARAM = 0x0002;
1951pub const MOD_SHIFT: LPARAM = 0x0004;
1952pub const MOD_WIN: LPARAM = 0x0008;
1953pub const MOD_NOREPEAT: LPARAM = 0x4000;
1954pub const IDHOT_SNAPWINDOW: WPARAM = -1isize as usize;
1955pub const IDHOT_SNAPDESKTOP: WPARAM = -2isize as usize;
1956pub const ENDSESSION_CLOSEAPP: UINT = 0x00000001;
1957pub const ENDSESSION_CRITICAL: UINT = 0x40000000;
1958pub const ENDSESSION_LOGOFF: UINT = 0x80000000;
1959pub const EWX_LOGOFF: UINT = 0x00000000;
1960pub const EWX_SHUTDOWN: UINT = 0x00000001;
1961pub const EWX_REBOOT: UINT = 0x00000002;
1962pub const EWX_FORCE: UINT = 0x00000004;
1963pub const EWX_POWEROFF: UINT = 0x00000008;
1964pub const EWX_FORCEIFHUNG: UINT = 0x00000010;
1965pub const EWX_QUICKRESOLVE: UINT = 0x00000020;
1966pub const EWX_RESTARTAPPS: UINT = 0x00000040;
1967pub const EWX_HYBRID_SHUTDOWN: UINT = 0x00400000;
1968pub const EWX_BOOTOPTIONS: UINT = 0x01000000;
1969// ExitWindows
1970extern "system" {
1971    pub fn ExitWindowsEx(
1972        uFlags: UINT,
1973        dwReason: DWORD,
1974    ) -> BOOL;
1975    pub fn SwapMouseButton(
1976        fSwap: BOOL,
1977    ) -> BOOL;
1978    pub fn GetMessagePos() -> DWORD;
1979    pub fn GetMessageTime() -> LONG;
1980    pub fn GetMessageExtraInfo() -> LPARAM;
1981    pub fn GetUnpredictedMessagePos() -> DWORD;
1982    pub fn IsWow64Message() -> BOOL;
1983    pub fn SetMessageExtraInfo(
1984        lParam: LPARAM,
1985    ) -> LPARAM;
1986    pub fn SendMessageA(
1987        hWnd: HWND,
1988        Msg: UINT,
1989        wParam: WPARAM,
1990        lParam: LPARAM,
1991    ) -> LRESULT;
1992    pub fn SendMessageW(
1993        hWnd: HWND,
1994        Msg: UINT,
1995        wParam: WPARAM,
1996        lParam: LPARAM,
1997    ) -> LRESULT;
1998    pub fn SendMessageTimeoutA(
1999        hWnd: HWND,
2000        Msg: UINT,
2001        wParam: WPARAM,
2002        lParam: LPARAM,
2003        fuFlags: UINT,
2004        uTimeout: UINT,
2005        lpdwResult: PDWORD_PTR,
2006    ) -> LRESULT;
2007    pub fn SendMessageTimeoutW(
2008        hWnd: HWND,
2009        Msg: UINT,
2010        wParam: WPARAM,
2011        lParam: LPARAM,
2012        fuFlags: UINT,
2013        uTimeout: UINT,
2014        lpdwResult: PDWORD_PTR,
2015    ) -> LRESULT;
2016    pub fn SendNotifyMessageA(
2017        hWnd: HWND,
2018        msg: UINT,
2019        wParam: WPARAM,
2020        lParam: LPARAM,
2021    ) -> BOOL;
2022    pub fn SendNotifyMessageW(
2023        hWnd: HWND,
2024        msg: UINT,
2025        wParam: WPARAM,
2026        lParam: LPARAM,
2027    ) -> BOOL;
2028    pub fn SendMessageCallbackA(
2029        hWnd: HWND,
2030        Msg: UINT,
2031        wParam: WPARAM,
2032        lParam: LPARAM,
2033        lpResultCallBack: SENDASYNCPROC,
2034        dwData: ULONG_PTR,
2035    ) -> BOOL;
2036    pub fn SendMessageCallbackW(
2037        hWnd: HWND,
2038        Msg: UINT,
2039        wParam: WPARAM,
2040        lParam: LPARAM,
2041        lpResultCallBack: SENDASYNCPROC,
2042        dwData: ULONG_PTR,
2043    ) -> BOOL;
2044}
2045STRUCT!{struct BSMINFO {
2046    cbSize: UINT,
2047    hdesk: HDESK,
2048    hwnd: HWND,
2049    luid: LUID,
2050}}
2051pub type PBSMINFO = *mut BSMINFO;
2052extern "system" {
2053    pub fn BroadcastSystemMessageExA(
2054        flags: DWORD,
2055        lpInfo: LPDWORD,
2056        Msg: UINT,
2057        wParam: WPARAM,
2058        lParam: LPARAM,
2059        pbsmInfo: PBSMINFO,
2060    ) -> c_long;
2061    pub fn BroadcastSystemMessageExW(
2062        flags: DWORD,
2063        lpInfo: LPDWORD,
2064        Msg: UINT,
2065        wParam: WPARAM,
2066        lParam: LPARAM,
2067        pbsmInfo: PBSMINFO,
2068    ) -> c_long;
2069    pub fn BroadcastSystemMessageA(
2070        flags: DWORD,
2071        lpInfo: LPDWORD,
2072        Msg: UINT,
2073        wParam: WPARAM,
2074        lParam: LPARAM,
2075    ) -> LONG;
2076    pub fn BroadcastSystemMessageW(
2077        flags: DWORD,
2078        lpInfo: LPDWORD,
2079        Msg: UINT,
2080        wParam: WPARAM,
2081        lParam: LPARAM,
2082    ) -> LONG;
2083}
2084pub const BSM_ALLCOMPONENTS: DWORD = 0x00000000;
2085pub const BSM_VXDS: DWORD = 0x00000001;
2086pub const BSM_NETDRIVER: DWORD = 0x00000002;
2087pub const BSM_INSTALLABLEDRIVERS: DWORD = 0x00000004;
2088pub const BSM_APPLICATIONS: DWORD = 0x00000008;
2089pub const BSM_ALLDESKTOPS: DWORD = 0x00000010;
2090pub const BSF_QUERY: DWORD = 0x00000001;
2091pub const BSF_IGNORECURRENTTASK: DWORD = 0x00000002;
2092pub const BSF_FLUSHDISK: DWORD = 0x00000004;
2093pub const BSF_NOHANG: DWORD = 0x00000008;
2094pub const BSF_POSTMESSAGE: DWORD = 0x00000010;
2095pub const BSF_FORCEIFHUNG: DWORD = 0x00000020;
2096pub const BSF_NOTIMEOUTIFNOTHUNG: DWORD = 0x00000040;
2097pub const BSF_ALLOWSFW: DWORD = 0x00000080;
2098pub const BSF_SENDNOTIFYMESSAGE: DWORD = 0x00000100;
2099pub const BSF_RETURNHDESK: DWORD = 0x00000200;
2100pub const BSF_LUID: DWORD = 0x00000400;
2101pub const BROADCAST_QUERY_DENY: DWORD = 0x424D5144;
2102pub type HDEVNOTIFY = PVOID;
2103pub type PHDEVNOTIFY = *mut HDEVNOTIFY;
2104pub const DEVICE_NOTIFY_WINDOW_HANDLE: DWORD = 0x00000000;
2105pub const DEVICE_NOTIFY_SERVICE_HANDLE: DWORD = 0x00000001;
2106pub const DEVICE_NOTIFY_ALL_INTERFACE_CLASSES: DWORD = 0x00000004;
2107extern "system" {
2108    pub fn RegisterDeviceNotificationA(
2109        hRecipient: HANDLE,
2110        notificationFilter: LPVOID,
2111        flags: DWORD,
2112    ) -> HDEVNOTIFY;
2113    pub fn RegisterDeviceNotificationW(
2114        hRecipient: HANDLE,
2115        notificationFilter: LPVOID,
2116        flags: DWORD,
2117    ) -> HDEVNOTIFY;
2118    pub fn UnregisterDeviceNotification(
2119        Handle: HDEVNOTIFY,
2120    ) -> BOOL;
2121}
2122pub type HPOWERNOTIFY = PVOID;
2123pub type PHPOWERNOTIFY = *mut HPOWERNOTIFY;
2124extern "system" {
2125    pub fn RegisterPowerSettingNotification(
2126        hRecipient: HANDLE,
2127        PowerSettingGuid: LPCGUID,
2128        Flags: DWORD,
2129    ) -> HPOWERNOTIFY;
2130    pub fn UnregisterPowerSettingNotification(
2131        Handle: HPOWERNOTIFY,
2132    ) -> BOOL;
2133    pub fn RegisterSuspendResumeNotification(
2134        hRecipient: HANDLE,
2135        Flags: DWORD,
2136    ) -> HPOWERNOTIFY;
2137    pub fn UnregisterSuspendResumeNotification(
2138        Handle: HPOWERNOTIFY,
2139    ) -> BOOL;
2140    pub fn PostMessageA(
2141        hWnd: HWND,
2142        Msg: UINT,
2143        wParam: WPARAM,
2144        lParam: LPARAM,
2145    ) -> BOOL;
2146    pub fn PostMessageW(
2147        hWnd: HWND,
2148        Msg: UINT,
2149        wParam: WPARAM,
2150        lParam: LPARAM,
2151    ) -> BOOL;
2152    pub fn PostThreadMessageA(
2153        idThread: DWORD,
2154        msg: UINT,
2155        wParam: WPARAM,
2156        lParam: LPARAM,
2157    ) -> BOOL;
2158    pub fn PostThreadMessageW(
2159        idThread: DWORD,
2160        msg: UINT,
2161        wParam: WPARAM,
2162        lParam: LPARAM,
2163    ) -> BOOL;
2164}
2165// PostAppMessageA
2166// PostAppMessageW
2167pub const HWND_BROADCAST: HWND = 0xffff as HWND;
2168pub const HWND_MESSAGE: HWND = -3isize as HWND;
2169extern "system" {
2170    pub fn AttachThreadInput(
2171        idAttach: DWORD,
2172        idAttachTo: DWORD,
2173        fAttach: BOOL,
2174    ) -> BOOL;
2175    pub fn ReplyMessage(
2176        lResult: LRESULT,
2177    ) -> BOOL;
2178    pub fn WaitMessage() -> BOOL;
2179    pub fn WaitForInputIdle(
2180        hProcess: HANDLE,
2181        dwMilliseconds: DWORD,
2182    ) -> DWORD;
2183    pub fn DefWindowProcA(
2184        hWnd: HWND,
2185        Msg: UINT,
2186        wParam: WPARAM,
2187        lParam: LPARAM,
2188    ) -> LRESULT;
2189    pub fn DefWindowProcW(
2190        hWnd: HWND,
2191        Msg: UINT,
2192        wParam: WPARAM,
2193        lParam: LPARAM,
2194    ) -> LRESULT;
2195    pub fn PostQuitMessage(
2196        nExitCode: c_int,
2197    );
2198    pub fn CallWindowProcA(
2199        lpPrevWndFunc: WNDPROC,
2200        hWnd: HWND,
2201        Msg: UINT,
2202        wParam: WPARAM,
2203        lParam: LPARAM,
2204    ) -> LRESULT;
2205    pub fn CallWindowProcW(
2206        lpPrevWndFunc: WNDPROC,
2207        hWnd: HWND,
2208        Msg: UINT,
2209        wParam: WPARAM,
2210        lParam: LPARAM,
2211    ) -> LRESULT;
2212    pub fn InSendMessage() -> BOOL;
2213    pub fn InSendMessageEx(
2214        lpReserved: LPVOID,
2215    ) -> DWORD;
2216}
2217pub const ISMEX_NOSEND: DWORD = 0x00000000;
2218pub const ISMEX_SEND: DWORD = 0x00000001;
2219pub const ISMEX_NOTIFY: DWORD = 0x00000002;
2220pub const ISMEX_CALLBACK: DWORD = 0x00000004;
2221pub const ISMEX_REPLIED: DWORD = 0x00000008;
2222extern "system" {
2223    pub fn GetDoubleClickTime() -> UINT;
2224    pub fn SetDoubleClickTime(
2225        uInterval: UINT,
2226    ) -> BOOL;
2227    pub fn RegisterClassA(
2228        lpWndClass: *const WNDCLASSA,
2229    ) -> ATOM;
2230    pub fn RegisterClassW(
2231        lpWndClass: *const WNDCLASSW,
2232    ) -> ATOM;
2233    pub fn UnregisterClassA(
2234        lpClassName: LPCSTR,
2235        hInstance: HINSTANCE,
2236    ) -> BOOL;
2237    pub fn UnregisterClassW(
2238        lpClassName: LPCWSTR,
2239        hInstance: HINSTANCE,
2240    ) -> BOOL;
2241    pub fn GetClassInfoA(
2242        hInstance: HINSTANCE,
2243        lpClassName: LPCSTR,
2244        lpWndClass: LPWNDCLASSA,
2245    ) -> BOOL;
2246    pub fn GetClassInfoW(
2247        hInstance: HINSTANCE,
2248        lpClassName: LPCWSTR,
2249        lpWndClass: LPWNDCLASSW,
2250    ) -> BOOL;
2251    pub fn RegisterClassExA(
2252        lpWndClass: *const WNDCLASSEXA,
2253    ) -> ATOM;
2254    pub fn RegisterClassExW(
2255        lpWndClass: *const WNDCLASSEXW,
2256    ) -> ATOM;
2257    pub fn GetClassInfoExA(
2258        hinst: HINSTANCE,
2259        lpszClass: LPCSTR,
2260        lpwcx: LPWNDCLASSEXA,
2261    ) -> BOOL;
2262    pub fn GetClassInfoExW(
2263        hinst: HINSTANCE,
2264        lpszClass: LPCWSTR,
2265        lpwcx: LPWNDCLASSEXW,
2266    ) -> BOOL;
2267}
2268pub const CW_USEDEFAULT: c_int = 0x80000000;
2269pub const HWND_DESKTOP: HWND = 0 as HWND;
2270FN!{stdcall PREGISTERCLASSNAMEW(
2271    LPCWSTR,
2272) -> BOOLEAN}
2273extern "system" {
2274    pub fn CreateWindowExA(
2275        dwExStyle: DWORD,
2276        lpClassName: LPCSTR,
2277        lpWindowName: LPCSTR,
2278        dwStyle: DWORD,
2279        x: c_int,
2280        y: c_int,
2281        nWidth: c_int,
2282        nHeight: c_int,
2283        hWndParent: HWND,
2284        hMenu: HMENU,
2285        hInstance: HINSTANCE,
2286        lpParam: LPVOID,
2287    ) -> HWND;
2288    pub fn CreateWindowExW(
2289        dwExStyle: DWORD,
2290        lpClassName: LPCWSTR,
2291        lpWindowName: LPCWSTR,
2292        dwStyle: DWORD,
2293        x: c_int,
2294        y: c_int,
2295        nWidth: c_int,
2296        nHeight: c_int,
2297        hWndParent: HWND,
2298        hMenu: HMENU,
2299        hInstance: HINSTANCE,
2300        lpParam: LPVOID,
2301    ) -> HWND;
2302}
2303// CreateWindowA
2304// CreateWindowW
2305extern "system" {
2306    pub fn IsWindow(
2307        hWnd: HWND,
2308    ) -> BOOL;
2309    pub fn IsMenu(
2310        hMenu: HMENU,
2311    ) -> BOOL;
2312    pub fn IsChild(
2313        hWndParent: HWND,
2314        hWnd: HWND,
2315    ) -> BOOL;
2316    pub fn DestroyWindow(
2317        hWnd: HWND,
2318    ) -> BOOL;
2319    pub fn ShowWindow(
2320        hWnd: HWND,
2321        nCmdShow: c_int,
2322    ) -> BOOL;
2323    pub fn AnimateWindow(
2324        hWnd: HWND,
2325        dwTime: DWORD,
2326        dwFlags: DWORD,
2327    ) -> BOOL;
2328    pub fn UpdateLayeredWindow(
2329        hWnd: HWND,
2330        hdcDst: HDC,
2331        pptDst: *mut POINT,
2332        psize: *mut SIZE,
2333        hdcSrc: HDC,
2334        pptSrc: *mut POINT,
2335        crKey: COLORREF,
2336        pblend: *mut BLENDFUNCTION,
2337        dwFlags: DWORD,
2338    ) -> BOOL;
2339}
2340STRUCT!{struct UPDATELAYEREDWINDOWINFO {
2341    cbSize: DWORD,
2342    hdcDst: HDC,
2343    pptDst: *const POINT,
2344    psize: *const SIZE,
2345    hdcSrc: HDC,
2346    pptSrc: *const POINT,
2347    crKey: COLORREF,
2348    pblend: *const BLENDFUNCTION,
2349    dwFlags: DWORD,
2350    prcDirty: *const RECT,
2351}}
2352pub type PUPDATELAYEREDWINDOWINFO = *mut UPDATELAYEREDWINDOWINFO;
2353extern "system" {
2354    pub fn UpdateLayeredWindowIndirect(
2355        hWnd: HWND,
2356        pULWInfo: *mut UPDATELAYEREDWINDOWINFO,
2357    ) -> BOOL;
2358    pub fn GetLayeredWindowAttributes(
2359        hwnd: HWND,
2360        pcrKey: *mut COLORREF,
2361        pbAlpha: *mut BYTE,
2362        pdwFlags: *mut DWORD,
2363    ) -> BOOL;
2364}
2365pub const PW_CLIENTONLY: DWORD = 0x00000001;
2366pub const PW_RENDERFULLCONTENT: DWORD = 0x00000002;
2367extern "system" {
2368    pub fn PrintWindow(
2369        hwnd: HWND,
2370        hdcBlt: HDC,
2371        nFlags: UINT,
2372    ) -> BOOL;
2373    pub fn SetLayeredWindowAttributes(
2374        hwnd: HWND,
2375        crKey: COLORREF,
2376        bAlpha: BYTE,
2377        dwFlags: DWORD,
2378    ) -> BOOL;
2379}
2380pub const LWA_COLORKEY: DWORD = 0x00000001;
2381pub const LWA_ALPHA: DWORD = 0x00000002;
2382pub const ULW_COLORKEY: DWORD = 0x00000001;
2383pub const ULW_ALPHA: DWORD = 0x00000002;
2384pub const ULW_OPAQUE: DWORD = 0x00000004;
2385pub const ULW_EX_NORESIZE: DWORD = 0x00000008;
2386extern "system" {
2387    pub fn ShowWindowAsync(
2388        hWnd: HWND,
2389        nCmdShow: c_int,
2390    ) -> BOOL;
2391    pub fn FlashWindow(
2392        hwnd: HWND,
2393        bInvert: BOOL,
2394    ) -> BOOL;
2395}
2396STRUCT!{struct FLASHWINFO {
2397    cbSize: UINT,
2398    hwnd: HWND,
2399    dwFlags: DWORD,
2400    uCount: UINT,
2401    dwTimeout: DWORD,
2402}}
2403pub type PFLASHWINFO = *mut FLASHWINFO;
2404extern "system" {
2405    pub fn FlashWindowEx(
2406        pfwi: PFLASHWINFO,
2407    ) -> BOOL;
2408}
2409pub const FLASHW_STOP: DWORD = 0;
2410pub const FLASHW_CAPTION: DWORD = 0x00000001;
2411pub const FLASHW_TRAY: DWORD = 0x00000002;
2412pub const FLASHW_ALL: DWORD = FLASHW_CAPTION | FLASHW_TRAY;
2413pub const FLASHW_TIMER: DWORD = 0x00000004;
2414pub const FLASHW_TIMERNOFG: DWORD = 0x0000000C;
2415extern "system" {
2416    pub fn ShowOwnedPopups(
2417        hWnd: HWND,
2418        fShow: BOOL,
2419    ) -> BOOL;
2420    pub fn OpenIcon(
2421        hWnd: HWND,
2422    ) -> BOOL;
2423    pub fn CloseWindow(
2424        hWnd: HWND,
2425    ) -> BOOL;
2426    pub fn MoveWindow(
2427        hWnd: HWND,
2428        X: c_int,
2429        Y: c_int,
2430        nWidth: c_int,
2431        nHeight: c_int,
2432        bRepaint: BOOL,
2433    ) -> BOOL;
2434    pub fn SetWindowPos(
2435        hWnd: HWND,
2436        hWndInsertAfter: HWND,
2437        X: c_int,
2438        Y: c_int,
2439        cx: c_int,
2440        cy: c_int,
2441        uFlags: UINT,
2442    ) -> BOOL;
2443    pub fn GetWindowPlacement(
2444        hWnd: HWND,
2445        lpwndpl: *mut WINDOWPLACEMENT,
2446    ) -> BOOL;
2447    pub fn SetWindowPlacement(
2448        hWnd: HWND,
2449        lpwndpl: *const WINDOWPLACEMENT,
2450    ) -> BOOL;
2451}
2452pub const WDA_NONE: DWORD = 0x00000000;
2453pub const WDA_MONITOR: DWORD = 0x00000001;
2454extern "system" {
2455    pub fn GetWindowDisplayAffinity(
2456        hWnd: HWND,
2457        pdwAffinity: *mut DWORD,
2458    ) -> BOOL;
2459    pub fn SetWindowDisplayAffinity(
2460        hWnd: HWND,
2461        dwAffinity: DWORD,
2462    ) -> BOOL;
2463    pub fn BeginDeferWindowPos(
2464        nNumWindows: c_int,
2465    ) -> HDWP;
2466    pub fn DeferWindowPos(
2467        hWinPosInfo: HDWP,
2468        hWnd: HWND,
2469        hWndInserAfter: HWND,
2470        x: c_int,
2471        y: c_int,
2472        cx: c_int,
2473        cy: c_int,
2474        uFlags: UINT,
2475    ) -> HDWP;
2476    pub fn EndDeferWindowPos(
2477        hWinPosInfo: HDWP,
2478    ) -> BOOL;
2479    pub fn IsWindowVisible(
2480        hWnd: HWND,
2481    ) -> BOOL;
2482    pub fn IsIconic(
2483        hWnd: HWND,
2484    ) -> BOOL;
2485    pub fn AnyPopup() -> BOOL;
2486    pub fn BringWindowToTop(
2487        hWnd: HWND,
2488    ) -> BOOL;
2489    pub fn IsZoomed(
2490        hwnd: HWND,
2491    ) -> BOOL;
2492}
2493pub const SWP_NOSIZE: UINT = 0x0001;
2494pub const SWP_NOMOVE: UINT = 0x0002;
2495pub const SWP_NOZORDER: UINT = 0x0004;
2496pub const SWP_NOREDRAW: UINT = 0x0008;
2497pub const SWP_NOACTIVATE: UINT = 0x0010;
2498pub const SWP_FRAMECHANGED: UINT = 0x0020;
2499pub const SWP_SHOWWINDOW: UINT = 0x0040;
2500pub const SWP_HIDEWINDOW: UINT = 0x0080;
2501pub const SWP_NOCOPYBITS: UINT = 0x0100;
2502pub const SWP_NOOWNERZORDER: UINT = 0x0200;
2503pub const SWP_NOSENDCHANGING: UINT = 0x0400;
2504pub const SWP_DRAWFRAME: UINT = SWP_FRAMECHANGED;
2505pub const SWP_NOREPOSITION: UINT = SWP_NOOWNERZORDER;
2506pub const SWP_DEFERERASE: UINT = 0x2000;
2507pub const SWP_ASYNCWINDOWPOS: UINT = 0x4000;
2508pub const HWND_TOP: HWND = 0 as HWND;
2509pub const HWND_BOTTOM: HWND = 1 as HWND;
2510pub const HWND_TOPMOST: HWND = -1isize as HWND;
2511pub const HWND_NOTOPMOST: HWND = -2isize as HWND;
2512// FIXME packed(2)
2513STRUCT!{#[repr(packed)] struct DLGTEMPLATE {
2514    style: DWORD,
2515    dwExtendedStyle: DWORD,
2516    cdit: WORD,
2517    x: c_short,
2518    y: c_short,
2519    cx: c_short,
2520    cy: c_short,
2521}}
2522pub type LPDLGTEMPLATEA = *mut DLGTEMPLATE;
2523pub type LPDLGTEMPLATEW = *mut DLGTEMPLATE;
2524pub type LPCDLGTEMPLATEA = *const DLGTEMPLATE;
2525pub type LPCDLGTEMPLATEW = *const DLGTEMPLATE;
2526// FIXME packed(2)
2527STRUCT!{#[repr(packed)] struct DLGITEMTEMPLATE {
2528    style: DWORD,
2529    dwExtendedStyle: DWORD,
2530    x: c_short,
2531    y: c_short,
2532    cx: c_short,
2533    cy: c_short,
2534    id: WORD,
2535}}
2536pub type PDLGITEMTEMPLATEA = *mut DLGITEMTEMPLATE;
2537pub type PDLGITEMTEMPLATEW = *mut DLGITEMTEMPLATE;
2538pub type LPDLGITEMTEMPLATEA = *mut DLGITEMTEMPLATE;
2539pub type LPDLGITEMTEMPLATEW = *mut DLGITEMTEMPLATE;
2540extern "system" {
2541    pub fn CreateDialogParamA(
2542        hInstance: HINSTANCE,
2543        lpTemplateName: LPCSTR,
2544        hWndParent: HWND,
2545        lpDialogFunc: DLGPROC,
2546        dwInitParam: LPARAM,
2547    ) -> HWND;
2548    pub fn CreateDialogParamW(
2549        hInstance: HINSTANCE,
2550        lpTemplateName: LPCWSTR,
2551        hWndParent: HWND,
2552        lpDialogFunc: DLGPROC,
2553        dwInitParam: LPARAM,
2554    ) -> HWND;
2555    pub fn CreateDialogIndirectParamA(
2556        hInstance: HINSTANCE,
2557        lpTemplate: LPCDLGTEMPLATEA,
2558        hWndParent: HWND,
2559        lpDialogFunc: DLGPROC,
2560        dwInitParam: LPARAM,
2561    ) -> HWND;
2562    pub fn CreateDialogIndirectParamW(
2563        hInstance: HINSTANCE,
2564        lpTemplate: LPCDLGTEMPLATEW,
2565        hWndParent: HWND,
2566        lpDialogFunc: DLGPROC,
2567        dwInitParam: LPARAM,
2568    ) -> HWND;
2569}
2570// CreateDialogA
2571// CreateDialogW
2572// CreateDialogIndirectA
2573// CreateDialogIndirectW
2574extern "system" {
2575    pub fn DialogBoxParamA(
2576        hInstance: HINSTANCE,
2577        lpTemplateName: LPCSTR,
2578        hWndParent: HWND,
2579        lpDialogFunc: DLGPROC,
2580        dwInitParam: LPARAM,
2581    ) -> INT_PTR;
2582    pub fn DialogBoxParamW(
2583        hInstance: HINSTANCE,
2584        lpTemplateName: LPCWSTR,
2585        hWndParent: HWND,
2586        lpDialogFunc: DLGPROC,
2587        dwInitParam: LPARAM,
2588    ) -> INT_PTR;
2589    pub fn DialogBoxIndirectParamA(
2590        hInstance: HINSTANCE,
2591        hDialogTemplate: LPCDLGTEMPLATEA,
2592        hWndParent: HWND,
2593        lpDialogFunc: DLGPROC,
2594        dwInitParam: LPARAM,
2595    ) -> INT_PTR;
2596    pub fn DialogBoxIndirectParamW(
2597        hInstance: HINSTANCE,
2598        hDialogTemplate: LPCDLGTEMPLATEW,
2599        hWndParent: HWND,
2600        lpDialogFunc: DLGPROC,
2601        dwInitParam: LPARAM,
2602    ) -> INT_PTR;
2603}
2604// DialogBoxA
2605// DialogBoxW
2606// DialogBoxIndirectA
2607// DialogBoxIndirectW
2608extern "system" {
2609    pub fn EndDialog(
2610        hDlg: HWND,
2611        nResult: INT_PTR,
2612    ) -> BOOL;
2613    pub fn GetDlgItem(
2614        hDlg: HWND,
2615        nIDDlgItem: c_int,
2616    ) -> HWND;
2617    pub fn SetDlgItemInt(
2618        hDlg: HWND,
2619        nIDDlgItem: c_int,
2620        uValue: UINT,
2621        bSigned: BOOL,
2622    ) -> BOOL;
2623    pub fn GetDlgItemInt(
2624        hDlg: HWND,
2625        nIDDlgItem: c_int,
2626        lpTranslated: *mut BOOL,
2627        bSigned: BOOL,
2628    ) -> UINT;
2629    pub fn SetDlgItemTextA(
2630        hDlg: HWND,
2631        nIDDlgItem: c_int,
2632        lpString: LPCSTR,
2633    ) -> BOOL;
2634    pub fn SetDlgItemTextW(
2635        hDlg: HWND,
2636        nIDDlgItem: c_int,
2637        lpString: LPCWSTR,
2638    ) -> BOOL;
2639    pub fn GetDlgItemTextA(
2640        hDlg: HWND,
2641        nIDDlgItem: c_int,
2642        lpString: LPSTR,
2643        nMaxCount: c_int,
2644    ) -> UINT;
2645    pub fn GetDlgItemTextW(
2646        hDlg: HWND,
2647        nIDDlgItem: c_int,
2648        lpString: LPWSTR,
2649        nMaxCount: c_int,
2650    ) -> UINT;
2651    pub fn CheckDlgButton(
2652        hDlg: HWND,
2653        nIDButton: c_int,
2654        uCheck: UINT,
2655    ) -> BOOL;
2656    pub fn CheckRadioButton(
2657        hDlg: HWND,
2658        nIDFirstButton: c_int,
2659        nIDLasatButton: c_int,
2660        nIDCheckButton: c_int,
2661    ) -> BOOL;
2662    pub fn IsDlgButtonChecked(
2663        hDlg: HWND,
2664        nIDButton: c_int,
2665    ) -> UINT;
2666    pub fn SendDlgItemMessageA(
2667        hDlg: HWND,
2668        nIDDlgItem: c_int,
2669        Msg: UINT,
2670        wParam: WPARAM,
2671        lParam: LPARAM,
2672    ) -> LRESULT;
2673    pub fn SendDlgItemMessageW(
2674        hDlg: HWND,
2675        nIDDlgItem: c_int,
2676        Msg: UINT,
2677        wParam: WPARAM,
2678        lParam: LPARAM,
2679    ) -> LRESULT;
2680    pub fn GetNextDlgGroupItem(
2681        hDlg: HWND,
2682        hCtl: HWND,
2683        bPrevious: BOOL,
2684    ) -> HWND;
2685    pub fn GetNextDlgTabItem(
2686        hDlg: HWND,
2687        hCtl: HWND,
2688        bPrevious: BOOL,
2689    ) -> HWND;
2690    pub fn GetDlgCtrlID(
2691        hwnd: HWND,
2692    ) -> c_int;
2693    pub fn GetDialogBaseUnits() -> LONG;
2694    pub fn DefDlgProcA(
2695        hDlg: HWND,
2696        msg: UINT,
2697        wParam: WPARAM,
2698        lParam: LPARAM,
2699    ) -> LRESULT;
2700    pub fn DefDlgProcW(
2701        hDlg: HWND,
2702        msg: UINT,
2703        wParam: WPARAM,
2704        lParam: LPARAM,
2705    ) -> LRESULT;
2706}
2707ENUM!{enum DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS {
2708    DCDC_DEFAULT = 0x0000,
2709    DCDC_DISABLE_FONT_UPDATE = 0x0001,
2710    DCDC_DISABLE_RELAYOUT = 0x0002,
2711}}
2712extern "system" {
2713    pub fn SetDialogControlDpiChangeBehavior(
2714        hwnd: HWND,
2715        mask: DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS,
2716        values: DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS,
2717    ) -> BOOL;
2718    pub fn GetDialogControlDpiChangeBehavior(
2719        hwnd: HWND,
2720    ) -> DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS;
2721}
2722ENUM!{enum DIALOG_DPI_CHANGE_BEHAVIORS {
2723    DDC_DEFAULT = 0x0000,
2724    DDC_DISABLE_ALL = 0x0001,
2725    DDC_DISABLE_RESIZE = 0x0002,
2726    DDC_DISABLE_CONTROL_RELAYOUT = 0x0004,
2727}}
2728extern "system" {
2729    pub fn SetDialogDpiChangeBehavior(
2730        hDlg: HWND,
2731        mask: DIALOG_DPI_CHANGE_BEHAVIORS,
2732        values: DIALOG_DPI_CHANGE_BEHAVIORS,
2733    ) -> BOOL;
2734    pub fn GetDialogDpiChangeBehavior(
2735        hDlg: HWND,
2736    ) -> DIALOG_DPI_CHANGE_BEHAVIORS;
2737    pub fn CallMsgFilterA(
2738        lpMsg: LPMSG,
2739        nCode: c_int,
2740    ) -> BOOL;
2741    pub fn CallMsgFilterW(
2742        lpMsg: LPMSG,
2743        nCode: c_int,
2744    ) -> BOOL;
2745    pub fn OpenClipboard(
2746        hWnd: HWND,
2747    ) -> BOOL;
2748    pub fn CloseClipboard() -> BOOL;
2749    pub fn GetClipboardSequenceNumber() -> DWORD;
2750    pub fn GetClipboardOwner() -> HWND;
2751    pub fn SetClipboardViewer(
2752        hWndNewViewer: HWND,
2753    ) -> HWND;
2754    pub fn GetClipboardViewer() -> HWND;
2755    pub fn ChangeClipboardChain(
2756        hwndRemove: HWND,
2757        hwndNewNext: HWND,
2758    ) -> BOOL;
2759    pub fn SetClipboardData(
2760        uFormat: UINT,
2761        hMem: HANDLE,
2762    ) -> HANDLE;
2763    pub fn GetClipboardData(
2764        uFormat: UINT,
2765    ) -> HANDLE;
2766    pub fn RegisterClipboardFormatA(
2767        lpszFormat: LPCSTR,
2768    ) -> UINT;
2769    pub fn RegisterClipboardFormatW(
2770        lpszFormat: LPCWSTR,
2771    ) -> UINT;
2772    pub fn CountClipboardFormats() -> c_int;
2773    pub fn EnumClipboardFormats(
2774        format: UINT,
2775    ) -> UINT;
2776    pub fn GetClipboardFormatNameA(
2777        format: UINT,
2778        lpszFormatName: LPSTR,
2779        cchMaxCount: c_int,
2780    ) -> c_int;
2781    pub fn GetClipboardFormatNameW(
2782        format: UINT,
2783        lpszFormatName: LPWSTR,
2784        cchMaxCount: c_int,
2785    ) -> c_int;
2786    pub fn EmptyClipboard() -> BOOL;
2787    pub fn IsClipboardFormatAvailable(
2788        format: UINT,
2789    ) -> BOOL;
2790    pub fn GetPriorityClipboardFormat(
2791        paFormatPriorityList: *mut UINT,
2792        cFormats: c_int,
2793    ) -> c_int;
2794    pub fn GetOpenClipboardWindow() -> HWND;
2795    pub fn AddClipboardFormatListener(
2796        hWnd: HWND,
2797    ) -> BOOL;
2798    pub fn RemoveClipboardFormatListener(
2799        hWnd: HWND,
2800    ) -> BOOL;
2801    pub fn GetUpdatedClipboardFormats(
2802        lpuiFormats: PUINT,
2803        cFormats: UINT,
2804        pcFormatsOUT: PUINT,
2805    ) -> BOOL;
2806    pub fn CharToOemA(
2807        pSrc: LPCSTR,
2808        pDst: LPSTR,
2809    ) -> BOOL;
2810    pub fn CharToOemW(
2811        pSrc: LPCWSTR,
2812        pDst: LPSTR,
2813    ) -> BOOL;
2814    pub fn OemToCharA(
2815        pSrc: LPCSTR,
2816        pDst: LPSTR,
2817    ) -> BOOL;
2818    pub fn OemToCharW(
2819        pSrc: LPCSTR,
2820        pDst: LPWSTR,
2821    ) -> BOOL;
2822    pub fn CharToOemBuffA(
2823        lpszSrc: LPCSTR,
2824        lpszDst: LPSTR,
2825        cchDstLength: DWORD,
2826    ) -> BOOL;
2827    pub fn CharToOemBuffW(
2828        lpszSrc: LPCWSTR,
2829        lpszDst: LPSTR,
2830        cchDstLength: DWORD,
2831    ) -> BOOL;
2832    pub fn OemToCharBuffA(
2833        lpszSrc: LPCSTR,
2834        lpszDst: LPSTR,
2835        cchDstLength: DWORD,
2836    ) -> BOOL;
2837    pub fn OemToCharBuffW(
2838        lpszSrc: LPCSTR,
2839        lpszDst: LPWSTR,
2840        cchDstLength: DWORD,
2841    ) -> BOOL;
2842    pub fn CharUpperA(
2843        lpsz: LPSTR,
2844    ) -> LPSTR;
2845    pub fn CharUpperW(
2846        lpsz: LPWSTR,
2847    ) -> LPWSTR;
2848    pub fn CharUpperBuffA(
2849        lpsz: LPSTR,
2850        cchLength: DWORD,
2851    ) -> DWORD;
2852    pub fn CharUpperBuffW(
2853        lpsz: LPWSTR,
2854        cchLength: DWORD,
2855    ) -> DWORD;
2856    pub fn CharLowerA(
2857        lpsz: LPSTR,
2858    ) -> LPSTR;
2859    pub fn CharLowerW(
2860        lpsz: LPWSTR,
2861    ) -> LPWSTR;
2862    pub fn CharLowerBuffA(
2863        lpsz: LPSTR,
2864        cchLength: DWORD,
2865    ) -> DWORD;
2866    pub fn CharLowerBuffW(
2867        lpsz: LPWSTR,
2868        cchLength: DWORD,
2869    ) -> DWORD;
2870    pub fn CharNextA(
2871        lpsz: LPCSTR,
2872    ) -> LPSTR;
2873    pub fn CharNextW(
2874        lpsz: LPCWSTR,
2875    ) -> LPWSTR;
2876    pub fn CharPrevA(
2877        lpszStart: LPCSTR,
2878        lpszCurrent: LPCSTR,
2879    ) -> LPSTR;
2880    pub fn CharPrevW(
2881        lpszStart: LPCWSTR,
2882        lpszCurrent: LPCWSTR,
2883    ) -> LPWSTR;
2884    pub fn CharNextExA(
2885        codePage: WORD,
2886        lpCurrentChar: LPSTR,
2887        dwFlags: DWORD,
2888    ) -> LPSTR;
2889    pub fn CharPrevExA(
2890        codePage: WORD,
2891        lpStart: LPCSTR,
2892        lpCurrentChar: LPCSTR,
2893        dwFlags: DWORD,
2894    ) -> LPSTR;
2895}
2896// AnsiToOem
2897// OemToAnsi
2898// AnsiToOemBuff
2899// OemToAnsiBuff
2900// AnsiUpper
2901// AnsiUpperBuff
2902// AnsiLower
2903// AnsiLowerBuff
2904// AnsiNext
2905// AnsiPrev
2906extern "system" {
2907    pub fn IsCharAlphaA(
2908        ch: CHAR,
2909    ) -> BOOL;
2910    pub fn IsCharAlphaW(
2911        ch: WCHAR,
2912    ) -> BOOL;
2913    pub fn IsCharAlphaNumericA(
2914        ch: CHAR,
2915    ) -> BOOL;
2916    pub fn IsCharAlphaNumericW(
2917        ch: WCHAR,
2918    ) -> BOOL;
2919    pub fn IsCharUpperA(
2920        ch: CHAR,
2921    ) -> BOOL;
2922    pub fn IsCharUpperW(
2923        ch: WCHAR,
2924    ) -> BOOL;
2925    pub fn IsCharLowerA(
2926        ch: CHAR,
2927    ) -> BOOL;
2928    pub fn IsCharLowerW(
2929        ch: WCHAR,
2930    ) -> BOOL;
2931    pub fn SetFocus(
2932        hWnd: HWND,
2933    ) -> HWND;
2934    pub fn GetActiveWindow() -> HWND;
2935    pub fn GetFocus() -> HWND;
2936    pub fn GetKBCodePage() -> UINT;
2937    pub fn GetKeyState(
2938        nVirtKey: c_int,
2939    ) -> SHORT;
2940    pub fn GetAsyncKeyState(
2941        vKey: c_int,
2942    ) -> SHORT;
2943    pub fn GetKeyboardState(
2944        lpKeyState: PBYTE,
2945    ) -> BOOL;
2946    pub fn SetKeyboardState(
2947        lpKeyState: LPBYTE,
2948    ) -> BOOL;
2949    pub fn GetKeyNameTextA(
2950        lparam: LONG,
2951        lpString: LPSTR,
2952        cchSize: c_int,
2953    ) -> c_int;
2954    pub fn GetKeyNameTextW(
2955        lParam: LONG,
2956        lpString: LPWSTR,
2957        cchSize: c_int,
2958    ) -> c_int;
2959    pub fn GetKeyboardType(
2960        nTypeFlag: c_int,
2961    ) -> c_int;
2962    pub fn ToAscii(
2963        uVirtKey: UINT,
2964        uScanCode: UINT,
2965        lpKeyState: *const BYTE,
2966        lpChar: LPWORD,
2967        uFlags: UINT,
2968    ) -> c_int;
2969    pub fn ToAsciiEx(
2970        uVirtKey: UINT,
2971        uScanCode: UINT,
2972        lpKeyState: *const BYTE,
2973        lpChar: LPWORD,
2974        uFlags: UINT,
2975        dwhkl: HKL,
2976    ) -> c_int;
2977    pub fn ToUnicode(
2978        wVirtKey: UINT,
2979        wScanCode: UINT,
2980        lpKeyState: *const BYTE,
2981        lwszBuff: LPWSTR,
2982        cchBuff: c_int,
2983        wFlags: UINT,
2984    ) -> c_int;
2985    pub fn OemKeyScan(
2986        wOemChar: WORD,
2987    ) -> DWORD;
2988    pub fn VkKeyScanA(
2989        ch: CHAR,
2990    ) -> SHORT;
2991    pub fn VkKeyScanW(
2992        ch: WCHAR,
2993    ) -> SHORT;
2994    pub fn VkKeyScanExA(
2995        ch: CHAR,
2996        dwhkl: HKL,
2997    ) -> SHORT;
2998    pub fn VkKeyScanExW(
2999        ch: WCHAR,
3000        dwhkl: HKL,
3001    ) -> SHORT;
3002}
3003pub const KEYEVENTF_EXTENDEDKEY: DWORD = 0x0001;
3004pub const KEYEVENTF_KEYUP: DWORD = 0x0002;
3005pub const KEYEVENTF_UNICODE: DWORD = 0x0004;
3006pub const KEYEVENTF_SCANCODE: DWORD = 0x0008;
3007extern "system" {
3008    pub fn keybd_event(
3009        bVk: BYTE,
3010        bScan: BYTE,
3011        dwFlags: DWORD,
3012        dwExtraInfo: ULONG_PTR,
3013    );
3014}
3015pub const MOUSEEVENTF_MOVE: DWORD = 0x0001;
3016pub const MOUSEEVENTF_LEFTDOWN: DWORD = 0x0002;
3017pub const MOUSEEVENTF_LEFTUP: DWORD = 0x0004;
3018pub const MOUSEEVENTF_RIGHTDOWN: DWORD = 0x0008;
3019pub const MOUSEEVENTF_RIGHTUP: DWORD = 0x0010;
3020pub const MOUSEEVENTF_MIDDLEDOWN: DWORD = 0x0020;
3021pub const MOUSEEVENTF_MIDDLEUP: DWORD = 0x0040;
3022pub const MOUSEEVENTF_XDOWN: DWORD = 0x0080;
3023pub const MOUSEEVENTF_XUP: DWORD = 0x0100;
3024pub const MOUSEEVENTF_WHEEL: DWORD = 0x0800;
3025pub const MOUSEEVENTF_HWHEEL: DWORD = 0x01000;
3026pub const MOUSEEVENTF_MOVE_NOCOALESCE: DWORD = 0x2000;
3027pub const MOUSEEVENTF_VIRTUALDESK: DWORD = 0x4000;
3028pub const MOUSEEVENTF_ABSOLUTE: DWORD = 0x8000;
3029extern "system" {
3030    pub fn mouse_event(
3031        dwFlags: DWORD,
3032        dx: DWORD,
3033        dy: DWORD,
3034        dwData: DWORD,
3035        dwExtraInfo: ULONG_PTR,
3036    );
3037}
3038STRUCT!{struct MOUSEINPUT {
3039    dx: LONG,
3040    dy: LONG,
3041    mouseData: DWORD,
3042    dwFlags: DWORD,
3043    time: DWORD,
3044    dwExtraInfo: ULONG_PTR,
3045}}
3046pub type PMOUSEINPUT = *mut MOUSEINPUT;
3047pub type LPMOUSEINPUT = *mut MOUSEINPUT;
3048STRUCT!{struct KEYBDINPUT {
3049    wVk: WORD,
3050    wScan: WORD,
3051    dwFlags: DWORD,
3052    time: DWORD,
3053    dwExtraInfo: ULONG_PTR,
3054}}
3055pub type PKEYBDINPUT = *mut KEYBDINPUT;
3056pub type LPKEYBDINPUT = *mut KEYBDINPUT;
3057STRUCT!{struct HARDWAREINPUT {
3058    uMsg: DWORD,
3059    wParamL: WORD,
3060    wParamH: WORD,
3061}}
3062pub type PHARDWAREINPUT = *mut HARDWAREINPUT;
3063pub type LPHARDWAREINPUT= *mut HARDWAREINPUT;
3064pub const INPUT_MOUSE: DWORD = 0;
3065pub const INPUT_KEYBOARD: DWORD = 1;
3066pub const INPUT_HARDWARE: DWORD = 2;
3067UNION!{union INPUT_u {
3068    [u32; 6] [u64; 4],
3069    mi mi_mut: MOUSEINPUT,
3070    ki ki_mut: KEYBDINPUT,
3071    hi hi_mut: HARDWAREINPUT,
3072}}
3073STRUCT!{struct INPUT {
3074    type_: DWORD,
3075    u: INPUT_u,
3076}}
3077pub type PINPUT = *mut INPUT;
3078pub type LPINPUT = *mut INPUT;
3079extern "system" {
3080    pub fn SendInput(
3081        cInputs: UINT,
3082        pInputs: LPINPUT,
3083        cbSize: c_int,
3084    ) -> UINT;
3085}
3086DECLARE_HANDLE!{HTOUCHINPUT, HTOUCHINPUT__}
3087STRUCT!{struct TOUCHINPUT {
3088    x: LONG,
3089    y: LONG,
3090    hSource: HANDLE,
3091    dwID: DWORD,
3092    dwFlags: DWORD,
3093    dwMask: DWORD,
3094    dwTime: DWORD,
3095    dwExtraInfo: ULONG_PTR,
3096    cxContact: DWORD,
3097    cyContact: DWORD,
3098}}
3099pub type PTOUCHINPUT = *mut TOUCHINPUT;
3100pub type PCTOUCHINPUT = *const TOUCHINPUT;
3101// TOUCH_COORD_TO_PIXEL
3102pub const TOUCHEVENTF_MOVE: DWORD = 0x0001;
3103pub const TOUCHEVENTF_DOWN: DWORD = 0x0002;
3104pub const TOUCHEVENTF_UP: DWORD = 0x0004;
3105pub const TOUCHEVENTF_INRANGE: DWORD = 0x0008;
3106pub const TOUCHEVENTF_PRIMARY: DWORD = 0x0010;
3107pub const TOUCHEVENTF_NOCOALESCE: DWORD = 0x0020;
3108pub const TOUCHEVENTF_PEN: DWORD = 0x0040;
3109pub const TOUCHEVENTF_PALM: DWORD = 0x0080;
3110pub const TOUCHINPUTMASKF_TIMEFROMSYSTEM: DWORD = 0x0001;
3111pub const TOUCHINPUTMASKF_EXTRAINFO: DWORD = 0x0002;
3112pub const TOUCHINPUTMASKF_CONTACTAREA: DWORD = 0x0004;
3113extern "system" {
3114    pub fn GetTouchInputInfo(
3115        hTouchInput: HTOUCHINPUT,
3116        cInputs: c_uint,
3117        pInputs: PTOUCHINPUT,
3118        cbSize: c_int,
3119    ) -> BOOL;
3120    pub fn CloseTouchInputHandle(
3121        hTouchInput: HTOUCHINPUT,
3122    ) -> BOOL;
3123}
3124pub const TWF_FINETOUCH: DWORD = 0x00000001;
3125pub const TWF_WANTPALM: DWORD = 0x00000002;
3126extern "system" {
3127    pub fn RegisterTouchWindow(
3128        hWnd: HWND,
3129        flags: ULONG,
3130    ) -> BOOL;
3131    pub fn UnregisterTouchWindow(
3132        hwnd: HWND,
3133    ) -> BOOL;
3134    pub fn IsTouchWindow(
3135        hwnd: HWND,
3136        pulFlags: PULONG,
3137    ) -> BOOL;
3138}
3139ENUM!{enum POINTER_INPUT_TYPE {
3140    PT_POINTER = 0x00000001,
3141    PT_TOUCH = 0x00000002,
3142    PT_PEN = 0x00000003,
3143    PT_MOUSE = 0x00000004,
3144    PT_TOUCHPAD = 0x00000005,
3145}}
3146ENUM!{enum POINTER_FLAGS {
3147    POINTER_FLAG_NONE = 0x00000000,
3148    POINTER_FLAG_NEW = 0x00000001,
3149    POINTER_FLAG_INRANGE = 0x00000002,
3150    POINTER_FLAG_INCONTACT = 0x00000004,
3151    POINTER_FLAG_FIRSTBUTTON = 0x00000010,
3152    POINTER_FLAG_SECONDBUTTON = 0x00000020,
3153    POINTER_FLAG_THIRDBUTTON = 0x00000040,
3154    POINTER_FLAG_FOURTHBUTTON = 0x00000080,
3155    POINTER_FLAG_FIFTHBUTTON = 0x00000100,
3156    POINTER_FLAG_PRIMARY = 0x00002000,
3157    POINTER_FLAG_CONFIDENCE = 0x00004000,
3158    POINTER_FLAG_CANCELED = 0x00008000,
3159    POINTER_FLAG_DOWN = 0x00010000,
3160    POINTER_FLAG_UPDATE = 0x00020000,
3161    POINTER_FLAG_UP = 0x00040000,
3162    POINTER_FLAG_WHEEL = 0x00080000,
3163    POINTER_FLAG_HWHEEL = 0x00100000,
3164    POINTER_FLAG_CAPTURECHANGED = 0x00200000,
3165    POINTER_FLAG_HASTRANSFORM = 0x00400000,
3166}}
3167pub const POINTER_MOD_SHIFT: DWORD = 0x0004;
3168pub const POINTER_MOD_CTRL: DWORD = 0x0008;
3169ENUM!{enum POINTER_BUTTON_CHANGE_TYPE {
3170    POINTER_CHANGE_NONE,
3171    POINTER_CHANGE_FIRSTBUTTON_DOWN,
3172    POINTER_CHANGE_FIRSTBUTTON_UP,
3173    POINTER_CHANGE_SECONDBUTTON_DOWN,
3174    POINTER_CHANGE_SECONDBUTTON_UP,
3175    POINTER_CHANGE_THIRDBUTTON_DOWN,
3176    POINTER_CHANGE_THIRDBUTTON_UP,
3177    POINTER_CHANGE_FOURTHBUTTON_DOWN,
3178    POINTER_CHANGE_FOURTHBUTTON_UP,
3179    POINTER_CHANGE_FIFTHBUTTON_DOWN,
3180    POINTER_CHANGE_FIFTHBUTTON_UP,
3181}}
3182STRUCT!{struct POINTER_INFO {
3183    pointerType: POINTER_INPUT_TYPE,
3184    pointerId: UINT32,
3185    frameId: UINT32,
3186    pointerFlags: POINTER_FLAGS,
3187    sourceDevice: HANDLE,
3188    hwndTarget: HWND,
3189    ptPixelLocation: POINT,
3190    ptHimetricLocation: POINT,
3191    ptPixelLocationRaw: POINT,
3192    ptHimetricLocationRaw: POINT,
3193    dwTime: DWORD,
3194    historyCount: UINT32,
3195    InputData: INT32,
3196    dwKeyStates: DWORD,
3197    PerformanceCount: UINT64,
3198    ButtonChangeType: POINTER_BUTTON_CHANGE_TYPE,
3199}}
3200ENUM!{enum TOUCH_FLAGS {
3201    TOUCH_FLAG_NONE = 0x00000000,
3202}}
3203ENUM!{enum TOUCH_MASK {
3204    TOUCH_MASK_NONE = 0x00000000,
3205    TOUCH_MASK_CONTACTAREA = 0x00000001,
3206    TOUCH_MASK_ORIENTATION = 0x00000002,
3207    TOUCH_MASK_PRESSURE = 0x00000004,
3208}}
3209STRUCT!{struct POINTER_TOUCH_INFO {
3210    pointerInfo: POINTER_INFO,
3211    touchFlags: TOUCH_FLAGS,
3212    touchMask: TOUCH_MASK,
3213    rcContact: RECT,
3214    rcContactRaw: RECT,
3215    orientation: UINT32,
3216    pressure: UINT32,
3217}}
3218ENUM!{enum PEN_FLAGS {
3219    PEN_FLAG_NONE = 0x00000000,
3220    PEN_FLAG_BARREL = 0x00000001,
3221    PEN_FLAG_INVERTED = 0x00000002,
3222    PEN_FLAG_ERASER = 0x00000004,
3223}}
3224ENUM!{enum PEN_MASK {
3225    PEN_MASK_NONE = 0x00000000,
3226    PEN_MASK_PRESSURE = 0x00000001,
3227    PEN_MASK_ROTATION = 0x00000002,
3228    PEN_MASK_TILT_X = 0x00000004,
3229    PEN_MASK_TILT_Y = 0x00000008,
3230}}
3231STRUCT!{struct POINTER_PEN_INFO {
3232    pointerInfo: POINTER_INFO,
3233    penFlags: PEN_FLAGS,
3234    penMask: PEN_MASK,
3235    pressure: UINT32,
3236    rotation: UINT32,
3237    tiltX: INT32,
3238    tiltY: INT32,
3239}}
3240pub const POINTER_MESSAGE_FLAG_NEW: DWORD = 0x00000001;
3241pub const POINTER_MESSAGE_FLAG_INRANGE: DWORD = 0x00000002;
3242pub const POINTER_MESSAGE_FLAG_INCONTACT: DWORD = 0x00000004;
3243pub const POINTER_MESSAGE_FLAG_FIRSTBUTTON: DWORD = 0x00000010;
3244pub const POINTER_MESSAGE_FLAG_SECONDBUTTON: DWORD = 0x00000020;
3245pub const POINTER_MESSAGE_FLAG_THIRDBUTTON: DWORD = 0x00000040;
3246pub const POINTER_MESSAGE_FLAG_FOURTHBUTTON: DWORD = 0x00000080;
3247pub const POINTER_MESSAGE_FLAG_FIFTHBUTTON: DWORD = 0x00000100;
3248pub const POINTER_MESSAGE_FLAG_PRIMARY: DWORD = 0x00002000;
3249pub const POINTER_MESSAGE_FLAG_CONFIDENCE: DWORD = 0x00004000;
3250pub const POINTER_MESSAGE_FLAG_CANCELED: DWORD = 0x00008000;
3251pub const PA_ACTIVATE: UINT = MA_ACTIVATE;
3252pub const PA_NOACTIVATE: UINT = MA_NOACTIVATE;
3253pub const MAX_TOUCH_COUNT: UINT32 = 256;
3254pub const TOUCH_FEEDBACK_DEFAULT: DWORD = 0x1;
3255pub const TOUCH_FEEDBACK_INDIRECT: DWORD = 0x2;
3256pub const TOUCH_FEEDBACK_NONE: DWORD = 0x3;
3257ENUM!{enum POINTER_FEEDBACK_MODE {
3258    POINTER_FEEDBACK_DEFAULT = 1,
3259    POINTER_FEEDBACK_INDIRECT = 2,
3260    POINTER_FEEDBACK_NONE = 3,
3261}}
3262extern "system" {
3263    pub fn InitializeTouchInjection(
3264        maxCount: UINT32,
3265        dwMode: DWORD,
3266    ) -> BOOL;
3267    pub fn InjectTouchInput(
3268        count: UINT32,
3269        contacts: *const POINTER_TOUCH_INFO,
3270    ) -> BOOL;
3271}
3272STRUCT!{struct USAGE_PROPERTIES {
3273    level: USHORT,
3274    page: USHORT,
3275    usage: USHORT,
3276    logicalMinimum: INT32,
3277    logicalMaximum: INT32,
3278    unit: USHORT,
3279    exponent: USHORT,
3280    count: BYTE,
3281    physicalMinimum: INT32,
3282    physicalMaximum: INT32,
3283}}
3284pub type PUSAGE_PROPERTIES = *mut USAGE_PROPERTIES;
3285UNION!{union POINTER_TYPE_INFO_u {
3286    [u64; 17] [u64; 18],
3287    touchInfo touchInfo_mut: POINTER_TOUCH_INFO,
3288    penInfo penInfo_mut: POINTER_PEN_INFO,
3289}}
3290STRUCT!{struct POINTER_TYPE_INFO {
3291    type_: POINTER_INPUT_TYPE,
3292    u: POINTER_TYPE_INFO_u,
3293}}
3294pub type PPOINTER_TYPE_INFO = *mut POINTER_TYPE_INFO;
3295STRUCT!{struct INPUT_INJECTION_VALUE {
3296    page: USHORT,
3297    usage: USHORT,
3298    value: INT32,
3299    index: USHORT,
3300}}
3301pub type PINPUT_INJECTION_VALUE = *mut INPUT_INJECTION_VALUE;
3302extern "system" {
3303    pub fn GetPointerType(
3304        pointerId: UINT32,
3305        pointerType: *mut POINTER_INPUT_TYPE,
3306    ) -> BOOL;
3307    pub fn GetPointerCursorId(
3308        pointerId: UINT32,
3309        cursorId: *mut UINT32,
3310    ) -> BOOL;
3311    pub fn GetPointerInfo(
3312        pointerId: UINT32,
3313        pointerInfo: *mut POINTER_INFO,
3314    ) -> BOOL;
3315    pub fn GetPointerInfoHistory(
3316        pointerId: UINT32,
3317        entriesCount: *mut UINT32,
3318        pointerInfo: *mut POINTER_INFO,
3319    ) -> BOOL;
3320    pub fn GetPointerFrameInfo(
3321        pointerId: UINT32,
3322        pointerCount: *mut UINT32,
3323        pointerInfo: *mut POINTER_INFO,
3324    ) -> BOOL;
3325    pub fn GetPointerFrameInfoHistory(
3326        pointerId: UINT32,
3327        entriesCount: *mut UINT32,
3328        pointerCount: *mut UINT32,
3329        pointerInfo: *mut POINTER_INFO,
3330    ) -> BOOL;
3331    pub fn GetPointerTouchInfo(
3332        pointerId: UINT32,
3333        touchInfo: *mut POINTER_TOUCH_INFO,
3334    ) -> BOOL;
3335    pub fn GetPointerTouchInfoHistory(
3336        pointerId: UINT32,
3337        entriesCount: *mut UINT32,
3338        touchInfo: *mut POINTER_TOUCH_INFO,
3339    ) -> BOOL;
3340    pub fn GetPointerFrameTouchInfo(
3341        pointerId: UINT32,
3342        pointerCount: *mut UINT32,
3343        touchInfo: *mut POINTER_TOUCH_INFO,
3344    ) -> BOOL;
3345    pub fn GetPointerFrameTouchInfoHistory(
3346        pointerId: UINT32,
3347        entriesCount: *mut UINT32,
3348        pointerCount: *mut UINT32,
3349        touchInfo: *mut POINTER_TOUCH_INFO,
3350    ) -> BOOL;
3351    pub fn GetPointerPenInfo(
3352        pointerId: UINT32,
3353        penInfo: *mut POINTER_PEN_INFO,
3354    ) -> BOOL;
3355    pub fn GetPointerPenInfoHistory(
3356        pointerId: UINT32,
3357        entriesCount: *mut UINT32,
3358        penInfo: *mut POINTER_PEN_INFO,
3359    ) -> BOOL;
3360    pub fn GetPointerFramePenInfo(
3361        pointerId: UINT32,
3362        pointerCount: *mut UINT32,
3363        penInfo: *mut POINTER_PEN_INFO,
3364    ) -> BOOL;
3365    pub fn GetPointerFramePenInfoHistory(
3366        pointerId: UINT32,
3367        entriesCount: *mut UINT32,
3368        pointerCount: *mut UINT32,
3369        penInfo: *mut POINTER_PEN_INFO,
3370    ) -> BOOL;
3371    pub fn SkipPointerFrameMessages(
3372        pointerId: UINT32,
3373    ) -> BOOL;
3374    pub fn RegisterPointerInputTarget(
3375        hwnd: HWND,
3376        pointerType: POINTER_INPUT_TYPE,
3377    ) -> BOOL;
3378    pub fn UnregisterPointerInputTarget(
3379        hwnd: HWND,
3380        pointerType: POINTER_INPUT_TYPE,
3381    ) -> BOOL;
3382    pub fn RegisterPointerInputTargetEx(
3383        hwnd: HWND,
3384        pointerType: POINTER_INPUT_TYPE,
3385        fObserve: BOOL,
3386    ) -> BOOL;
3387    pub fn UnregisterPointerInputTargetEx(
3388        hwnd: HWND,
3389        pointerType: POINTER_INPUT_TYPE,
3390    ) -> BOOL;
3391}
3392DECLARE_HANDLE!{HSYNTHETICPOINTERDEVICE, HSYNTHETICPOINTERDEVICE__}
3393extern "system" {
3394    pub fn CreateSyntheticPointerDevice(
3395        pointerType: POINTER_INPUT_TYPE,
3396        maxCount: ULONG,
3397        mode: POINTER_FEEDBACK_MODE,
3398    ) -> HSYNTHETICPOINTERDEVICE;
3399    pub fn InjectSyntheticPointerInput(
3400        device: HSYNTHETICPOINTERDEVICE,
3401        pointerInfo: *const POINTER_TYPE_INFO,
3402        count: UINT32,
3403    ) -> BOOL;
3404    pub fn DestroySyntheticPointerDevice(
3405        device: HSYNTHETICPOINTERDEVICE,
3406    );
3407}
3408extern "system" {
3409    pub fn EnableMouseInPointer(
3410        fEnable: BOOL,
3411    ) -> BOOL;
3412    pub fn IsMouseInPointerEnabled() -> BOOL;
3413}
3414pub const TOUCH_HIT_TESTING_DEFAULT: ULONG = 0x0;
3415pub const TOUCH_HIT_TESTING_CLIENT: ULONG = 0x1;
3416pub const TOUCH_HIT_TESTING_NONE: ULONG = 0x2;
3417extern "system" {
3418    pub fn RegisterTouchHitTestingWindow(
3419        hwnd: HWND,
3420        value: ULONG,
3421    ) -> BOOL;
3422}
3423STRUCT!{struct TOUCH_HIT_TESTING_PROXIMITY_EVALUATION {
3424    score: UINT16,
3425    adjustedPoint: POINT,
3426}}
3427pub type PTOUCH_HIT_TESTING_PROXIMITY_EVALUATION = *mut TOUCH_HIT_TESTING_PROXIMITY_EVALUATION;
3428STRUCT!{struct TOUCH_HIT_TESTING_INPUT {
3429    pointerId: UINT32,
3430    point: POINT,
3431    boundingBox: RECT,
3432    nonOccludedBoundingBox: RECT,
3433    orientation: UINT32,
3434}}
3435pub type PTOUCH_HIT_TESTING_INPUT = *mut TOUCH_HIT_TESTING_INPUT;
3436pub const TOUCH_HIT_TESTING_PROXIMITY_CLOSEST: UINT16 = 0x0;
3437pub const TOUCH_HIT_TESTING_PROXIMITY_FARTHEST: UINT16 = 0xFFF;
3438extern "system" {
3439    pub fn EvaluateProximityToRect(
3440        controlBoundingBox: *const RECT,
3441        pHitTestingInput: *const TOUCH_HIT_TESTING_INPUT,
3442        pProximityEval: *mut TOUCH_HIT_TESTING_PROXIMITY_EVALUATION,
3443    ) -> BOOL;
3444    pub fn EvaluateProximityToPolygon(
3445        numVertices: UINT32,
3446        controlPolygon: *const POINT,
3447        pHitTestingInput: *const TOUCH_HIT_TESTING_INPUT,
3448        pProximityEval: *mut TOUCH_HIT_TESTING_PROXIMITY_EVALUATION,
3449    ) -> BOOL;
3450    pub fn PackTouchHitTestingProximityEvaluation(
3451        pHitTestingInput: *const TOUCH_HIT_TESTING_INPUT,
3452        pProximityEval: *const TOUCH_HIT_TESTING_PROXIMITY_EVALUATION,
3453    ) -> LRESULT;
3454}
3455ENUM!{enum FEEDBACK_TYPE {
3456    FEEDBACK_TOUCH_CONTACTVISUALIZATION = 1,
3457    FEEDBACK_PEN_BARRELVISUALIZATION = 2,
3458    FEEDBACK_PEN_TAP = 3,
3459    FEEDBACK_PEN_DOUBLETAP = 4,
3460    FEEDBACK_PEN_PRESSANDHOLD = 5,
3461    FEEDBACK_PEN_RIGHTTAP = 6,
3462    FEEDBACK_TOUCH_TAP = 7,
3463    FEEDBACK_TOUCH_DOUBLETAP = 8,
3464    FEEDBACK_TOUCH_PRESSANDHOLD = 9,
3465    FEEDBACK_TOUCH_RIGHTTAP = 10,
3466    FEEDBACK_GESTURE_PRESSANDTAP = 11,
3467    FEEDBACK_MAX = 0xFFFFFFFF,
3468}}
3469pub const GWFS_INCLUDE_ANCESTORS: DWORD = 0x00000001;
3470extern "system" {
3471    pub fn GetWindowFeedbackSetting(
3472        hwnd: HWND,
3473        feedback: FEEDBACK_TYPE,
3474        dwFlags: DWORD,
3475        pSize: *mut UINT32,
3476        config: *mut VOID,
3477    ) -> BOOL;
3478    pub fn SetWindowFeedbackSetting(
3479        hwnd: HWND,
3480        feedback: FEEDBACK_TYPE,
3481        dwFlags: DWORD,
3482        size: UINT32,
3483        configuration: *const VOID,
3484    ) -> BOOL;
3485}
3486STRUCT!{struct INPUT_TRANSFORM {
3487    m: [[f32; 4]; 4],
3488}}
3489extern "system" {
3490    pub fn GetPointerInputTransform(
3491        pointerId: UINT32,
3492        historyCount: UINT32,
3493        inputTransform: *mut INPUT_TRANSFORM,
3494    ) -> BOOL;
3495}
3496STRUCT!{struct LASTINPUTINFO {
3497    cbSize: UINT,
3498    dwTime: DWORD,
3499}}
3500pub type PLASTINPUTINFO = *mut LASTINPUTINFO;
3501extern "system" {
3502    pub fn GetLastInputInfo(
3503        plii: PLASTINPUTINFO,
3504    ) -> BOOL;
3505    pub fn MapVirtualKeyA(
3506        nCode: UINT,
3507        uMapType: UINT,
3508    ) -> UINT;
3509    pub fn MapVirtualKeyW(
3510        nCode: UINT,
3511        uMapType: UINT,
3512    ) -> UINT;
3513    pub fn MapVirtualKeyExA(
3514        nCode: UINT,
3515        uMapType: UINT,
3516        dwhkl: HKL,
3517    ) -> UINT;
3518    pub fn MapVirtualKeyExW(
3519        nCode: UINT,
3520        uMapType: UINT,
3521        dwhkl: HKL,
3522    ) -> UINT;
3523}
3524pub const MAPVK_VK_TO_VSC: UINT = 0;
3525pub const MAPVK_VSC_TO_VK: UINT = 1;
3526pub const MAPVK_VK_TO_CHAR: UINT = 2;
3527pub const MAPVK_VSC_TO_VK_EX: UINT = 3;
3528pub const MAPVK_VK_TO_VSC_EX: UINT = 4;
3529extern "system" {
3530    pub fn GetInputState() -> BOOL;
3531    pub fn GetQueueStatus(
3532        flags: UINT,
3533    ) -> DWORD;
3534    pub fn GetCapture() -> HWND;
3535    pub fn SetCapture(
3536        hWnd: HWND,
3537    ) -> HWND;
3538    pub fn ReleaseCapture() -> BOOL;
3539    pub fn MsgWaitForMultipleObjects(
3540        nCount: DWORD,
3541        pHandles: *const HANDLE,
3542        fWaitAll: BOOL,
3543        dwMilliseconds: DWORD,
3544        dwWakeMask: DWORD,
3545    ) -> DWORD;
3546    pub fn MsgWaitForMultipleObjectsEx(
3547        nCount: DWORD,
3548        pHandles: *const HANDLE,
3549        dwMilliseconds: DWORD,
3550        dwWakeMask: DWORD,
3551        dwFlags: DWORD,
3552    ) -> DWORD;
3553}
3554pub const MWMO_WAITALL: UINT = 0x0001;
3555pub const MWMO_ALERTABLE: UINT = 0x0002;
3556pub const MWMO_INPUTAVAILABLE: UINT = 0x0004;
3557pub const QS_KEY: UINT = 0x0001;
3558pub const QS_MOUSEMOVE: UINT = 0x0002;
3559pub const QS_MOUSEBUTTON: UINT = 0x0004;
3560pub const QS_POSTMESSAGE: UINT = 0x0008;
3561pub const QS_TIMER: UINT = 0x0010;
3562pub const QS_PAINT: UINT = 0x0020;
3563pub const QS_SENDMESSAGE: UINT = 0x0040;
3564pub const QS_HOTKEY: UINT = 0x0080;
3565pub const QS_ALLPOSTMESSAGE: UINT = 0x0100;
3566pub const QS_RAWINPUT: UINT = 0x0400;
3567pub const QS_TOUCH: UINT = 0x0800;
3568pub const QS_POINTER: UINT = 0x1000;
3569pub const QS_MOUSE: UINT = QS_MOUSEMOVE | QS_MOUSEBUTTON;
3570pub const QS_INPUT: UINT = QS_MOUSE | QS_KEY | QS_RAWINPUT | QS_TOUCH | QS_POINTER;
3571pub const QS_ALLEVENTS: UINT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY;
3572pub const QS_ALLINPUT: UINT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY
3573    | QS_SENDMESSAGE;
3574pub const USER_TIMER_MAXIMUM: UINT = 0x7FFFFFFF;
3575pub const USER_TIMER_MINIMUM: UINT = 0x0000000A;
3576extern "system" {
3577    pub fn SetTimer(
3578        hWnd: HWND,
3579        nIDEvent: UINT_PTR,
3580        uElapse: UINT,
3581        lpTimerFunc: TIMERPROC,
3582    ) -> UINT_PTR;
3583}
3584pub const TIMERV_DEFAULT_COALESCING: ULONG = 0;
3585pub const TIMERV_NO_COALESCING: ULONG = 0xFFFFFFFF;
3586pub const TIMERV_COALESCING_MIN: ULONG = 1;
3587pub const TIMERV_COALESCING_MAX: ULONG = 0x7FFFFFF5;
3588extern "system" {
3589    pub fn SetCoalescableTimer(
3590        hWnd: HWND,
3591        nIDEvent: UINT_PTR,
3592        uElapse: UINT,
3593        lpTimerFunc: TIMERPROC,
3594        uToleranceDelay: ULONG,
3595    ) -> UINT_PTR;
3596    pub fn KillTimer(
3597        hWnd: HWND,
3598        uIDEvent: UINT_PTR,
3599    ) -> BOOL;
3600    pub fn IsWindowUnicode(
3601        hWnd: HWND,
3602    ) -> BOOL;
3603    pub fn EnableWindow(
3604        hWnd: HWND,
3605        bEnable: BOOL,
3606    ) -> BOOL;
3607    pub fn IsWindowEnabled(
3608        hWnd: HWND,
3609    ) -> BOOL;
3610    pub fn LoadAcceleratorsA(
3611        hInstance: HINSTANCE,
3612        lpTableName: LPCSTR,
3613    ) -> HACCEL;
3614    pub fn LoadAcceleratorsW(
3615        hInstance: HINSTANCE,
3616        lpTableName: LPCWSTR,
3617    ) -> HACCEL;
3618    pub fn CreateAcceleratorTableA(
3619        paccel: LPACCEL,
3620        cAccel: c_int,
3621    ) -> HACCEL;
3622    pub fn CreateAcceleratorTableW(
3623        paccel: LPACCEL,
3624        cAccel: c_int,
3625    ) -> HACCEL;
3626    pub fn DestroyAcceleratorTable(
3627        hAccel: HACCEL,
3628    ) -> BOOL;
3629    pub fn CopyAcceleratorTableA(
3630        hAccelSrc: HACCEL,
3631        lpAccelDst: LPACCEL,
3632        cAccelEntries: c_int,
3633    ) -> c_int;
3634    pub fn CopyAcceleratorTableW(
3635        hAccelSrc: HACCEL,
3636        lpAccelDst: LPACCEL,
3637        cAccelEntries: c_int,
3638    ) -> c_int;
3639    pub fn TranslateAcceleratorA(
3640        hWnd: HWND,
3641        hAccTable: HACCEL,
3642        lpMsg: LPMSG,
3643    ) -> c_int;
3644    pub fn TranslateAcceleratorW(
3645        hWnd: HWND,
3646        hAccTable: HACCEL,
3647        lpMsg: LPMSG,
3648    ) -> c_int;
3649}
3650pub const SM_CXSCREEN: c_int = 0;
3651pub const SM_CYSCREEN: c_int = 1;
3652pub const SM_CXVSCROLL: c_int = 2;
3653pub const SM_CYHSCROLL: c_int = 3;
3654pub const SM_CYCAPTION: c_int = 4;
3655pub const SM_CXBORDER: c_int = 5;
3656pub const SM_CYBORDER: c_int = 6;
3657pub const SM_CXDLGFRAME: c_int = 7;
3658pub const SM_CYDLGFRAME: c_int = 8;
3659pub const SM_CYVTHUMB: c_int = 9;
3660pub const SM_CXHTHUMB: c_int = 10;
3661pub const SM_CXICON: c_int = 11;
3662pub const SM_CYICON: c_int = 12;
3663pub const SM_CXCURSOR: c_int = 13;
3664pub const SM_CYCURSOR: c_int = 14;
3665pub const SM_CYMENU: c_int = 15;
3666pub const SM_CXFULLSCREEN: c_int = 16;
3667pub const SM_CYFULLSCREEN: c_int = 17;
3668pub const SM_CYKANJIWINDOW: c_int = 18;
3669pub const SM_MOUSEPRESENT: c_int = 19;
3670pub const SM_CYVSCROLL: c_int = 20;
3671pub const SM_CXHSCROLL: c_int = 21;
3672pub const SM_DEBUG: c_int = 22;
3673pub const SM_SWAPBUTTON: c_int = 23;
3674pub const SM_RESERVED1: c_int = 24;
3675pub const SM_RESERVED2: c_int = 25;
3676pub const SM_RESERVED3: c_int = 26;
3677pub const SM_RESERVED4: c_int = 27;
3678pub const SM_CXMIN: c_int = 28;
3679pub const SM_CYMIN: c_int = 29;
3680pub const SM_CXSIZE: c_int = 30;
3681pub const SM_CYSIZE: c_int = 31;
3682pub const SM_CXFRAME: c_int = 32;
3683pub const SM_CYFRAME: c_int = 33;
3684pub const SM_CXMINTRACK: c_int = 34;
3685pub const SM_CYMINTRACK: c_int = 35;
3686pub const SM_CXDOUBLECLK: c_int = 36;
3687pub const SM_CYDOUBLECLK: c_int = 37;
3688pub const SM_CXICONSPACING: c_int = 38;
3689pub const SM_CYICONSPACING: c_int = 39;
3690pub const SM_MENUDROPALIGNMENT: c_int = 40;
3691pub const SM_PENWINDOWS: c_int = 41;
3692pub const SM_DBCSENABLED: c_int = 42;
3693pub const SM_CMOUSEBUTTONS: c_int = 43;
3694pub const SM_CXFIXEDFRAME: c_int = SM_CXDLGFRAME;
3695pub const SM_CYFIXEDFRAME: c_int = SM_CYDLGFRAME;
3696pub const SM_CXSIZEFRAME: c_int = SM_CXFRAME;
3697pub const SM_CYSIZEFRAME: c_int = SM_CYFRAME;
3698pub const SM_SECURE: c_int = 44;
3699pub const SM_CXEDGE: c_int = 45;
3700pub const SM_CYEDGE: c_int = 46;
3701pub const SM_CXMINSPACING: c_int = 47;
3702pub const SM_CYMINSPACING: c_int = 48;
3703pub const SM_CXSMICON: c_int = 49;
3704pub const SM_CYSMICON: c_int = 50;
3705pub const SM_CYSMCAPTION: c_int = 51;
3706pub const SM_CXSMSIZE: c_int = 52;
3707pub const SM_CYSMSIZE: c_int = 53;
3708pub const SM_CXMENUSIZE: c_int = 54;
3709pub const SM_CYMENUSIZE: c_int = 55;
3710pub const SM_ARRANGE: c_int = 56;
3711pub const SM_CXMINIMIZED: c_int = 57;
3712pub const SM_CYMINIMIZED: c_int = 58;
3713pub const SM_CXMAXTRACK: c_int = 59;
3714pub const SM_CYMAXTRACK: c_int = 60;
3715pub const SM_CXMAXIMIZED: c_int = 61;
3716pub const SM_CYMAXIMIZED: c_int = 62;
3717pub const SM_NETWORK: c_int = 63;
3718pub const SM_CLEANBOOT: c_int = 67;
3719pub const SM_CXDRAG: c_int = 68;
3720pub const SM_CYDRAG: c_int = 69;
3721pub const SM_SHOWSOUNDS: c_int = 70;
3722pub const SM_CXMENUCHECK: c_int = 71;
3723pub const SM_CYMENUCHECK: c_int = 72;
3724pub const SM_SLOWMACHINE: c_int = 73;
3725pub const SM_MIDEASTENABLED: c_int = 74;
3726pub const SM_MOUSEWHEELPRESENT: c_int = 75;
3727pub const SM_XVIRTUALSCREEN: c_int = 76;
3728pub const SM_YVIRTUALSCREEN: c_int = 77;
3729pub const SM_CXVIRTUALSCREEN: c_int = 78;
3730pub const SM_CYVIRTUALSCREEN: c_int = 79;
3731pub const SM_CMONITORS: c_int = 80;
3732pub const SM_SAMEDISPLAYFORMAT: c_int = 81;
3733pub const SM_IMMENABLED: c_int = 82;
3734pub const SM_CXFOCUSBORDER: c_int = 83;
3735pub const SM_CYFOCUSBORDER: c_int = 84;
3736pub const SM_TABLETPC: c_int = 86;
3737pub const SM_MEDIACENTER: c_int = 87;
3738pub const SM_STARTER: c_int = 88;
3739pub const SM_SERVERR2: c_int = 89;
3740pub const SM_MOUSEHORIZONTALWHEELPRESENT: c_int = 91;
3741pub const SM_CXPADDEDBORDER: c_int = 92;
3742pub const SM_DIGITIZER: c_int = 94;
3743pub const SM_MAXIMUMTOUCHES: c_int = 95;
3744pub const SM_CMETRICS: c_int = 97;
3745pub const SM_REMOTESESSION: c_int = 0x1000;
3746pub const SM_SHUTTINGDOWN: c_int = 0x2000;
3747pub const SM_REMOTECONTROL: c_int = 0x2001;
3748pub const SM_CARETBLINKINGENABLED: c_int = 0x2002;
3749pub const SM_CONVERTIBLESLATEMODE: c_int = 0x2003;
3750pub const SM_SYSTEMDOCKED: c_int = 0x2004;
3751extern "system" {
3752    pub fn GetSystemMetrics(
3753        nIndex: c_int,
3754    ) -> c_int;
3755    pub fn GetSystemMetricsForDpi(
3756        nIndex: c_int,
3757        dpi: UINT,
3758    ) -> c_int;
3759    pub fn LoadMenuA(
3760        hInstance: HINSTANCE,
3761        lpMenuName: LPCSTR,
3762    ) -> HMENU;
3763    pub fn LoadMenuW(
3764        hInstance: HINSTANCE,
3765        lpMenuName: LPCWSTR,
3766    ) -> HMENU;
3767    pub fn LoadMenuIndirectA(
3768        lpMenuTemplate: *const MENUTEMPLATEA,
3769    ) -> HMENU;
3770    pub fn LoadMenuIndirectW(
3771        lpMenuTemplate: *const MENUTEMPLATEW,
3772    ) -> HMENU;
3773    pub fn GetMenu(
3774        hWnd: HWND,
3775    ) -> HMENU;
3776    pub fn SetMenu(
3777        hWnd: HWND,
3778        hMenu: HMENU,
3779    ) -> BOOL;
3780    pub fn ChangeMenuA(
3781        hMenu: HMENU,
3782        cmd: UINT,
3783        lpszNewItem: LPCSTR,
3784        cmdInsert: UINT,
3785        flags: UINT,
3786    ) -> BOOL;
3787    pub fn ChangeMenuW(
3788        hMenu: HMENU,
3789        cmd: UINT,
3790        lpszNewItem: LPCWSTR,
3791        cmdInsert: UINT,
3792        flags: UINT,
3793    ) -> BOOL;
3794    pub fn HiliteMenuItem(
3795        hWnd: HWND,
3796        hMenu: HMENU,
3797        uIDHiliteItem: UINT,
3798        uHilite: UINT,
3799    ) -> BOOL;
3800    pub fn GetMenuStringA(
3801        hMenu: HMENU,
3802        uIDItem: UINT,
3803        lpString: LPSTR,
3804        cchMax: c_int,
3805        flags: UINT,
3806    ) -> c_int;
3807    pub fn GetMenuStringW(
3808        hMenu: HMENU,
3809        uIDItem: UINT,
3810        lpString: LPWSTR,
3811        cchMax: c_int,
3812        flags: UINT,
3813    ) -> c_int;
3814    pub fn GetMenuState(
3815        hMenu: HMENU,
3816        uId: UINT,
3817        uFlags: UINT,
3818    ) -> UINT;
3819    pub fn DrawMenuBar(
3820        hwnd: HWND,
3821    ) -> BOOL;
3822}
3823pub const PMB_ACTIVE: DWORD = 0x00000001;
3824extern "system" {
3825    pub fn GetSystemMenu(
3826        hWnd: HWND,
3827        bRevert: BOOL,
3828    ) -> HMENU;
3829    pub fn CreateMenu() -> HMENU;
3830    pub fn CreatePopupMenu() ->HMENU;
3831    pub fn DestroyMenu(
3832        hMenu: HMENU,
3833    ) -> BOOL;
3834    pub fn CheckMenuItem(
3835        hMenu: HMENU,
3836        uIDCheckItem: UINT,
3837        uCheck: UINT,
3838    ) -> DWORD;
3839    pub fn EnableMenuItem(
3840        hMenu: HMENU,
3841        uIDEnableItem: UINT,
3842        uEnable: UINT,
3843    ) -> BOOL;
3844    pub fn GetSubMenu(
3845        hMenu: HMENU,
3846        nPos: c_int,
3847    ) -> HMENU;
3848    pub fn GetMenuItemID(
3849        hMenu: HMENU,
3850        nPos: c_int,
3851    ) -> UINT;
3852    pub fn GetMenuItemCount(
3853        hMenu: HMENU,
3854    ) -> c_int;
3855    pub fn InsertMenuA(
3856        hMenu: HMENU,
3857        uPosition: UINT,
3858        uFlags: UINT,
3859        uIDNewItem: UINT_PTR,
3860        lpNewItem: LPCSTR,
3861    ) -> BOOL;
3862    pub fn InsertMenuW(
3863        hMenu: HMENU,
3864        uPosition: UINT,
3865        uFlags: UINT,
3866        uIDNewItem: UINT_PTR,
3867        lpNewItem: LPCWSTR,
3868    ) -> BOOL;
3869    pub fn AppendMenuA(
3870        hMenu: HMENU,
3871        uFlags: UINT,
3872        uIDNewItem: UINT_PTR,
3873        lpNewItem: LPCSTR,
3874    ) -> BOOL;
3875    pub fn AppendMenuW(
3876        hMenu: HMENU,
3877        uFlags: UINT,
3878        uIDNewItem: UINT_PTR,
3879        lpNewItem: LPCWSTR,
3880    ) -> BOOL;
3881    pub fn ModifyMenuA(
3882        hMnu: HMENU,
3883        uPosition: UINT,
3884        uFlags: UINT,
3885        uIDNewItem: UINT_PTR,
3886        lpNewItem: LPCSTR,
3887    ) -> BOOL;
3888    pub fn ModifyMenuW(
3889        hMnu: HMENU,
3890        uPosition: UINT,
3891        uFlags: UINT,
3892        uIDNewItem: UINT_PTR,
3893        lpNewItem: LPCWSTR,
3894    ) -> BOOL;
3895    pub fn RemoveMenu(
3896        hMenu: HMENU,
3897        uPosition: UINT,
3898        uFlags: UINT,
3899    ) -> BOOL;
3900    pub fn DeleteMenu(
3901        hMenu: HMENU,
3902        uPosition: UINT,
3903        uFlags: UINT,
3904    ) -> BOOL;
3905    pub fn SetMenuItemBitmaps(
3906        hMenu: HMENU,
3907        uPosition: UINT,
3908        uFlags: UINT,
3909        hBitmapUnchecked: HBITMAP,
3910        hBitmapChecked: HBITMAP,
3911    ) -> BOOL;
3912    pub fn GetMenuCheckMarkDimensions() -> LONG;
3913    pub fn TrackPopupMenu(
3914        hMenu: HMENU,
3915        uFlags: UINT,
3916        x: c_int,
3917        y: c_int,
3918        nReserved: c_int,
3919        hWnd: HWND,
3920        prcRect: *const RECT,
3921    ) -> BOOL;
3922}
3923pub const MNC_IGNORE: DWORD = 0;
3924pub const MNC_CLOSE: DWORD = 1;
3925pub const MNC_EXECUTE: DWORD = 2;
3926pub const MNC_SELECT: DWORD = 3;
3927STRUCT!{struct TPMPARAMS {
3928    cbSize: UINT,
3929    rcExclude: RECT,
3930}}
3931pub type LPTPMPARAMS = *mut TPMPARAMS;
3932extern "system" {
3933    pub fn TrackPopupMenuEx(
3934        hMenu: HMENU,
3935        uFlags: UINT,
3936        x: INT,
3937        y: INT,
3938        hwnd: HWND,
3939        lptpm: LPTPMPARAMS,
3940    ) -> BOOL;
3941    pub fn CalculatePopupWindowPosition(
3942        anchorPoint: *const POINT,
3943        windowSize: *const SIZE,
3944        flags: UINT,
3945        excludeRect: *mut RECT,
3946        popupWindowPosition: *mut RECT,
3947    ) -> BOOL;
3948}
3949pub const MNS_NOCHECK: DWORD = 0x80000000;
3950pub const MNS_MODELESS: DWORD = 0x40000000;
3951pub const MNS_DRAGDROP: DWORD = 0x20000000;
3952pub const MNS_AUTODISMISS: DWORD = 0x10000000;
3953pub const MNS_NOTIFYBYPOS: DWORD = 0x08000000;
3954pub const MNS_CHECKORBMP: DWORD = 0x04000000;
3955pub const MIM_MAXHEIGHT: DWORD = 0x00000001;
3956pub const MIM_BACKGROUND: DWORD = 0x00000002;
3957pub const MIM_HELPID: DWORD = 0x00000004;
3958pub const MIM_MENUDATA: DWORD = 0x00000008;
3959pub const MIM_STYLE: DWORD = 0x00000010;
3960pub const MIM_APPLYTOSUBMENUS: DWORD = 0x80000000;
3961STRUCT!{struct MENUINFO {
3962    cbSize: DWORD,
3963    fMask: DWORD,
3964    dwStyle: DWORD,
3965    cyMax: UINT,
3966    hbrBack: HBRUSH,
3967    dwContextHelpID: DWORD,
3968    dwMenuData: ULONG_PTR,
3969}}
3970pub type LPMENUINFO = *mut MENUINFO;
3971pub type LPCMENUINFO = *const MENUINFO;
3972extern "system" {
3973    pub fn GetMenuInfo(
3974        hMenu: HMENU,
3975        lpcmi: LPMENUINFO,
3976    ) -> BOOL;
3977    pub fn SetMenuInfo(
3978        hMenu: HMENU,
3979        lpcmi: LPCMENUINFO,
3980    ) -> BOOL;
3981    pub fn EndMenu(
3982        hMenu: HMENU,
3983        uFlags: UINT,
3984        uIDNewItem: UINT_PTR,
3985        lpNewItem: LPCSTR,
3986    ) -> BOOL;
3987}
3988pub const MND_CONTINUE: DWORD = 0;
3989pub const MND_ENDMENU: DWORD = 1;
3990STRUCT!{struct MENUGETOBJECTINFO {
3991    dwFlags: DWORD,
3992    uPos: UINT,
3993    hmenu: HMENU,
3994    riid: PVOID,
3995    pvObj: PVOID,
3996}}
3997pub type PMENUGETOBJECTINFO = *mut MENUGETOBJECTINFO;
3998pub const MNGOF_TOPGAP: DWORD = 0x00000001;
3999pub const MNGOF_BOTTOMGAP: DWORD = 0x00000002;
4000pub const MNGO_NOINTERFACE: DWORD = 0x00000000;
4001pub const MNGO_NOERROR: DWORD = 0x00000001;
4002pub const MIIM_STATE: DWORD = 0x00000001;
4003pub const MIIM_ID: DWORD = 0x00000002;
4004pub const MIIM_SUBMENU: DWORD = 0x00000004;
4005pub const MIIM_CHECKMARKS: DWORD = 0x00000008;
4006pub const MIIM_TYPE: DWORD = 0x00000010;
4007pub const MIIM_DATA: DWORD = 0x00000020;
4008pub const MIIM_STRING: DWORD = 0x00000040;
4009pub const MIIM_BITMAP: DWORD = 0x00000080;
4010pub const MIIM_FTYPE: DWORD = 0x00000100;
4011pub const HBMMENU_CALLBACK: HBITMAP = -1isize as HBITMAP;
4012pub const HBMMENU_SYSTEM: HBITMAP = 1 as HBITMAP;
4013pub const HBMMENU_MBAR_RESTORE: HBITMAP = 2 as HBITMAP;
4014pub const HBMMENU_MBAR_MINIMIZE: HBITMAP = 3 as HBITMAP;
4015pub const HBMMENU_MBAR_CLOSE: HBITMAP = 5 as HBITMAP;
4016pub const HBMMENU_MBAR_CLOSE_D: HBITMAP = 6 as HBITMAP;
4017pub const HBMMENU_MBAR_MINIMIZE_D: HBITMAP = 7 as HBITMAP;
4018pub const HBMMENU_POPUP_CLOSE: HBITMAP = 8 as HBITMAP;
4019pub const HBMMENU_POPUP_RESTORE: HBITMAP = 9 as HBITMAP;
4020pub const HBMMENU_POPUP_MAXIMIZE: HBITMAP = 10 as HBITMAP;
4021pub const HBMMENU_POPUP_MINIMIZE: HBITMAP = 11 as HBITMAP;
4022STRUCT!{struct MENUITEMINFOA {
4023    cbSize: UINT,
4024    fMask: UINT,
4025    fType: UINT,
4026    fState: UINT,
4027    wID: UINT,
4028    hSubMenu: HMENU,
4029    hbmpChecked: HBITMAP,
4030    hbmpUnchecked: HBITMAP,
4031    dwItemData: ULONG_PTR,
4032    dwTypeData: LPSTR,
4033    cch: UINT,
4034    hbmpItem: HBITMAP,
4035}}
4036pub type LPMENUITEMINFOA = *mut MENUITEMINFOA;
4037pub type LPCMENUITEMINFOA = *const MENUITEMINFOA;
4038STRUCT!{struct MENUITEMINFOW {
4039    cbSize: UINT,
4040    fMask: UINT,
4041    fType: UINT,
4042    fState: UINT,
4043    wID: UINT,
4044    hSubMenu: HMENU,
4045    hbmpChecked: HBITMAP,
4046    hbmpUnchecked: HBITMAP,
4047    dwItemData: ULONG_PTR,
4048    dwTypeData: LPWSTR,
4049    cch: UINT,
4050    hbmpItem: HBITMAP,
4051}}
4052pub type LPMENUITEMINFOW = *mut MENUITEMINFOW;
4053pub type LPCMENUITEMINFOW = *const MENUITEMINFOW;
4054extern "system" {
4055    pub fn InsertMenuItemA(
4056        hmenu: HMENU,
4057        item: UINT,
4058        fByPosition: BOOL,
4059        lpmi: LPCMENUITEMINFOA,
4060    ) -> BOOL;
4061    pub fn InsertMenuItemW(
4062        hmenu: HMENU,
4063        item: UINT,
4064        fByPosition: BOOL,
4065        lpmi: LPCMENUITEMINFOW,
4066    ) -> BOOL;
4067    pub fn GetMenuItemInfoA(
4068        hMenu: HMENU,
4069        uItem: UINT,
4070        fByPosition: BOOL,
4071        lpmii: LPMENUITEMINFOA,
4072    ) -> BOOL;
4073    pub fn GetMenuItemInfoW(
4074        hMenu: HMENU,
4075        uItem: UINT,
4076        fByPosition: BOOL,
4077        lpmii: LPMENUITEMINFOW,
4078    ) -> BOOL;
4079    pub fn SetMenuItemInfoA(
4080        hmenu: HMENU,
4081        item: UINT,
4082        fByPositon: BOOL,
4083        lpmii: LPCMENUITEMINFOA,
4084    ) -> BOOL;
4085    pub fn SetMenuItemInfoW(
4086        hmenu: HMENU,
4087        item: UINT,
4088        fByPositon: BOOL,
4089        lpmii: LPCMENUITEMINFOW,
4090    ) -> BOOL;
4091}
4092pub const GMDI_USEDISABLED: DWORD = 0x0001;
4093pub const GMDI_GOINTOPOPUPS: DWORD = 0x0002;
4094extern "system" {
4095    pub fn GetMenuDefaultItem(
4096        hMenu: HMENU,
4097        fByPos: UINT,
4098        gmdiFlags: UINT,
4099    ) -> UINT;
4100    pub fn SetMenuDefaultItem(
4101        hMenu: HMENU,
4102        uItem: UINT,
4103        fByPos: UINT,
4104    ) -> BOOL;
4105    pub fn GetMenuItemRect(
4106        hWnd: HWND,
4107        hMenu: HMENU,
4108        uItem: UINT,
4109        lprcItem: LPRECT,
4110    ) -> BOOL;
4111    pub fn MenuItemFromPoint(
4112        hWnd: HWND,
4113        hMenu: HMENU,
4114        ptScreen: POINT,
4115    ) -> c_int;
4116}
4117pub const TPM_LEFTBUTTON: UINT = 0x0000;
4118pub const TPM_RIGHTBUTTON: UINT = 0x0002;
4119pub const TPM_LEFTALIGN: UINT = 0x0000;
4120pub const TPM_CENTERALIGN: UINT = 0x0004;
4121pub const TPM_RIGHTALIGN: UINT = 0x0008;
4122pub const TPM_TOPALIGN: UINT = 0x0000;
4123pub const TPM_VCENTERALIGN: UINT = 0x0010;
4124pub const TPM_BOTTOMALIGN: UINT = 0x0020;
4125pub const TPM_HORIZONTAL: UINT = 0x0000;
4126pub const TPM_VERTICAL: UINT = 0x0040;
4127pub const TPM_NONOTIFY: UINT = 0x0080;
4128pub const TPM_RETURNCMD: UINT = 0x0100;
4129pub const TPM_RECURSE: UINT = 0x0001;
4130pub const TPM_HORPOSANIMATION: UINT = 0x0400;
4131pub const TPM_HORNEGANIMATION: UINT = 0x0800;
4132pub const TPM_VERPOSANIMATION: UINT = 0x1000;
4133pub const TPM_VERNEGANIMATION: UINT = 0x2000;
4134pub const TPM_NOANIMATION: UINT = 0x4000;
4135pub const TPM_LAYOUTRTL: UINT = 0x8000;
4136pub const TPM_WORKAREA: UINT = 0x10000;
4137STRUCT!{struct DROPSTRUCT {
4138    hwndSource: HWND,
4139    hwndSink: HWND,
4140    wFmt: DWORD,
4141    dwData: ULONG_PTR,
4142    ptDrop: POINT,
4143    dwControlData: DWORD,
4144}}
4145pub type PDROPSTRUCT = *mut DROPSTRUCT;
4146pub type LPDROPSTRUCT = *mut DROPSTRUCT;
4147pub const DOF_EXECUTABLE: DWORD = 0x8001;
4148pub const DOF_DOCUMENT: DWORD = 0x8002;
4149pub const DOF_DIRECTORY: DWORD = 0x8003;
4150pub const DOF_MULTIPLE: DWORD = 0x8004;
4151pub const DOF_PROGMAN: DWORD = 0x0001;
4152pub const DOF_SHELLDATA: DWORD = 0x0002;
4153pub const DO_DROPFILE: DWORD = 0x454C4946;
4154pub const DO_PRINTFILE: DWORD = 0x544E5250;
4155extern "system" {
4156    pub fn DragObject(
4157        hwndParent: HWND,
4158        hwndFrom: HWND,
4159        fmt: UINT,
4160        data: ULONG_PTR,
4161        hcur: HCURSOR,
4162    ) -> DWORD;
4163    pub fn DragDetect(
4164        hwnd: HWND,
4165        pt: POINT,
4166    ) -> BOOL;
4167    pub fn DrawIcon(
4168        hDC: HDC,
4169        x: c_int,
4170        y: c_int,
4171        hIcon: HICON,
4172    ) -> BOOL;
4173}
4174pub const DT_TOP: UINT = 0x00000000;
4175pub const DT_LEFT: UINT = 0x00000000;
4176pub const DT_CENTER: UINT = 0x00000001;
4177pub const DT_RIGHT: UINT = 0x00000002;
4178pub const DT_VCENTER: UINT = 0x00000004;
4179pub const DT_BOTTOM: UINT = 0x00000008;
4180pub const DT_WORDBREAK: UINT = 0x00000010;
4181pub const DT_SINGLELINE: UINT = 0x00000020;
4182pub const DT_EXPANDTABS: UINT = 0x00000040;
4183pub const DT_TABSTOP: UINT = 0x00000080;
4184pub const DT_NOCLIP: UINT = 0x00000100;
4185pub const DT_EXTERNALLEADING: UINT = 0x00000200;
4186pub const DT_CALCRECT: UINT = 0x00000400;
4187pub const DT_NOPREFIX: UINT = 0x00000800;
4188pub const DT_INTERNAL: UINT = 0x00001000;
4189pub const DT_EDITCONTROL: UINT = 0x00002000;
4190pub const DT_PATH_ELLIPSIS: UINT = 0x00004000;
4191pub const DT_END_ELLIPSIS: UINT = 0x00008000;
4192pub const DT_MODIFYSTRING: UINT = 0x00010000;
4193pub const DT_RTLREADING: UINT = 0x00020000;
4194pub const DT_WORD_ELLIPSIS: UINT = 0x00040000;
4195pub const DT_NOFULLWIDTHCHARBREAK: UINT = 0x00080000;
4196pub const DT_HIDEPREFIX: UINT = 0x00100000;
4197pub const DT_PREFIXONLY: UINT = 0x00200000;
4198STRUCT!{struct DRAWTEXTPARAMS {
4199    cbSize: UINT,
4200    iTabLength: c_int,
4201    iLeftMargin: c_int,
4202    iRightMargin: c_int,
4203    uiLengthDrawn: UINT,
4204}}
4205pub type LPDRAWTEXTPARAMS = *mut DRAWTEXTPARAMS;
4206extern "system" {
4207    pub fn DrawTextA(
4208        hdc: HDC,
4209        lpchText: LPCSTR,
4210        cchText: c_int,
4211        lprc: LPRECT,
4212        format: UINT,
4213    ) -> c_int;
4214    pub fn DrawTextW(
4215        hdc: HDC,
4216        lpchText: LPCWSTR,
4217        cchText: c_int,
4218        lprc: LPRECT,
4219        format: UINT,
4220    ) -> c_int;
4221    pub fn DrawTextExA(
4222        hdc: HDC,
4223        lpchText: LPCSTR,
4224        cchText: c_int,
4225        lprc: LPRECT,
4226        format: UINT,
4227        lpdtp: LPDRAWTEXTPARAMS,
4228    ) -> c_int;
4229    pub fn DrawTextExW(
4230        hdc: HDC,
4231        lpchText: LPCWSTR,
4232        cchText: c_int,
4233        lprc: LPRECT,
4234        format: UINT,
4235        lpdtp: LPDRAWTEXTPARAMS,
4236    ) -> c_int;
4237    pub fn GrayStringA(
4238        hDC: HDC,
4239        hBrush: HBRUSH,
4240        lpOutputFunc: GRAYSTRINGPROC,
4241        lpData: LPARAM,
4242        nCount: c_int,
4243        X: c_int,
4244        Y: c_int,
4245        nWidth: c_int,
4246        nHeight: c_int,
4247    ) -> BOOL;
4248    pub fn GrayStringW(
4249        hDC: HDC,
4250        hBrush: HBRUSH,
4251        lpOutputFunc: GRAYSTRINGPROC,
4252        lpData: LPARAM,
4253        nCount: c_int,
4254        X: c_int,
4255        Y: c_int,
4256        nWidth: c_int,
4257        nHeight: c_int,
4258    ) -> BOOL;
4259}
4260pub const DST_COMPLEX: UINT = 0x0000;
4261pub const DST_TEXT: UINT = 0x0001;
4262pub const DST_PREFIXTEXT: UINT = 0x0002;
4263pub const DST_ICON: UINT = 0x0003;
4264pub const DST_BITMAP: UINT = 0x0004;
4265pub const DSS_NORMAL: UINT = 0x0000;
4266pub const DSS_UNION: UINT = 0x0010;
4267pub const DSS_DISABLED: UINT = 0x0020;
4268pub const DSS_MONO: UINT = 0x0080;
4269pub const DSS_HIDEPREFIX: UINT = 0x0200;
4270pub const DSS_PREFIXONLY: UINT = 0x0400;
4271pub const DSS_RIGHT: UINT = 0x8000;
4272extern "system" {
4273    pub fn DrawStateA(
4274        hdc: HDC,
4275        hbrFore: HBRUSH,
4276        qfnCallBack: DRAWSTATEPROC,
4277        lData: LPARAM,
4278        wData: WPARAM,
4279        x: c_int,
4280        y: c_int,
4281        cx: c_int,
4282        cy: c_int,
4283        uFlags: UINT,
4284    ) -> BOOL;
4285    pub fn DrawStateW(
4286        hdc: HDC,
4287        hbrFore: HBRUSH,
4288        qfnCallBack: DRAWSTATEPROC,
4289        lData: LPARAM,
4290        wData: WPARAM,
4291        x: c_int,
4292        y: c_int,
4293        cx: c_int,
4294        cy: c_int,
4295        uFlags: UINT,
4296    ) -> BOOL;
4297    pub fn TabbedTextOutA(
4298        hdc: HDC,
4299        x: c_int,
4300        y: c_int,
4301        lpString: LPCSTR,
4302        chCount: c_int,
4303        nTabPositions: c_int,
4304        lpnTabStopPositions: *const INT,
4305        nTabOrigin: c_int,
4306    ) -> LONG;
4307    pub fn TabbedTextOutW(
4308        hdc: HDC,
4309        x: c_int,
4310        y: c_int,
4311        lpString: LPCWSTR,
4312        chCount: c_int,
4313        nTabPositions: c_int,
4314        lpnTabStopPositions: *const INT,
4315        nTabOrigin: c_int,
4316    ) -> LONG;
4317    pub fn GetTabbedTextExtentA(
4318        hdc: HDC,
4319        lpString: LPCSTR,
4320        chCount: c_int,
4321        nTabPositions: c_int,
4322        lpnTabStopPositions: *const INT,
4323    ) -> DWORD;
4324    pub fn GetTabbedTextExtentW(
4325        hdc: HDC,
4326        lpString: LPCWSTR,
4327        chCount: c_int,
4328        nTabPositions: c_int,
4329        lpnTabStopPositions: *const INT,
4330    ) -> DWORD;
4331    pub fn UpdateWindow(
4332        hWnd: HWND,
4333    ) -> BOOL;
4334    pub fn SetActiveWindow(
4335        hWnd: HWND,
4336    ) -> HWND;
4337    pub fn GetForegroundWindow() -> HWND;
4338    pub fn PaintDesktop(
4339        hdc: HDC,
4340    ) -> BOOL;
4341    pub fn SwitchToThisWindow(
4342        hwnd: HWND,
4343        fUnknown: BOOL,
4344    );
4345    pub fn SetForegroundWindow(
4346        hWnd: HWND,
4347    ) -> BOOL;
4348    pub fn AllowSetForegroundWindow(
4349        dwProcessId: DWORD,
4350    ) -> BOOL;
4351}
4352pub const ASFW_ANY: DWORD = -1i32 as u32;
4353extern "system" {
4354    pub fn LockSetForegroundWindow(
4355        uLockCode: UINT,
4356    ) -> BOOL;
4357}
4358pub const LSFW_LOCK: UINT = 1;
4359pub const LSFW_UNLOCK: UINT = 2;
4360extern "system" {
4361    pub fn WindowFromDC(
4362        hDC: HDC,
4363    ) -> HWND;
4364    pub fn GetDC(
4365        hWnd: HWND,
4366    ) -> HDC;
4367    pub fn GetDCEx(
4368        hWnd: HWND,
4369        hrgnClip: HRGN,
4370        flags: DWORD,
4371    ) -> HDC;
4372}
4373pub const DCX_WINDOW: DWORD = 0x00000001;
4374pub const DCX_CACHE: DWORD = 0x00000002;
4375pub const DCX_NORESETATTRS: DWORD = 0x00000004;
4376pub const DCX_CLIPCHILDREN: DWORD = 0x00000008;
4377pub const DCX_CLIPSIBLINGS: DWORD = 0x00000010;
4378pub const DCX_PARENTCLIP: DWORD = 0x00000020;
4379pub const DCX_EXCLUDERGN: DWORD = 0x00000040;
4380pub const DCX_INTERSECTRGN: DWORD = 0x00000080;
4381pub const DCX_EXCLUDEUPDATE: DWORD = 0x00000100;
4382pub const DCX_INTERSECTUPDATE: DWORD = 0x00000200;
4383pub const DCX_LOCKWINDOWUPDATE: DWORD = 0x00000400;
4384pub const DCX_VALIDATE: DWORD = 0x00200000;
4385extern "system" {
4386    pub fn GetWindowDC(
4387        hWnd: HWND,
4388    ) -> HDC;
4389    pub fn ReleaseDC(
4390        hWnd: HWND,
4391        hDC: HDC,
4392    ) -> c_int;
4393    pub fn BeginPaint(
4394        hwnd: HWND,
4395        lpPaint: LPPAINTSTRUCT,
4396    ) -> HDC;
4397    pub fn EndPaint(
4398        hWnd: HWND,
4399        lpPaint: *const PAINTSTRUCT,
4400    ) -> BOOL;
4401    pub fn GetUpdateRect(
4402        hWnd: HWND,
4403        lpRect: LPRECT,
4404        bErase: BOOL,
4405    ) -> BOOL;
4406    pub fn GetUpdateRgn(
4407        hWnd: HWND,
4408        hRgn: HRGN,
4409        bErase: BOOL,
4410    ) -> c_int;
4411    pub fn SetWindowRgn(
4412        hWnd: HWND,
4413        hRgn: HRGN,
4414        bRedraw: BOOL,
4415    ) -> c_int;
4416    pub fn GetWindowRgn(
4417        hWnd: HWND,
4418        hRgn: HRGN,
4419    ) -> c_int;
4420    pub fn GetWindowRgnBox(
4421        hWnd: HWND,
4422        lprc: LPRECT,
4423    ) -> c_int;
4424    pub fn ExcludeUpdateRgn(
4425        hDC: HDC,
4426        hWnd: HWND,
4427    ) -> c_int;
4428    pub fn InvalidateRect(
4429        hWnd: HWND,
4430        lpRect: *const RECT,
4431        bErase: BOOL,
4432    ) -> BOOL;
4433    pub fn ValidateRect(
4434        hWnd: HWND,
4435        lpRect: *const RECT,
4436    ) -> BOOL;
4437    pub fn InvalidateRgn(
4438        hWnd: HWND,
4439        hRgn: HRGN,
4440        bErase: BOOL,
4441    ) -> BOOL;
4442    pub fn ValidateRgn(
4443        hWnd: HWND,
4444        hRgn: HRGN,
4445    ) -> BOOL;
4446    pub fn RedrawWindow(
4447        hwnd: HWND,
4448        lprcUpdate: *const RECT,
4449        hrgnUpdate: HRGN,
4450        flags: UINT,
4451    ) -> BOOL;
4452}
4453pub const RDW_INVALIDATE: UINT = 0x0001;
4454pub const RDW_INTERNALPAINT: UINT = 0x0002;
4455pub const RDW_ERASE: UINT = 0x0004;
4456pub const RDW_VALIDATE: UINT = 0x0008;
4457pub const RDW_NOINTERNALPAINT: UINT = 0x0010;
4458pub const RDW_NOERASE: UINT = 0x0020;
4459pub const RDW_NOCHILDREN: UINT = 0x0040;
4460pub const RDW_ALLCHILDREN: UINT = 0x0080;
4461pub const RDW_UPDATENOW: UINT = 0x0100;
4462pub const RDW_ERASENOW: UINT = 0x0200;
4463pub const RDW_FRAME: UINT = 0x0400;
4464pub const RDW_NOFRAME: UINT = 0x0800;
4465extern "system" {
4466    pub fn LockWindowUpdate(
4467        hWndLock: HWND,
4468    ) -> BOOL;
4469    pub fn ScrollWindow(
4470        hWnd: HWND,
4471        xAmount: c_int,
4472        yAmount: c_int,
4473        lpRect: *const RECT,
4474        lpClipRect: *const RECT,
4475    ) -> BOOL;
4476    pub fn ScrollDC(
4477        hDC: HDC,
4478        dx: c_int,
4479        dy: c_int,
4480        lprcScroll: *const RECT,
4481        lprcClip: *const RECT,
4482        hrgnUpdate: HRGN,
4483        lprcUpdate: LPRECT,
4484    ) -> BOOL;
4485    pub fn ScrollWindowEx(
4486        hWnd: HWND,
4487        dx: c_int,
4488        dy: c_int,
4489        prcScroll: *const RECT,
4490        prcClip: *const RECT,
4491        hrgnUpdate: HRGN,
4492        prcUpdate: LPRECT,
4493        flags: UINT,
4494    ) -> c_int;
4495}
4496pub const SW_SCROLLCHILDREN: UINT = 0x0001;
4497pub const SW_INVALIDATE: UINT = 0x0002;
4498pub const SW_ERASE: UINT = 0x0004;
4499pub const SW_SMOOTHSCROLL: UINT = 0x0010;
4500extern "system" {
4501    pub fn SetScrollPos(
4502        hWnd: HWND,
4503        nBar: c_int,
4504        nPos: c_int,
4505        bRedraw: BOOL,
4506    ) -> c_int;
4507    pub fn GetScrollPos(
4508        hWnd: HWND,
4509        nBar: c_int,
4510    ) -> c_int;
4511    pub fn SetScrollRange(
4512        hWnd: HWND,
4513        nBar: c_int,
4514        nMinPos: c_int,
4515        nMaxPos: c_int,
4516        bRedraw: BOOL,
4517    ) -> BOOL;
4518    pub fn GetScrollRange(
4519        hWnd: HWND,
4520        nBar: c_int,
4521        lpMinPos: LPINT,
4522        lpMaxPos: LPINT,
4523    ) -> BOOL;
4524    pub fn ShowScrollBar(
4525        hWnd: HWND,
4526        wBar: c_int,
4527        bShow: BOOL,
4528    ) -> BOOL;
4529    pub fn EnableScrollBar(
4530        hWnd: HWND,
4531        wSBflags: UINT,
4532        wArrows: UINT,
4533    ) -> BOOL;
4534}
4535pub const ESB_ENABLE_BOTH: UINT = 0x0000;
4536pub const ESB_DISABLE_BOTH: UINT = 0x0003;
4537pub const ESB_DISABLE_LEFT: UINT = 0x0001;
4538pub const ESB_DISABLE_RIGHT: UINT = 0x0002;
4539pub const ESB_DISABLE_UP: UINT = 0x0001;
4540pub const ESB_DISABLE_DOWN: UINT = 0x0002;
4541pub const ESB_DISABLE_LTUP: UINT = ESB_DISABLE_LEFT;
4542pub const ESB_DISABLE_RTDN: UINT = ESB_DISABLE_RIGHT;
4543extern "system" {
4544    pub fn SetPropA(
4545        hWnd: HWND,
4546        lpString: LPCSTR,
4547        hData: HANDLE,
4548    ) -> BOOL;
4549    pub fn SetPropW(
4550        hWnd: HWND,
4551        lpString: LPCWSTR,
4552        hData: HANDLE,
4553    ) -> BOOL;
4554    pub fn GetPropA(
4555        hwnd: HWND,
4556        lpString: LPCSTR,
4557    ) -> HANDLE;
4558    pub fn GetPropW(
4559        hwnd: HWND,
4560        lpString: LPCWSTR,
4561    ) -> HANDLE;
4562    pub fn RemovePropA(
4563        hWnd: HWND,
4564        lpStr: LPCSTR,
4565    ) -> HANDLE;
4566    pub fn RemovePropW(
4567        hWnd: HWND,
4568        lpStr: LPCWSTR,
4569    ) -> HANDLE;
4570    pub fn EnumPropsExA(
4571        hWnd: HWND,
4572        lpEnumFunc: PROPENUMPROCA,
4573        lParam: LPARAM,
4574    ) -> c_int;
4575    pub fn EnumPropsExW(
4576        hWnd: HWND,
4577        lpEnumFunc: PROPENUMPROCW,
4578        lParam: LPARAM,
4579    ) -> c_int;
4580    pub fn EnumPropsA(
4581        hWnd: HWND,
4582        lpEnumFunc: PROPENUMPROCA,
4583    ) -> c_int;
4584    pub fn EnumPropsW(
4585        hWnd: HWND,
4586        lpEnumFunc: PROPENUMPROCW,
4587    ) -> c_int;
4588    pub fn SetWindowTextA(
4589        hWnd: HWND,
4590        lpString: LPCSTR,
4591    ) -> BOOL;
4592    pub fn SetWindowTextW(
4593        hWnd: HWND,
4594        lpString: LPCWSTR,
4595    ) -> BOOL;
4596    pub fn GetWindowTextA(
4597        hWnd: HWND,
4598        lpString: LPSTR,
4599        nMaxCount: c_int,
4600    ) -> c_int;
4601    pub fn GetWindowTextW(
4602        hWnd: HWND,
4603        lpString: LPWSTR,
4604        nMaxCount: c_int,
4605    ) -> c_int;
4606    pub fn GetWindowTextLengthA(
4607        hWnd: HWND,
4608    ) -> c_int;
4609    pub fn GetWindowTextLengthW(
4610        hWnd: HWND,
4611    ) -> c_int;
4612    pub fn GetClientRect(
4613        hWnd: HWND,
4614        lpRect: LPRECT,
4615    ) -> BOOL;
4616    pub fn GetWindowRect(
4617        hWnd: HWND,
4618        lpRect: LPRECT,
4619    ) -> BOOL;
4620    pub fn AdjustWindowRect(
4621        lpRect: LPRECT,
4622        dwStyle: DWORD,
4623        bMenu: BOOL,
4624    ) -> BOOL;
4625    pub fn AdjustWindowRectEx(
4626        lpRect: LPRECT,
4627        dwStyle: DWORD,
4628        bMenu: BOOL,
4629        dwExStyle: DWORD,
4630    ) -> BOOL;
4631    pub fn AdjustWindowRectExForDpi(
4632        lpRect: LPRECT,
4633        dwStyle: DWORD,
4634        bMenu: BOOL,
4635        dwExStyle: DWORD,
4636        dpi: UINT,
4637    ) -> BOOL;
4638}
4639pub const HELPINFO_WINDOW: UINT = 0x0001;
4640pub const HELPINFO_MENUITEM: UINT = 0x0002;
4641STRUCT!{struct HELPINFO {
4642    cbSize: UINT,
4643    iContextType: c_int,
4644    iCtrlId: c_int,
4645    hItemHandle: HANDLE,
4646    dwContextId: DWORD,
4647    MousePos: POINT,
4648}}
4649pub type LPHELPINFO = *mut HELPINFO;
4650extern "system" {
4651    pub fn SetWindowContextHelpId(
4652        _: HWND,
4653        _: DWORD,
4654    ) -> BOOL;
4655    pub fn GetWindowContextHelpId(
4656        _: HWND,
4657    ) -> DWORD;
4658    pub fn SetMenuContextHelpId(
4659        _: HMENU,
4660        _: DWORD,
4661    ) -> BOOL;
4662    pub fn GetMenuContextHelpId(
4663        _: HMENU,
4664    ) -> DWORD;
4665}
4666pub const MB_OK: UINT = 0x00000000;
4667pub const MB_OKCANCEL: UINT = 0x00000001;
4668pub const MB_ABORTRETRYIGNORE: UINT = 0x00000002;
4669pub const MB_YESNOCANCEL: UINT = 0x00000003;
4670pub const MB_YESNO: UINT = 0x00000004;
4671pub const MB_RETRYCANCEL: UINT = 0x00000005;
4672pub const MB_CANCELTRYCONTINUE: UINT = 0x00000006;
4673pub const MB_ICONHAND: UINT = 0x00000010;
4674pub const MB_ICONQUESTION: UINT = 0x00000020;
4675pub const MB_ICONEXCLAMATION: UINT = 0x00000030;
4676pub const MB_ICONASTERISK: UINT = 0x00000040;
4677pub const MB_USERICON: UINT = 0x00000080;
4678pub const MB_ICONWARNING: UINT = MB_ICONEXCLAMATION;
4679pub const MB_ICONERROR: UINT = MB_ICONHAND;
4680pub const MB_ICONINFORMATION: UINT = MB_ICONASTERISK;
4681pub const MB_ICONSTOP: UINT = MB_ICONHAND;
4682pub const MB_DEFBUTTON1: UINT = 0x00000000;
4683pub const MB_DEFBUTTON2: UINT = 0x00000100;
4684pub const MB_DEFBUTTON3: UINT = 0x00000200;
4685pub const MB_DEFBUTTON4: UINT = 0x00000300;
4686pub const MB_APPLMODAL: UINT = 0x00000000;
4687pub const MB_SYSTEMMODAL: UINT = 0x00001000;
4688pub const MB_TASKMODAL: UINT = 0x00002000;
4689pub const MB_HELP: UINT = 0x00004000;
4690pub const MB_NOFOCUS: UINT = 0x00008000;
4691pub const MB_SETFOREGROUND: UINT = 0x00010000;
4692pub const MB_DEFAULT_DESKTOP_ONLY: UINT = 0x00020000;
4693pub const MB_TOPMOST: UINT = 0x00040000;
4694pub const MB_RIGHT: UINT = 0x00080000;
4695pub const MB_RTLREADING: UINT = 0x00100000;
4696pub const MB_SERVICE_NOTIFICATION: UINT = 0x00200000;
4697pub const MB_SERVICE_NOTIFICATION_NT3X: UINT = 0x00040000;
4698pub const MB_TYPEMASK: UINT = 0x0000000F;
4699pub const MB_ICONMASK: UINT = 0x000000F0;
4700pub const MB_DEFMASK: UINT = 0x00000F00;
4701pub const MB_MODEMASK: UINT = 0x00003000;
4702pub const MB_MISCMASK: UINT = 0x0000C000;
4703extern "system" {
4704    pub fn MessageBoxA(
4705        hWnd: HWND,
4706        lpText: LPCSTR,
4707        lpCaption: LPCSTR,
4708        uType: UINT,
4709    ) -> c_int;
4710    pub fn MessageBoxW(
4711        hWnd: HWND,
4712        lpText: LPCWSTR,
4713        lpCaption: LPCWSTR,
4714        uType: UINT,
4715    ) -> c_int;
4716    pub fn MessageBoxExA(
4717        hWnd: HWND,
4718        lpText: LPCSTR,
4719        lpCaption: LPCSTR,
4720        uType: UINT,
4721        wLanguageId: WORD,
4722    ) -> c_int;
4723    pub fn MessageBoxExW(
4724        hWnd: HWND,
4725        lpText: LPCWSTR,
4726        lpCaption: LPCWSTR,
4727        uType: UINT,
4728        wLanguageId: WORD,
4729    ) -> c_int;
4730}
4731FN!{stdcall MSGBOXCALLBACK(
4732    LPHELPINFO,
4733) -> ()}
4734STRUCT!{struct MSGBOXPARAMSA {
4735    cbSize: UINT,
4736    hwndOwner: HWND,
4737    hInstance: HINSTANCE,
4738    lpszText: LPCSTR,
4739    lpszCaption: LPCSTR,
4740    dwStyle: DWORD,
4741    lpszIcon: LPCSTR,
4742    dwContextHelpId: DWORD_PTR,
4743    lpfnMsgBoxCallback: MSGBOXCALLBACK,
4744    dwLanguageId: DWORD,
4745}}
4746pub type PMSGBOXPARAMSA = *mut MSGBOXPARAMSA;
4747pub type LPMSGBOXPARAMSA = *mut MSGBOXPARAMSA;
4748STRUCT!{struct MSGBOXPARAMSW {
4749    cbSize: UINT,
4750    hwndOwner: HWND,
4751    hInstance: HINSTANCE,
4752    lpszText: LPCWSTR,
4753    lpszCaption: LPCWSTR,
4754    dwStyle: DWORD,
4755    lpszIcon: LPCWSTR,
4756    dwContextHelpId: DWORD_PTR,
4757    lpfnMsgBoxCallback: MSGBOXCALLBACK,
4758    dwLanguageId: DWORD,
4759}}
4760pub type PMSGBOXPARAMSW = *mut MSGBOXPARAMSW;
4761pub type LPMSGBOXPARAMSW = *mut MSGBOXPARAMSW;
4762extern "system" {
4763    pub fn MessageBoxIndirectA(
4764        lpmbp: *const MSGBOXPARAMSA,
4765    ) -> c_int;
4766    pub fn MessageBoxIndirectW(
4767        lpmbp: *const MSGBOXPARAMSW,
4768    ) -> c_int;
4769    pub fn MessageBeep(
4770        uType: UINT,
4771    ) -> BOOL;
4772    pub fn ShowCursor(
4773        bShow: BOOL,
4774    ) -> c_int;
4775    pub fn SetCursorPos(
4776        X: c_int,
4777        Y: c_int,
4778    ) -> BOOL;
4779    pub fn SetPhysicalCursorPos(
4780        X: c_int,
4781        Y: c_int,
4782    ) -> BOOL;
4783    pub fn SetCursor(
4784        hCursor: HCURSOR,
4785    ) -> HCURSOR;
4786    pub fn GetCursorPos(
4787        lpPoint: LPPOINT,
4788    ) -> BOOL;
4789    pub fn GetPhysicalCursorPos(
4790        lpPoint: LPPOINT,
4791    ) -> BOOL;
4792    pub fn GetClipCursor(
4793        lpRect: LPRECT,
4794    ) -> BOOL;
4795    pub fn GetCursor() -> HCURSOR;
4796    pub fn CreateCaret(
4797        hWnd: HWND,
4798        hBitmap: HBITMAP,
4799        nWidth: c_int,
4800        nHeight: c_int,
4801    ) -> BOOL;
4802    pub fn GetCaretBlinkTime() -> UINT;
4803    pub fn SetCaretBlinkTime(
4804        uMSeconds: UINT,
4805    ) -> BOOL;
4806    pub fn DestroyCaret() -> BOOL;
4807    pub fn HideCaret(
4808        hWnd: HWND,
4809    ) -> BOOL;
4810    pub fn ShowCaret(
4811        hWnd: HWND,
4812    ) -> BOOL;
4813    pub fn SetCaretPos(
4814        X: c_int,
4815        Y: c_int,
4816    ) -> BOOL;
4817    pub fn GetCaretPos(
4818        lpPoint: LPPOINT,
4819    ) -> BOOL;
4820    pub fn ClientToScreen(
4821        hWnd: HWND,
4822        lpPoint: LPPOINT,
4823    ) -> BOOL;
4824    pub fn ScreenToClient(
4825        hWnd: HWND,
4826        lpPoint: LPPOINT,
4827    ) -> BOOL;
4828    pub fn LogicalToPhysicalPoint(
4829        hWnd: HWND,
4830        lpPoint: LPPOINT,
4831    ) -> BOOL;
4832    pub fn PhysicalToLogicalPoint(
4833        hWnd: HWND,
4834        lpPoint: LPPOINT,
4835    ) -> BOOL;
4836    pub fn LogicalToPhysicalPointForPerMonitorDPI(
4837        hWnd: HWND,
4838        lpPoint: LPPOINT,
4839    ) -> BOOL;
4840    pub fn PhysicalToLogicalPointForPerMonitorDPI(
4841        hWnd: HWND,
4842        lpPoint: LPPOINT,
4843    ) -> BOOL;
4844    pub fn MapWindowPoints(
4845        hWndFrom: HWND,
4846        hWndTo: HWND,
4847        lpPoints: LPPOINT,
4848        cPoints: UINT,
4849    ) -> c_int;
4850    pub fn WindowFromPoint(
4851        Point: POINT,
4852    ) -> HWND;
4853    pub fn WindowFromPhysicalPoint(
4854        Point: POINT,
4855    ) -> HWND;
4856    pub fn ChildWindowFromPoint(
4857        hWndParent: HWND,
4858        point: POINT,
4859    ) -> HWND;
4860    pub fn ClipCursor(
4861        lpRect: *const RECT,
4862    ) -> BOOL;
4863}
4864pub const CWP_ALL: UINT = 0x0000;
4865pub const CWP_SKIPINVISIBLE: UINT = 0x0001;
4866pub const CWP_SKIPDISABLED: UINT = 0x0002;
4867pub const CWP_SKIPTRANSPARENT: UINT = 0x0004;
4868extern "system" {
4869    pub fn ChildWindowFromPointEx(
4870        hwnd: HWND,
4871        pt: POINT,
4872        flags: UINT,
4873    ) -> HWND;
4874}
4875pub const CTLCOLOR_MSGBOX: c_int = 0;
4876pub const CTLCOLOR_EDIT: c_int = 1;
4877pub const CTLCOLOR_LISTBOX: c_int = 2;
4878pub const CTLCOLOR_BTN: c_int = 3;
4879pub const CTLCOLOR_DLG: c_int = 4;
4880pub const CTLCOLOR_SCROLLBAR: c_int = 5;
4881pub const CTLCOLOR_STATIC: c_int = 6;
4882pub const CTLCOLOR_MAX: c_int = 7;
4883pub const COLOR_SCROLLBAR: c_int = 0;
4884pub const COLOR_BACKGROUND: c_int = 1;
4885pub const COLOR_ACTIVECAPTION: c_int = 2;
4886pub const COLOR_INACTIVECAPTION: c_int = 3;
4887pub const COLOR_MENU: c_int = 4;
4888pub const COLOR_WINDOW: c_int = 5;
4889pub const COLOR_WINDOWFRAME: c_int = 6;
4890pub const COLOR_MENUTEXT: c_int = 7;
4891pub const COLOR_WINDOWTEXT: c_int = 8;
4892pub const COLOR_CAPTIONTEXT: c_int = 9;
4893pub const COLOR_ACTIVEBORDER: c_int = 10;
4894pub const COLOR_INACTIVEBORDER: c_int = 11;
4895pub const COLOR_APPWORKSPACE: c_int = 12;
4896pub const COLOR_HIGHLIGHT: c_int = 13;
4897pub const COLOR_HIGHLIGHTTEXT: c_int = 14;
4898pub const COLOR_BTNFACE: c_int = 15;
4899pub const COLOR_BTNSHADOW: c_int = 16;
4900pub const COLOR_GRAYTEXT: c_int = 17;
4901pub const COLOR_BTNTEXT: c_int = 18;
4902pub const COLOR_INACTIVECAPTIONTEXT: c_int = 19;
4903pub const COLOR_BTNHIGHLIGHT: c_int = 20;
4904pub const COLOR_3DDKSHADOW: c_int = 21;
4905pub const COLOR_3DLIGHT: c_int = 22;
4906pub const COLOR_INFOTEXT: c_int = 23;
4907pub const COLOR_INFOBK: c_int = 24;
4908pub const COLOR_HOTLIGHT: c_int = 26;
4909pub const COLOR_GRADIENTACTIVECAPTION: c_int = 27;
4910pub const COLOR_GRADIENTINACTIVECAPTION: c_int = 28;
4911pub const COLOR_MENUHILIGHT: c_int = 29;
4912pub const COLOR_MENUBAR: c_int = 30;
4913pub const COLOR_DESKTOP: c_int = COLOR_BACKGROUND;
4914pub const COLOR_3DFACE: c_int = COLOR_BTNFACE;
4915pub const COLOR_3DSHADOW: c_int = COLOR_BTNSHADOW;
4916pub const COLOR_3DHIGHLIGHT: c_int = COLOR_BTNHIGHLIGHT;
4917pub const COLOR_3DHILIGHT: c_int = COLOR_BTNHIGHLIGHT;
4918pub const COLOR_BTNHILIGHT: c_int = COLOR_BTNHIGHLIGHT;
4919extern "system" {
4920    pub fn GetSysColor(
4921        nIndex: c_int,
4922    ) -> DWORD;
4923    pub fn GetSysColorBrush(
4924        nIndex: c_int,
4925    ) -> HBRUSH;
4926    pub fn SetSysColors(
4927        cElements: c_int,
4928        lpaElements: *const INT,
4929        lpaRgbValues: *const COLORREF,
4930    ) -> BOOL;
4931    pub fn DrawFocusRect(
4932        hDC: HDC,
4933        lprc: *const RECT,
4934    ) -> BOOL;
4935    pub fn FillRect(
4936        hDC: HDC,
4937        lprc: *const RECT,
4938        hbr: HBRUSH,
4939    ) -> c_int;
4940    pub fn FrameRect(
4941        hDC: HDC,
4942        lprc: *const RECT,
4943        hbr: HBRUSH,
4944    ) -> c_int;
4945    pub fn InvertRect(
4946        hDC: HDC,
4947        lprc: *const RECT,
4948    ) -> BOOL;
4949    pub fn SetRect(
4950        lprc: LPRECT,
4951        xLeft: c_int,
4952        yTop: c_int,
4953        xRight: c_int,
4954        yBottom: c_int,
4955    ) -> BOOL;
4956    pub fn SetRectEmpty(
4957        lprc: LPRECT,
4958    ) -> BOOL;
4959    pub fn CopyRect(
4960        lprcDst: LPRECT,
4961        lprcSrc: *const RECT,
4962    ) -> BOOL;
4963    pub fn InflateRect(
4964        lprc: LPRECT,
4965        dx: c_int,
4966        dy: c_int,
4967    ) -> BOOL;
4968    pub fn IntersectRect(
4969        lprcDst: LPRECT,
4970        lprcSrc1: *const RECT,
4971        lprcSrc2: *const RECT,
4972    ) -> BOOL;
4973    pub fn UnionRect(
4974        lprcDst: LPRECT,
4975        lprcSrc1: *const RECT,
4976        lprcSrc2: *const RECT,
4977    ) -> BOOL;
4978    pub fn SubtractRect(
4979        lprcDst: LPRECT,
4980        lprcSrc1: *const RECT,
4981        lprcSrc2: *const RECT,
4982    ) -> BOOL;
4983    pub fn OffsetRect(
4984        lprc: LPRECT,
4985        dx: c_int,
4986        dy: c_int,
4987    ) -> BOOL;
4988    pub fn IsRectEmpty(
4989        lprc: *const RECT,
4990    ) -> BOOL;
4991    pub fn EqualRect(
4992        lprc1: *const RECT,
4993        lprc2: *const RECT,
4994    ) -> BOOL;
4995    pub fn PtInRect(
4996        lprc: *const RECT,
4997        pt: POINT,
4998    ) -> BOOL;
4999    pub fn GetWindowWord(
5000        hWnd: HWND,
5001        nIndex: c_int,
5002    ) -> WORD;
5003    pub fn SetWindowWord(
5004        hwnd: HWND,
5005        nIndex: c_int,
5006        wNewWord: WORD,
5007    ) -> WORD;
5008    pub fn GetWindowLongA(
5009        hWnd: HWND,
5010        nIndex: c_int,
5011    ) -> LONG;
5012    pub fn GetWindowLongW(
5013        hWnd: HWND,
5014        nIndex: c_int,
5015    ) -> LONG;
5016    pub fn SetWindowLongA(
5017        hWnd: HWND,
5018        nIndex: c_int,
5019        dwNewLong: LONG,
5020    ) -> LONG;
5021    pub fn SetWindowLongW(
5022        hWnd: HWND,
5023        nIndex: c_int,
5024        dwNewLong: LONG,
5025    ) -> LONG;
5026    #[cfg(target_pointer_width = "64")]
5027    pub fn GetWindowLongPtrA(
5028        hWnd: HWND,
5029        nIndex: c_int,
5030    ) -> LONG_PTR;
5031    #[cfg(target_pointer_width = "64")]
5032    pub fn GetWindowLongPtrW(
5033        hWnd: HWND,
5034        nIndex: c_int,
5035    ) -> LONG_PTR;
5036    #[cfg(target_pointer_width = "64")]
5037    pub fn SetWindowLongPtrA(
5038        hWnd: HWND,
5039        nIndex: c_int,
5040        dwNewLong: LONG_PTR,
5041    ) -> LONG_PTR;
5042    #[cfg(target_pointer_width = "64")]
5043    pub fn SetWindowLongPtrW(
5044        hWnd: HWND,
5045        nIndex: c_int,
5046        dwNewLong: LONG_PTR,
5047    ) -> LONG_PTR;
5048}
5049#[cfg(target_pointer_width = "32")]
5050pub use self::GetWindowLongA as GetWindowLongPtrA;
5051#[cfg(target_pointer_width = "32")]
5052pub use self::GetWindowLongW as GetWindowLongPtrW;
5053#[cfg(target_pointer_width = "32")]
5054pub use self::SetWindowLongA as SetWindowLongPtrA;
5055#[cfg(target_pointer_width = "32")]
5056pub use self::SetWindowLongW as SetWindowLongPtrW;
5057extern "system" {
5058    pub fn GetClassWord(
5059        hWnd: HWND,
5060        nIndex: c_int,
5061    ) -> WORD;
5062    pub fn SetClassWord(
5063        hWnd: HWND,
5064        nIndex: c_int,
5065        wNewWord: WORD,
5066    ) -> WORD;
5067    pub fn GetClassLongA(
5068        hWnd: HWND,
5069        nIndex: c_int,
5070    ) -> DWORD;
5071    pub fn GetClassLongW(
5072        hWnd: HWND,
5073        nIndex: c_int,
5074    ) -> DWORD;
5075    pub fn SetClassLongA(
5076        hWnd: HWND,
5077        nIndex: c_int,
5078        dwNewLong: LONG,
5079    ) -> DWORD;
5080    pub fn SetClassLongW(
5081        hWnd: HWND,
5082        nIndex: c_int,
5083        dwNewLong: LONG,
5084    ) -> DWORD;
5085    #[cfg(target_pointer_width = "64")]
5086    pub fn GetClassLongPtrA(
5087        hWnd: HWND,
5088        nIndex: c_int,
5089    ) -> ULONG_PTR;
5090    #[cfg(target_pointer_width = "64")]
5091    pub fn GetClassLongPtrW(
5092        hWnd: HWND,
5093        nIndex: c_int,
5094    ) -> ULONG_PTR;
5095    #[cfg(target_pointer_width = "64")]
5096    pub fn SetClassLongPtrA(
5097        hWnd: HWND,
5098        nIndex: c_int,
5099        dwNewLong: LONG_PTR,
5100    ) -> ULONG_PTR;
5101    #[cfg(target_pointer_width = "64")]
5102    pub fn SetClassLongPtrW(
5103        hWnd: HWND,
5104        nIndex: c_int,
5105        dwNewLong: LONG_PTR,
5106    ) -> ULONG_PTR;
5107}
5108#[cfg(target_pointer_width = "32")]
5109pub use self::GetClassLongA as GetClassLongPtrA;
5110#[cfg(target_pointer_width = "32")]
5111pub use self::GetClassLongW as GetClassLongPtrW;
5112#[cfg(target_pointer_width = "32")]
5113pub use self::SetClassLongA as SetClassLongPtrA;
5114#[cfg(target_pointer_width = "32")]
5115pub use self::SetClassLongW as SetClassLongPtrW;
5116extern "system" {
5117    pub fn GetProcessDefaultLayout(
5118        pdwDefaultLayout: *mut DWORD,
5119    ) -> BOOL;
5120    pub fn SetProcessDefaultLayout(
5121        dwDefaultLayout: DWORD,
5122    ) -> BOOL;
5123    pub fn GetDesktopWindow() -> HWND;
5124    pub fn GetParent(
5125        hWnd: HWND,
5126    ) -> HWND;
5127    pub fn SetParent(
5128        hWndChild: HWND,
5129        hWndNewParent: HWND,
5130    ) -> HWND;
5131    pub fn EnumChildWindows(
5132        hWndParent: HWND,
5133        lpEnumFunc: WNDENUMPROC,
5134        lParam: LPARAM,
5135    ) -> BOOL;
5136    pub fn FindWindowA(
5137        lpClassName: LPCSTR,
5138        lpWindowName: LPCSTR,
5139    ) -> HWND;
5140    pub fn FindWindowW(
5141        lpClassName: LPCWSTR,
5142        lpWindowName: LPCWSTR,
5143    ) -> HWND;
5144    pub fn FindWindowExA(
5145        hWndParent: HWND,
5146        hWndChildAfter: HWND,
5147        lpszClass: LPCSTR,
5148        lpszWindow: LPCSTR,
5149    ) -> HWND;
5150    pub fn FindWindowExW(
5151        hWndParent: HWND,
5152        hWndChildAfter: HWND,
5153        lpszClass: LPCWSTR,
5154        lpszWindow: LPCWSTR,
5155    ) -> HWND;
5156    pub fn GetShellWindow() -> HWND;
5157    pub fn RegisterShellHookWindow(
5158        hwnd: HWND,
5159    ) -> BOOL;
5160    pub fn DeregisterShellHookWindow(
5161        hwnd: HWND,
5162    ) -> BOOL;
5163    pub fn EnumWindows(
5164        lpEnumFunc: WNDENUMPROC,
5165        lParam: LPARAM,
5166    ) -> BOOL;
5167    pub fn EnumThreadWindows(
5168        dwThreadId: DWORD,
5169        lpfn: WNDENUMPROC,
5170        lParam: LPARAM,
5171    ) -> BOOL;
5172}
5173// EnumTaskWindows
5174extern "system" {
5175    pub fn GetClassNameA(
5176        hWnd: HWND,
5177        lpClassName: LPCSTR,
5178        nMaxCount: c_int,
5179    ) -> c_int;
5180    pub fn GetClassNameW(
5181        hWnd: HWND,
5182        lpClassName: LPCWSTR,
5183        nMaxCount: c_int,
5184    ) -> c_int;
5185    pub fn GetTopWindow(
5186        hWnd: HWND,
5187    ) -> HWND;
5188}
5189// GetNextWindow
5190// GetSysModalWindow
5191// SetSysModalWindow
5192extern "system" {
5193    pub fn GetWindowThreadProcessId(
5194        hWnd: HWND,
5195        lpdwProcessId: LPDWORD,
5196    ) -> DWORD;
5197    pub fn IsGUIThread(
5198        bConvert: BOOL,
5199    ) -> BOOL;
5200    pub fn GetLastActivePopup(
5201        hWnd: HWND,
5202    ) -> HWND;
5203}
5204pub const GW_HWNDFIRST: UINT = 0;
5205pub const GW_HWNDLAST: UINT = 1;
5206pub const GW_HWNDNEXT: UINT = 2;
5207pub const GW_HWNDPREV: UINT = 3;
5208pub const GW_OWNER: UINT = 4;
5209pub const GW_CHILD: UINT = 5;
5210pub const GW_ENABLEDPOPUP: UINT = 6;
5211pub const GW_MAX: UINT = 6;
5212extern "system" {
5213    pub fn GetWindow(
5214        hWnd: HWND,
5215        uCmd: UINT,
5216    ) -> HWND;
5217    pub fn SetWindowsHookA(
5218        nFilterType: c_int,
5219        pfnFilterProc: HOOKPROC,
5220    ) -> HHOOK;
5221    pub fn SetWindowsHookW(
5222        nFilterType: c_int,
5223        pfnFilterProc: HOOKPROC,
5224    ) -> HHOOK;
5225    pub fn UnhookWindowsHook(
5226        nFilterType: c_int,
5227        pfnFilterProc: HOOKPROC,
5228    ) -> BOOL;
5229    pub fn SetWindowsHookExA(
5230        idHook: c_int,
5231        lpfn: HOOKPROC,
5232        hmod: HINSTANCE,
5233        dwThreadId: DWORD,
5234    ) -> HHOOK;
5235    pub fn SetWindowsHookExW(
5236        idHook: c_int,
5237        lpfn: HOOKPROC,
5238        hmod: HINSTANCE,
5239        dwThreadId: DWORD,
5240    ) -> HHOOK;
5241    pub fn UnhookWindowsHookEx(
5242        hhk: HHOOK,
5243    ) -> BOOL;
5244    pub fn CallNextHookEx(
5245        hhk: HHOOK,
5246        nCode: c_int,
5247        wParam: WPARAM,
5248        lParam: LPARAM,
5249    ) -> LRESULT;
5250}
5251// DefHookProc
5252pub const MF_INSERT: UINT = 0x00000000;
5253pub const MF_CHANGE: UINT = 0x00000080;
5254pub const MF_APPEND: UINT = 0x00000100;
5255pub const MF_DELETE: UINT = 0x00000200;
5256pub const MF_REMOVE: UINT = 0x00001000;
5257pub const MF_BYCOMMAND: UINT = 0x00000000;
5258pub const MF_BYPOSITION: UINT = 0x00000400;
5259pub const MF_SEPARATOR: UINT = 0x00000800;
5260pub const MF_ENABLED: UINT = 0x00000000;
5261pub const MF_GRAYED: UINT = 0x00000001;
5262pub const MF_DISABLED: UINT = 0x00000002;
5263pub const MF_UNCHECKED: UINT = 0x00000000;
5264pub const MF_CHECKED: UINT = 0x00000008;
5265pub const MF_USECHECKBITMAPS: UINT = 0x00000200;
5266pub const MF_STRING: UINT = 0x00000000;
5267pub const MF_BITMAP: UINT = 0x00000004;
5268pub const MF_OWNERDRAW: UINT = 0x00000100;
5269pub const MF_POPUP: UINT = 0x00000010;
5270pub const MF_MENUBARBREAK: UINT = 0x00000020;
5271pub const MF_MENUBREAK: UINT = 0x00000040;
5272pub const MF_UNHILITE: UINT = 0x00000000;
5273pub const MF_HILITE: UINT = 0x00000080;
5274pub const MF_DEFAULT: UINT = 0x00001000;
5275pub const MF_SYSMENU: UINT = 0x00002000;
5276pub const MF_HELP: UINT = 0x00004000;
5277pub const MF_RIGHTJUSTIFY: UINT = 0x00004000;
5278pub const MF_MOUSESELECT: UINT = 0x00008000;
5279pub const MF_END: UINT = 0x00000080;
5280pub const MFT_STRING: UINT = MF_STRING;
5281pub const MFT_BITMAP: UINT = MF_BITMAP;
5282pub const MFT_MENUBARBREAK: UINT = MF_MENUBARBREAK;
5283pub const MFT_MENUBREAK: UINT = MF_MENUBREAK;
5284pub const MFT_OWNERDRAW: UINT = MF_OWNERDRAW;
5285pub const MFT_RADIOCHECK: UINT = 0x00000200;
5286pub const MFT_SEPARATOR: UINT = MF_SEPARATOR;
5287pub const MFT_RIGHTORDER: UINT = 0x00002000;
5288pub const MFT_RIGHTJUSTIFY: UINT = MF_RIGHTJUSTIFY;
5289pub const MFS_GRAYED: UINT = 0x00000003;
5290pub const MFS_DISABLED: UINT = MFS_GRAYED;
5291pub const MFS_CHECKED: UINT = MF_CHECKED;
5292pub const MFS_HILITE: UINT = MF_HILITE;
5293pub const MFS_ENABLED: UINT = MF_ENABLED;
5294pub const MFS_UNCHECKED: UINT = MF_UNCHECKED;
5295pub const MFS_UNHILITE: UINT = MF_UNHILITE;
5296pub const MFS_DEFAULT: UINT = MF_DEFAULT;
5297extern "system" {
5298    pub fn CheckMenuRadioItem(
5299        hMenu: HMENU,
5300        first: UINT,
5301        last: UINT,
5302        check: UINT,
5303        flags: UINT,
5304    ) -> BOOL;
5305}
5306//10225
5307pub const SC_SIZE: WPARAM = 0xF000;
5308pub const SC_MOVE: WPARAM = 0xF010;
5309pub const SC_MINIMIZE: WPARAM = 0xF020;
5310pub const SC_MAXIMIZE: WPARAM = 0xF030;
5311pub const SC_NEXTWINDOW: WPARAM = 0xF040;
5312pub const SC_PREVWINDOW: WPARAM = 0xF050;
5313pub const SC_CLOSE: WPARAM = 0xF060;
5314pub const SC_VSCROLL: WPARAM = 0xF070;
5315pub const SC_HSCROLL: WPARAM = 0xF080;
5316pub const SC_MOUSEMENU: WPARAM = 0xF090;
5317pub const SC_KEYMENU: WPARAM = 0xF100;
5318pub const SC_ARRANGE: WPARAM = 0xF110;
5319pub const SC_RESTORE: WPARAM = 0xF120;
5320pub const SC_TASKLIST: WPARAM = 0xF130;
5321pub const SC_SCREENSAVE: WPARAM = 0xF140;
5322pub const SC_HOTKEY: WPARAM = 0xF150;
5323pub const SC_DEFAULT: WPARAM = 0xF160;
5324pub const SC_MONITORPOWER: WPARAM = 0xF170;
5325pub const SC_CONTEXTHELP: WPARAM = 0xF180;
5326pub const SC_SEPARATOR: WPARAM = 0xF00F;
5327//10269
5328extern "system" {
5329    pub fn LoadBitmapA(
5330        hInstance: HINSTANCE,
5331        lpBitmapName: LPCSTR,
5332    ) -> HBITMAP;
5333    pub fn LoadBitmapW(
5334        hInstance: HINSTANCE,
5335        lpBitmapName: LPCWSTR,
5336    ) -> HBITMAP;
5337    pub fn LoadCursorA(
5338        hInstance: HINSTANCE,
5339        lpCursorName: LPCSTR,
5340    ) -> HCURSOR;
5341    pub fn LoadCursorW(
5342        hInstance: HINSTANCE,
5343        lpCursorName: LPCWSTR,
5344    ) -> HCURSOR;
5345    pub fn LoadCursorFromFileA(
5346        lpFileName: LPCSTR,
5347    ) -> HCURSOR;
5348    pub fn LoadCursorFromFileW(
5349        lpFileName: LPCWSTR,
5350    ) -> HCURSOR;
5351    pub fn CreateCursor(
5352        hInst: HINSTANCE,
5353        xHotSpot: c_int,
5354        yHotSpot: c_int,
5355        nWidth: c_int,
5356        nHeight: c_int,
5357        pvAndPlane: *const VOID,
5358        pvXORPlane: *const VOID,
5359    ) -> HCURSOR;
5360    pub fn DestroyCursor(
5361        hCursor: HCURSOR,
5362    ) -> BOOL;
5363}
5364//10355
5365pub const IDC_ARROW: LPCWSTR = 32512 as LPCWSTR;
5366pub const IDC_IBEAM: LPCWSTR = 32513 as LPCWSTR;
5367pub const IDC_WAIT: LPCWSTR = 32514 as LPCWSTR;
5368pub const IDC_CROSS: LPCWSTR = 32515 as LPCWSTR;
5369pub const IDC_UPARROW: LPCWSTR = 32516 as LPCWSTR;
5370pub const IDC_SIZE: LPCWSTR = 32640 as LPCWSTR;
5371pub const IDC_ICON: LPCWSTR = 32641 as LPCWSTR;
5372pub const IDC_SIZENWSE: LPCWSTR = 32642 as LPCWSTR;
5373pub const IDC_SIZENESW: LPCWSTR = 32643 as LPCWSTR;
5374pub const IDC_SIZEWE: LPCWSTR = 32644 as LPCWSTR;
5375pub const IDC_SIZENS: LPCWSTR = 32645 as LPCWSTR;
5376pub const IDC_SIZEALL: LPCWSTR = 32646 as LPCWSTR;
5377pub const IDC_NO: LPCWSTR = 32648 as LPCWSTR;
5378pub const IDC_HAND: LPCWSTR = 32649 as LPCWSTR;
5379pub const IDC_APPSTARTING: LPCWSTR = 32650 as LPCWSTR;
5380pub const IDC_HELP: LPCWSTR = 32651 as LPCWSTR;
5381extern "system" {
5382    pub fn SetSystemCursor(
5383        hcur: HCURSOR,
5384        id: DWORD,
5385    ) -> BOOL;
5386}
5387STRUCT!{struct ICONINFO {
5388    fIcon: BOOL,
5389    xHotspot: DWORD,
5390    yHotspot: DWORD,
5391    hbmMask: HBITMAP,
5392    hbmColor: HBITMAP,
5393}}
5394pub type PICONINFO = *mut ICONINFO;
5395extern "system" {
5396    pub fn LoadIconA(
5397        hInstance: HINSTANCE,
5398        lpIconName: LPCSTR,
5399    ) -> HICON;
5400    pub fn LoadIconW(
5401        hInstance: HINSTANCE,
5402        lpIconName: LPCWSTR,
5403    ) -> HICON;
5404}
5405//10449
5406extern "system" {
5407    pub fn CreateIcon(
5408        hInstance: HINSTANCE,
5409        nWidth: c_int,
5410        nHeight: c_int,
5411        cPlanes: BYTE,
5412        cBitsPixel: BYTE,
5413        lpbANDbits: *const BYTE,
5414        lpbXORbits: *const BYTE,
5415    ) -> HICON;
5416    pub fn DestroyIcon(
5417        hIcon: HICON,
5418    ) -> BOOL;
5419    pub fn LookupIconIdFromDirectory(
5420        presbits: PBYTE,
5421        fIcon: BOOL,
5422    ) -> c_int;
5423    pub fn LookupIconIdFromDirectoryEx(
5424        presbits: PBYTE,
5425        fIcon: BOOL,
5426        cxDesired: c_int,
5427        cyDesired: c_int,
5428        Flags: UINT,
5429    ) -> c_int;
5430    pub fn CreateIconFromResource(
5431        presbits: PBYTE,
5432        dwResSize: DWORD,
5433        fIcon: BOOL,
5434        dwVer: DWORD,
5435    ) -> HICON;
5436    pub fn CreateIconFromResourceEx(
5437        presbits: PBYTE,
5438        dwResSize: DWORD,
5439        fIcon: BOOL,
5440        dwVer: DWORD,
5441        cxDesired: c_int,
5442        cyDesired: c_int,
5443        Flags: UINT,
5444    ) -> HICON;
5445}
5446//10524
5447pub const IMAGE_BITMAP: UINT = 0;
5448pub const IMAGE_ICON: UINT = 1;
5449pub const IMAGE_CURSOR: UINT = 2;
5450pub const IMAGE_ENHMETAFILE: UINT = 3;
5451pub const LR_DEFAULTCOLOR: UINT = 0x00000000;
5452pub const LR_MONOCHROME: UINT = 0x00000001;
5453pub const LR_COLOR: UINT = 0x00000002;
5454pub const LR_COPYRETURNORG: UINT = 0x00000004;
5455pub const LR_COPYDELETEORG: UINT = 0x00000008;
5456pub const LR_LOADFROMFILE: UINT = 0x00000010;
5457pub const LR_LOADTRANSPARENT: UINT = 0x00000020;
5458pub const LR_DEFAULTSIZE: UINT = 0x00000040;
5459pub const LR_VGACOLOR: UINT = 0x00000080;
5460pub const LR_LOADMAP3DCOLORS: UINT = 0x00001000;
5461pub const LR_CREATEDIBSECTION: UINT = 0x00002000;
5462pub const LR_COPYFROMRESOURCE: UINT = 0x00004000;
5463pub const LR_SHARED: UINT = 0x00008000;
5464extern "system" {
5465    pub fn LoadImageA(
5466        hInst: HINSTANCE,
5467        name: LPCSTR,
5468        type_: UINT,
5469        cx: c_int,
5470        cy: c_int,
5471        fuLoad: UINT,
5472    ) -> HANDLE;
5473    pub fn LoadImageW(
5474        hInst: HINSTANCE,
5475        name: LPCWSTR,
5476        type_: UINT,
5477        cx: c_int,
5478        cy: c_int,
5479        fuLoad: UINT,
5480    ) -> HANDLE;
5481    pub fn CopyImage(
5482        h: HANDLE,
5483        type_: UINT,
5484        cx: c_int,
5485        cy: c_int,
5486        flags: UINT,
5487    ) -> HANDLE;
5488}
5489//10592
5490extern "system" {
5491    pub fn DrawIconEx(
5492        hdc: HDC,
5493        xLeft: c_int,
5494        yTop: c_int,
5495        hIcon: HICON,
5496        cxWidth: c_int,
5497        cyWidth: c_int,
5498        istepIfAniCur: UINT,
5499        hbrFlickerFreeDraw: HBRUSH,
5500        diFlags: UINT,
5501    ) -> BOOL;
5502    pub fn CreateIconIndirect(
5503        piconinfo: PICONINFO,
5504    ) -> HICON;
5505    pub fn CopyIcon(
5506        hIcon: HICON,
5507    ) -> HICON;
5508    pub fn GetIconInfo(
5509        hIcon: HICON,
5510        piconinfo: PICONINFO,
5511    ) -> BOOL;
5512}
5513//10781
5514pub const IDI_APPLICATION: LPCWSTR = 32512 as LPCWSTR;
5515pub const IDI_HAND: LPCWSTR = 32513 as LPCWSTR;
5516pub const IDI_QUESTION: LPCWSTR = 32514 as LPCWSTR;
5517pub const IDI_EXCLAMATION: LPCWSTR = 32515 as LPCWSTR;
5518pub const IDI_ASTERISK: LPCWSTR = 32516 as LPCWSTR;
5519pub const IDI_WINLOGO: LPCWSTR = 32517 as LPCWSTR;
5520pub const IDI_SHIELD: LPCWSTR = 32518 as LPCWSTR;
5521pub const IDI_WARNING: LPCWSTR = IDI_EXCLAMATION;
5522pub const IDI_ERROR: LPCWSTR = IDI_HAND;
5523pub const IDI_INFORMATION: LPCWSTR = IDI_ASTERISK;
5524//10853
5525pub const IDOK: c_int = 1;
5526pub const IDCANCEL: c_int = 2;
5527pub const IDABORT: c_int = 3;
5528pub const IDRETRY: c_int = 4;
5529pub const IDIGNORE: c_int = 5;
5530pub const IDYES: c_int = 6;
5531pub const IDNO: c_int = 7;
5532pub const IDCLOSE: c_int = 8;
5533pub const IDHELP: c_int = 9;
5534pub const IDTRYAGAIN: c_int = 10;
5535pub const IDCONTINUE: c_int = 11;
5536pub const IDTIMEOUT: c_int = 32000;
5537pub const ES_LEFT: DWORD = 0x0000;
5538pub const ES_CENTER: DWORD = 0x0001;
5539pub const ES_RIGHT: DWORD = 0x0002;
5540pub const ES_MULTILINE: DWORD = 0x0004;
5541pub const ES_UPPERCASE: DWORD = 0x0008;
5542pub const ES_LOWERCASE: DWORD = 0x0010;
5543pub const ES_PASSWORD: DWORD = 0x0020;
5544pub const ES_AUTOVSCROLL: DWORD = 0x0040;
5545pub const ES_AUTOHSCROLL: DWORD = 0x0080;
5546pub const ES_NOHIDESEL: DWORD = 0x0100;
5547pub const ES_OEMCONVERT: DWORD = 0x0400;
5548pub const ES_READONLY: DWORD = 0x0800;
5549pub const ES_WANTRETURN: DWORD = 0x1000;
5550pub const ES_NUMBER: DWORD = 0x2000;
5551pub const EN_SETFOCUS: WORD = 0x0100;
5552pub const EN_KILLFOCUS: WORD = 0x0200;
5553pub const EN_CHANGE: WORD = 0x0300;
5554pub const EN_UPDATE: WORD = 0x0400;
5555pub const EN_ERRSPACE: WORD = 0x0500;
5556pub const EN_MAXTEXT: WORD = 0x0501;
5557pub const EN_HSCROLL: WORD = 0x0601;
5558pub const EN_VSCROLL: WORD = 0x0602;
5559pub const EN_ALIGN_LTR_EC: WORD = 0x0700;
5560pub const EN_ALIGN_RTL_EC: WORD = 0x0701;
5561pub const EC_LEFTMARGIN: WORD = 0x0001;
5562pub const EC_RIGHTMARGIN: WORD = 0x0002;
5563pub const EC_USEFONTINFO: WORD = 0xffff;
5564pub const EMSIS_COMPOSITIONSTRING: WORD = 0x0001;
5565pub const EIMES_GETCOMPSTRATONCE: WORD = 0x0001;
5566pub const EIMES_CANCELCOMPSTRINFOCUS: WORD = 0x0002;
5567pub const EIMES_COMPLETECOMPSTRKILLFOCUS: WORD = 0x0004;
5568pub const EM_GETSEL: WORD = 0x00B0;
5569pub const EM_SETSEL: WORD = 0x00B1;
5570pub const EM_GETRECT: WORD = 0x00B2;
5571pub const EM_SETRECT: WORD = 0x00B3;
5572pub const EM_SETRECTNP: WORD = 0x00B4;
5573pub const EM_SCROLL: WORD = 0x00B5;
5574pub const EM_LINESCROLL: WORD = 0x00B6;
5575pub const EM_SCROLLCARET: WORD = 0x00B7;
5576pub const EM_GETMODIFY: WORD = 0x00B8;
5577pub const EM_SETMODIFY: WORD = 0x00B9;
5578pub const EM_GETLINECOUNT: WORD = 0x00BA;
5579pub const EM_LINEINDEX: WORD = 0x00BB;
5580pub const EM_SETHANDLE: WORD = 0x00BC;
5581pub const EM_GETHANDLE: WORD = 0x00BD;
5582pub const EM_GETTHUMB: WORD = 0x00BE;
5583pub const EM_LINELENGTH: WORD = 0x00C1;
5584pub const EM_REPLACESEL: WORD = 0x00C2;
5585pub const EM_GETLINE: WORD = 0x00C4;
5586pub const EM_LIMITTEXT: WORD = 0x00C5;
5587pub const EM_CANUNDO: WORD = 0x00C6;
5588pub const EM_UNDO: WORD = 0x00C7;
5589pub const EM_FMTLINES: WORD = 0x00C8;
5590pub const EM_LINEFROMCHAR: WORD = 0x00C9;
5591pub const EM_SETTABSTOPS: WORD = 0x00CB;
5592pub const EM_SETPASSWORDCHAR: WORD = 0x00CC;
5593pub const EM_EMPTYUNDOBUFFER: WORD = 0x00CD;
5594pub const EM_GETFIRSTVISIBLELINE: WORD = 0x00CE;
5595pub const EM_SETREADONLY: WORD = 0x00CF;
5596pub const EM_SETWORDBREAKPROC: WORD = 0x00D0;
5597pub const EM_GETWORDBREAKPROC: WORD = 0x00D1;
5598pub const EM_GETPASSWORDCHAR: WORD = 0x00D2;
5599pub const EM_SETMARGINS: WORD = 0x00D3;
5600pub const EM_GETMARGINS: WORD = 0x00D4;
5601pub const EM_SETLIMITTEXT: WORD = EM_LIMITTEXT;
5602pub const EM_GETLIMITTEXT: WORD = 0x00D5;
5603pub const EM_POSFROMCHAR: WORD = 0x00D6;
5604pub const EM_CHARFROMPOS: WORD = 0x00D7;
5605pub const EM_SETIMESTATUS: WORD = 0x00D8;
5606pub const EM_GETIMESTATUS: WORD = 0x00D9;
5607pub const WB_LEFT: WORD = 0;
5608pub const WB_RIGHT: WORD = 1;
5609pub const WB_ISDELIMITER: WORD = 2;
5610pub const BN_CLICKED: WORD = 0;
5611pub const BN_PAINT: WORD = 1;
5612pub const BN_HILITE: WORD = 2;
5613pub const BN_UNHILITE: WORD = 3;
5614pub const BN_DISABLE: WORD = 4;
5615pub const BN_DOUBLECLICKED: WORD = 5;
5616pub const BN_PUSHED: WORD = BN_HILITE;
5617pub const BN_UNPUSHED: WORD = BN_UNHILITE;
5618pub const BN_DBLCLK: WORD = BN_DOUBLECLICKED;
5619pub const BN_SETFOCUS: WORD = 6;
5620pub const BN_KILLFOCUS: WORD = 7;
5621pub const BS_PUSHBUTTON: DWORD = 0x00000000;
5622pub const BS_DEFPUSHBUTTON: DWORD = 0x00000001;
5623pub const BS_CHECKBOX: DWORD = 0x00000002;
5624pub const BS_AUTOCHECKBOX: DWORD = 0x00000003;
5625pub const BS_RADIOBUTTON: DWORD = 0x00000004;
5626pub const BS_3STATE: DWORD = 0x00000005;
5627pub const BS_AUTO3STATE: DWORD = 0x00000006;
5628pub const BS_GROUPBOX: DWORD = 0x00000007;
5629pub const BS_USERBUTTON: DWORD = 0x00000008;
5630pub const BS_AUTORADIOBUTTON: DWORD = 0x00000009;
5631pub const BS_PUSHBOX: DWORD = 0x0000000A;
5632pub const BS_OWNERDRAW: DWORD = 0x0000000B;
5633pub const BS_TYPEMASK: DWORD = 0x0000000F;
5634pub const BS_LEFTTEXT: DWORD = 0x00000020;
5635pub const BS_TEXT: DWORD = 0x00000000;
5636pub const BS_ICON: DWORD = 0x00000040;
5637pub const BS_BITMAP: DWORD = 0x00000080;
5638pub const BS_LEFT: DWORD = 0x00000100;
5639pub const BS_RIGHT: DWORD = 0x00000200;
5640pub const BS_CENTER: DWORD = 0x00000300;
5641pub const BS_TOP: DWORD = 0x00000400;
5642pub const BS_BOTTOM: DWORD = 0x00000800;
5643pub const BS_VCENTER: DWORD = 0x00000C00;
5644pub const BS_PUSHLIKE: DWORD = 0x00001000;
5645pub const BS_MULTILINE: DWORD = 0x00002000;
5646pub const BS_NOTIFY: DWORD = 0x00004000;
5647pub const BS_FLAT: DWORD = 0x00008000;
5648pub const BS_RIGHTBUTTON: DWORD = BS_LEFTTEXT;
5649pub const BM_GETCHECK: UINT = 0x00F0;
5650pub const BM_SETCHECK: UINT = 0x00F1;
5651pub const BM_GETSTATE: UINT = 0x00F2;
5652pub const BM_SETSTATE: UINT = 0x00F3;
5653pub const BM_SETSTYLE: UINT = 0x00F4;
5654pub const BM_CLICK: UINT = 0x00F5;
5655pub const BM_GETIMAGE: UINT = 0x00F6;
5656pub const BM_SETIMAGE: UINT = 0x00F7;
5657pub const BM_SETDONTCLICK: UINT = 0x00F8;
5658pub const BST_UNCHECKED: WPARAM = 0x0000;
5659pub const BST_CHECKED: WPARAM = 0x0001;
5660pub const BST_INDETERMINATE: WPARAM = 0x0002;
5661pub const BST_PUSHED: LRESULT = 0x0004;
5662pub const BST_FOCUS: LRESULT = 0x0008;
5663pub const SS_LEFT: DWORD = 0x00000000;
5664pub const SS_CENTER: DWORD = 0x00000001;
5665pub const SS_RIGHT: DWORD = 0x00000002;
5666pub const SS_ICON: DWORD = 0x00000003;
5667pub const SS_BLACKRECT: DWORD = 0x00000004;
5668pub const SS_GRAYRECT: DWORD = 0x00000005;
5669pub const SS_WHITERECT: DWORD = 0x00000006;
5670pub const SS_BLACKFRAME: DWORD = 0x00000007;
5671pub const SS_GRAYFRAME: DWORD = 0x00000008;
5672pub const SS_WHITEFRAME: DWORD = 0x00000009;
5673pub const SS_USERITEM: DWORD = 0x0000000A;
5674pub const SS_SIMPLE: DWORD = 0x0000000B;
5675pub const SS_LEFTNOWORDWRAP: DWORD = 0x0000000C;
5676pub const SS_OWNERDRAW: DWORD = 0x0000000D;
5677pub const SS_BITMAP: DWORD = 0x0000000E;
5678pub const SS_ENHMETAFILE: DWORD = 0x0000000F;
5679pub const SS_ETCHEDHORZ: DWORD = 0x00000010;
5680pub const SS_ETCHEDVERT: DWORD = 0x00000011;
5681pub const SS_ETCHEDFRAME: DWORD = 0x00000012;
5682pub const SS_TYPEMASK: DWORD = 0x0000001F;
5683pub const SS_REALSIZECONTROL: DWORD = 0x00000040;
5684pub const SS_NOPREFIX: DWORD = 0x00000080;
5685pub const SS_NOTIFY: DWORD = 0x00000100;
5686pub const SS_CENTERIMAGE: DWORD = 0x00000200;
5687pub const SS_RIGHTJUST: DWORD = 0x00000400;
5688pub const SS_REALSIZEIMAGE: DWORD = 0x00000800;
5689pub const SS_SUNKEN: DWORD = 0x00001000;
5690pub const SS_EDITCONTROL: DWORD = 0x00002000;
5691pub const SS_ENDELLIPSIS: DWORD = 0x00004000;
5692pub const SS_PATHELLIPSIS: DWORD = 0x00008000;
5693pub const SS_WORDELLIPSIS: DWORD = 0x0000C000;
5694pub const SS_ELLIPSISMASK: DWORD = 0x0000C000;
5695pub const STM_SETICON: UINT = 0x0170;
5696pub const STM_GETICON: UINT = 0x0171;
5697pub const STM_SETIMAGE: UINT = 0x0172;
5698pub const STM_GETIMAGE: UINT = 0x0173;
5699pub const STN_CLICKED: WORD = 0;
5700pub const STN_DBLCLK: WORD = 1;
5701pub const STN_ENABLE: WORD = 2;
5702pub const STN_DISABLE: WORD = 3;
5703pub const STM_MSGMAX: WORD = 0x0174;
5704//11194
5705extern "system" {
5706    pub fn IsDialogMessageA(
5707        hDlg: HWND,
5708        lpMsg: LPMSG,
5709    ) -> BOOL;
5710    pub fn IsDialogMessageW(
5711        hDlg: HWND,
5712        lpMsg: LPMSG,
5713    ) -> BOOL;
5714    pub fn MapDialogRect(
5715        hDlg: HWND,
5716        lpRect: LPRECT,
5717    ) -> BOOL;
5718    pub fn DlgDirListA(
5719        hDlg: HWND,
5720        lpPathSpec: LPSTR,
5721        nIDListBox: c_int,
5722        nIDStaticPath: c_int,
5723        uFileType: UINT,
5724    ) -> c_int;
5725    pub fn DlgDirListW(
5726        hDlg: HWND,
5727        lpPathSpec: LPWSTR,
5728        nIDListBox: c_int,
5729        nIDStaticPath: c_int,
5730        uFileType: UINT,
5731    ) -> c_int;
5732}
5733//11265
5734extern "system" {
5735    pub fn DlgDirSelectExA(
5736        hwndDlg: HWND,
5737        lpString: LPSTR,
5738        chCount: c_int,
5739        idListBox: c_int,
5740    ) -> BOOL;
5741    pub fn DlgDirSelectExW(
5742        hwndDlg: HWND,
5743        lpString: LPWSTR,
5744        chCount: c_int,
5745        idListBox: c_int,
5746    ) -> BOOL;
5747    pub fn DlgDirListComboBoxA(
5748        hDlg: HWND,
5749        lpPathSpec: LPSTR,
5750        nIDComboBox: c_int,
5751        nIDStaticPath: c_int,
5752        uFiletype: UINT,
5753    ) -> c_int;
5754    pub fn DlgDirListComboBoxW(
5755        hDlg: HWND,
5756        lpPathSpec: LPWSTR,
5757        nIDComboBox: c_int,
5758        nIDStaticPath: c_int,
5759        uFiletype: UINT,
5760    ) -> c_int;
5761    pub fn DlgDirSelectComboBoxExA(
5762        hwndDlg: HWND,
5763        lpString: LPSTR,
5764        cchOut: c_int,
5765        idComboBox: c_int,
5766    ) -> BOOL;
5767    pub fn DlgDirSelectComboBoxExW(
5768        hwndDlg: HWND,
5769        lpString: LPWSTR,
5770        cchOut: c_int,
5771        idComboBox: c_int,
5772    ) -> BOOL;
5773}
5774pub const DS_ABSALIGN: DWORD = 0x01;
5775pub const DS_SYSMODAL: DWORD = 0x02;
5776pub const DS_LOCALEDIT: DWORD = 0x20;
5777pub const DS_SETFONT: DWORD = 0x40;
5778pub const DS_MODALFRAME: DWORD = 0x80;
5779pub const DS_NOIDLEMSG: DWORD = 0x100;
5780pub const DS_SETFOREGROUND: DWORD = 0x200;
5781pub const DS_3DLOOK: DWORD = 0x0004;
5782pub const DS_FIXEDSYS: DWORD = 0x0008;
5783pub const DS_NOFAILCREATE: DWORD = 0x0010;
5784pub const DS_CONTROL: DWORD = 0x0400;
5785pub const DS_CENTER: DWORD = 0x0800;
5786pub const DS_CENTERMOUSE: DWORD = 0x1000;
5787pub const DS_CONTEXTHELP: DWORD = 0x2000;
5788pub const DS_SHELLFONT: DWORD = DS_SETFONT | DS_FIXEDSYS;
5789pub const DS_USEPIXELS: DWORD = 0x8000;
5790pub const DM_GETDEFID: UINT = WM_USER + 0;
5791pub const DM_SETDEFID: UINT = WM_USER + 1;
5792pub const DM_REPOSITION: UINT = WM_USER + 2;
5793pub const DC_HASDEFID: WORD = 0x534B;
5794pub const DLGC_WANTARROWS: LRESULT = 0x0001;
5795pub const DLGC_WANTTAB: LRESULT = 0x0002;
5796pub const DLGC_WANTALLKEYS: LRESULT = 0x0004;
5797pub const DLGC_WANTMESSAGE: LRESULT = 0x0004;
5798pub const DLGC_HASSETSEL: LRESULT = 0x0008;
5799pub const DLGC_DEFPUSHBUTTON: LRESULT = 0x0010;
5800pub const DLGC_UNDEFPUSHBUTTON: LRESULT = 0x0020;
5801pub const DLGC_RADIOBUTTON: LRESULT = 0x0040;
5802pub const DLGC_WANTCHARS: LRESULT = 0x0080;
5803pub const DLGC_STATIC: LRESULT = 0x0100;
5804pub const DLGC_BUTTON: LRESULT = 0x2000;
5805pub const LB_OKAY: LRESULT = 0;
5806pub const LB_ERR: LRESULT = -1;
5807pub const LB_ERRSPACE: LRESULT = -2;
5808pub const LBN_ERRSPACE: WORD = -2i16 as u16;
5809pub const LBN_SELCHANGE: WORD = 1;
5810pub const LBN_DBLCLK: WORD = 2;
5811pub const LBN_SELCANCEL: WORD = 3;
5812pub const LBN_SETFOCUS: WORD = 4;
5813pub const LBN_KILLFOCUS: WORD = 5;
5814pub const LB_ADDSTRING: UINT = 0x0180;
5815pub const LB_INSERTSTRING: UINT = 0x0181;
5816pub const LB_DELETESTRING: UINT = 0x0182;
5817pub const LB_SELITEMRANGEEX: UINT = 0x0183;
5818pub const LB_RESETCONTENT: UINT = 0x0184;
5819pub const LB_SETSEL: UINT = 0x0185;
5820pub const LB_SETCURSEL: UINT = 0x0186;
5821pub const LB_GETSEL: UINT = 0x0187;
5822pub const LB_GETCURSEL: UINT = 0x0188;
5823pub const LB_GETTEXT: UINT = 0x0189;
5824pub const LB_GETTEXTLEN: UINT = 0x018A;
5825pub const LB_GETCOUNT: UINT = 0x018B;
5826pub const LB_SELECTSTRING: UINT = 0x018C;
5827pub const LB_DIR: UINT = 0x018D;
5828pub const LB_GETTOPINDEX: UINT = 0x018E;
5829pub const LB_FINDSTRING: UINT = 0x018F;
5830pub const LB_GETSELCOUNT: UINT = 0x0190;
5831pub const LB_GETSELITEMS: UINT = 0x0191;
5832pub const LB_SETTABSTOPS: UINT = 0x0192;
5833pub const LB_GETHORIZONTALEXTENT: UINT = 0x0193;
5834pub const LB_SETHORIZONTALEXTENT: UINT = 0x0194;
5835pub const LB_SETCOLUMNWIDTH: UINT = 0x0195;
5836pub const LB_ADDFILE: UINT = 0x0196;
5837pub const LB_SETTOPINDEX: UINT = 0x0197;
5838pub const LB_GETITEMRECT: UINT = 0x0198;
5839pub const LB_GETITEMDATA: UINT = 0x0199;
5840pub const LB_SETITEMDATA: UINT = 0x019A;
5841pub const LB_SELITEMRANGE: UINT = 0x019B;
5842pub const LB_SETANCHORINDEX: UINT = 0x019C;
5843pub const LB_GETANCHORINDEX: UINT = 0x019D;
5844pub const LB_SETCARETINDEX: UINT = 0x019E;
5845pub const LB_GETCARETINDEX: UINT = 0x019F;
5846pub const LB_SETITEMHEIGHT: UINT = 0x01A0;
5847pub const LB_GETITEMHEIGHT: UINT = 0x01A1;
5848pub const LB_FINDSTRINGEXACT: UINT = 0x01A2;
5849pub const LB_SETLOCALE: UINT = 0x01A5;
5850pub const LB_GETLOCALE: UINT = 0x01A6;
5851pub const LB_SETCOUNT: UINT = 0x01A7;
5852pub const LB_INITSTORAGE: UINT = 0x01A8;
5853pub const LB_ITEMFROMPOINT: UINT = 0x01A9;
5854pub const LB_MULTIPLEADDSTRING: UINT = 0x01B1;
5855pub const LB_GETLISTBOXINFO: UINT = 0x01B2;
5856pub const LB_MSGMAX: UINT = 0x01B3;
5857pub const LBS_NOTIFY: DWORD = 0x0001;
5858pub const LBS_SORT: DWORD = 0x0002;
5859pub const LBS_NOREDRAW: DWORD = 0x0004;
5860pub const LBS_MULTIPLESEL: DWORD = 0x0008;
5861pub const LBS_OWNERDRAWFIXED: DWORD = 0x0010;
5862pub const LBS_OWNERDRAWVARIABLE: DWORD = 0x0020;
5863pub const LBS_HASSTRINGS: DWORD = 0x0040;
5864pub const LBS_USETABSTOPS: DWORD = 0x0080;
5865pub const LBS_NOINTEGRALHEIGHT: DWORD = 0x0100;
5866pub const LBS_MULTICOLUMN: DWORD = 0x0200;
5867pub const LBS_WANTKEYBOARDINPUT: DWORD = 0x0400;
5868pub const LBS_EXTENDEDSEL: DWORD = 0x0800;
5869pub const LBS_DISABLENOSCROLL: DWORD = 0x1000;
5870pub const LBS_NODATA: DWORD = 0x2000;
5871pub const LBS_NOSEL: DWORD = 0x4000;
5872pub const LBS_COMBOBOX: DWORD = 0x8000;
5873pub const LBS_STANDARD: DWORD = LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER;
5874pub const CB_OKAY: LRESULT = 0;
5875pub const CB_ERR: LRESULT = -1;
5876pub const CB_ERRSPACE: LRESULT = -2;
5877pub const CBN_ERRSPACE: WORD = -1i16 as u16;
5878pub const CBN_SELCHANGE: WORD = 1;
5879pub const CBN_DBLCLK: WORD = 2;
5880pub const CBN_SETFOCUS: WORD = 3;
5881pub const CBN_KILLFOCUS: WORD = 4;
5882pub const CBN_EDITCHANGE: WORD = 5;
5883pub const CBN_EDITUPDATE: WORD = 6;
5884pub const CBN_DROPDOWN: WORD = 7;
5885pub const CBN_CLOSEUP: WORD = 8;
5886pub const CBN_SELENDOK: WORD = 9;
5887pub const CBN_SELENDCANCEL: WORD = 10;
5888pub const CBS_SIMPLE: DWORD = 0x0001;
5889pub const CBS_DROPDOWN: DWORD = 0x0002;
5890pub const CBS_DROPDOWNLIST: DWORD = 0x0003;
5891pub const CBS_OWNERDRAWFIXED: DWORD = 0x0010;
5892pub const CBS_OWNERDRAWVARIABLE: DWORD = 0x0020;
5893pub const CBS_AUTOHSCROLL: DWORD = 0x0040;
5894pub const CBS_OEMCONVERT: DWORD = 0x0080;
5895pub const CBS_SORT: DWORD = 0x0100;
5896pub const CBS_HASSTRINGS: DWORD = 0x0200;
5897pub const CBS_NOINTEGRALHEIGHT: DWORD = 0x0400;
5898pub const CBS_DISABLENOSCROLL: DWORD = 0x0800;
5899pub const CBS_UPPERCASE: DWORD = 0x2000;
5900pub const CBS_LOWERCASE: DWORD = 0x4000;
5901//11571
5902pub const CB_GETEDITSEL: UINT = 0x0140;
5903pub const CB_LIMITTEXT: UINT = 0x0141;
5904pub const CB_SETEDITSEL: UINT = 0x0142;
5905pub const CB_ADDSTRING: UINT = 0x0143;
5906pub const CB_DELETESTRING: UINT = 0x0144;
5907pub const CB_DIR: UINT = 0x0145;
5908pub const CB_GETCOUNT: UINT = 0x0146;
5909pub const CB_GETCURSEL: UINT = 0x0147;
5910pub const CB_GETLBTEXT: UINT = 0x0148;
5911pub const CB_GETLBTEXTLEN: UINT = 0x0149;
5912pub const CB_INSERTSTRING: UINT = 0x014A;
5913pub const CB_RESETCONTENT: UINT = 0x014B;
5914pub const CB_FINDSTRING: UINT = 0x014C;
5915pub const CB_SELECTSTRING: UINT = 0x014D;
5916pub const CB_SETCURSEL: UINT = 0x014E;
5917pub const CB_SHOWDROPDOWN: UINT = 0x014F;
5918pub const CB_GETITEMDATA: UINT = 0x0150;
5919pub const CB_SETITEMDATA: UINT = 0x0151;
5920pub const CB_GETDROPPEDCONTROLRECT: UINT = 0x0152;
5921pub const CB_SETITEMHEIGHT: UINT = 0x0153;
5922pub const CB_GETITEMHEIGHT: UINT = 0x0154;
5923pub const CB_SETEXTENDEDUI: UINT = 0x0155;
5924pub const CB_GETEXTENDEDUI: UINT = 0x0156;
5925pub const CB_GETDROPPEDSTATE: UINT = 0x0157;
5926pub const CB_FINDSTRINGEXACT: UINT = 0x0158;
5927pub const CB_SETLOCALE: UINT = 0x0159;
5928pub const CB_GETLOCALE: UINT = 0x015A;
5929pub const CB_GETTOPINDEX: UINT = 0x015b;
5930pub const CB_SETTOPINDEX: UINT = 0x015c;
5931pub const CB_GETHORIZONTALEXTENT: UINT = 0x015d;
5932pub const CB_SETHORIZONTALEXTENT: UINT = 0x015e;
5933pub const CB_GETDROPPEDWIDTH: UINT = 0x015f;
5934pub const CB_SETDROPPEDWIDTH: UINT = 0x0160;
5935pub const CB_INITSTORAGE: UINT = 0x0161;
5936pub const CB_MULTIPLEADDSTRING: UINT = 0x0163;
5937pub const CB_GETCOMBOBOXINFO: UINT = 0x0164;
5938pub const CB_MSGMAX: UINT = 0x0165;
5939pub const SBS_HORZ: DWORD = 0x0000;
5940pub const SBS_VERT: DWORD = 0x0001;
5941pub const SBS_TOPALIGN: DWORD = 0x0002;
5942pub const SBS_LEFTALIGN: DWORD = 0x0002;
5943pub const SBS_BOTTOMALIGN: DWORD = 0x0004;
5944pub const SBS_RIGHTALIGN: DWORD = 0x0004;
5945pub const SBS_SIZEBOXTOPLEFTALIGN: DWORD = 0x0002;
5946pub const SBS_SIZEBOXBOTTOMRIGHTALIGN: DWORD = 0x0004;
5947pub const SBS_SIZEBOX: DWORD = 0x0008;
5948pub const SBS_SIZEGRIP: DWORD = 0x0010;
5949pub const SBM_SETPOS: UINT = 0x00E0;
5950pub const SBM_GETPOS: UINT = 0x00E1;
5951pub const SBM_SETRANGE: UINT = 0x00E2;
5952pub const SBM_SETRANGEREDRAW: UINT = 0x00E6;
5953pub const SBM_GETRANGE: UINT = 0x00E3;
5954pub const SBM_ENABLE_ARROWS: UINT = 0x00E4;
5955pub const SBM_SETSCROLLINFO: UINT = 0x00E9;
5956pub const SBM_GETSCROLLINFO: UINT = 0x00EA;
5957pub const SBM_GETSCROLLBARINFO: UINT = 0x00EB;
5958pub const SIF_RANGE: UINT = 0x0001;
5959pub const SIF_PAGE: UINT = 0x0002;
5960pub const SIF_POS: UINT = 0x0004;
5961pub const SIF_DISABLENOSCROLL: UINT = 0x0008;
5962pub const SIF_TRACKPOS: UINT = 0x0010;
5963pub const SIF_ALL: UINT = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
5964STRUCT!{struct SCROLLINFO {
5965    cbSize: UINT,
5966    fMask: UINT,
5967    nMin: c_int,
5968    nMax: c_int,
5969    nPage: UINT,
5970    nPos: c_int,
5971    nTrackPos: c_int,
5972}}
5973pub type LPSCROLLINFO = *mut SCROLLINFO;
5974pub type LPCSCROLLINFO = *const SCROLLINFO;
5975extern "system" {
5976    pub fn SetScrollInfo(
5977        hwnd: HWND,
5978        nBar: c_int,
5979        lpsi: *const SCROLLINFO,
5980        redraw: BOOL,
5981    ) -> c_int;
5982    pub fn GetScrollInfo(
5983        hwnd: HWND,
5984        nBar: c_int,
5985        lpsi: *mut SCROLLINFO,
5986    ) -> BOOL;
5987}
5988pub const MDITILE_VERTICAL: UINT = 0x0000;
5989pub const MDITILE_HORIZONTAL: UINT = 0x0001;
5990pub const MDITILE_SKIPDISABLED: UINT = 0x0002;
5991pub const MDITILE_ZORDER: UINT = 0x0004;
5992//11776
5993extern "system" {
5994    pub fn DefFrameProcA(
5995        hwnd: HWND,
5996        hwndMDIClient: HWND,
5997        uMsg: UINT,
5998        wParam: WPARAM,
5999        lParam: LPARAM,
6000    ) -> LRESULT;
6001    pub fn DefFrameProcW(
6002        hwnd: HWND,
6003        hwndMDIClient: HWND,
6004        uMsg: UINT,
6005        wParam: WPARAM,
6006        lParam: LPARAM,
6007    ) -> LRESULT;
6008    pub fn DefMDIChildProcA(
6009        hwnd: HWND,
6010        uMsg: UINT,
6011        wParam: WPARAM,
6012        lParam: LPARAM,
6013    ) -> LRESULT;
6014    pub fn DefMDIChildProcW(
6015        hwnd: HWND,
6016        uMsg: UINT,
6017        wParam: WPARAM,
6018        lParam: LPARAM,
6019    ) -> LRESULT;
6020    pub fn ArrangeIconicWindows(
6021        hWnd: HWND,
6022    ) -> UINT;
6023    pub fn CreateMDIWindowA(
6024        lpClassName: LPCSTR,
6025        lpWindowName: LPCSTR,
6026        dwStyle: DWORD,
6027        X: c_int,
6028        Y: c_int,
6029        nWidth: c_int,
6030        nHeight: c_int,
6031        hWndParent: HWND,
6032        hInstance: HINSTANCE,
6033        lParam: LPARAM,
6034    ) -> HWND;
6035    pub fn CreateMDIWindowW(
6036        lpClassName: LPCWSTR,
6037        lpWindowName: LPCWSTR,
6038        dwStyle: DWORD,
6039        X: c_int,
6040        Y: c_int,
6041        nWidth: c_int,
6042        nHeight: c_int,
6043        hWndParent: HWND,
6044        hInstance: HINSTANCE,
6045        lParam: LPARAM,
6046    ) -> HWND;
6047    pub fn CascadeWindows(
6048        hwndParent: HWND,
6049        wHow: UINT,
6050        lpRect: *const RECT,
6051        cKids: UINT,
6052        lpKids: *const HWND,
6053    ) -> WORD;
6054}
6055//12016
6056extern "system" {
6057    pub fn WinHelpA(
6058        hWndMain: HWND,
6059        lpszHelp: LPCSTR,
6060        uCommand: UINT,
6061        dwData: ULONG_PTR,
6062    ) -> BOOL;
6063    pub fn WinHelpW(
6064        hWndMain: HWND,
6065        lpszHelp: LPCWSTR,
6066        uCommand: UINT,
6067        dwData: ULONG_PTR,
6068    ) -> BOOL;
6069}
6070//12083
6071pub const SPI_GETBEEP: UINT = 0x0001;
6072pub const SPI_SETBEEP: UINT = 0x0002;
6073pub const SPI_GETMOUSE: UINT = 0x0003;
6074pub const SPI_SETMOUSE: UINT = 0x0004;
6075pub const SPI_GETBORDER: UINT = 0x0005;
6076pub const SPI_SETBORDER: UINT = 0x0006;
6077pub const SPI_GETKEYBOARDSPEED: UINT = 0x000A;
6078pub const SPI_SETKEYBOARDSPEED: UINT = 0x000B;
6079pub const SPI_LANGDRIVER: UINT = 0x000C;
6080pub const SPI_ICONHORIZONTALSPACING: UINT = 0x000D;
6081pub const SPI_GETSCREENSAVETIMEOUT: UINT = 0x000E;
6082pub const SPI_SETSCREENSAVETIMEOUT: UINT = 0x000F;
6083pub const SPI_GETSCREENSAVEACTIVE: UINT = 0x0010;
6084pub const SPI_SETSCREENSAVEACTIVE: UINT = 0x0011;
6085pub const SPI_GETGRIDGRANULARITY: UINT = 0x0012;
6086pub const SPI_SETGRIDGRANULARITY: UINT = 0x0013;
6087pub const SPI_SETDESKWALLPAPER: UINT = 0x0014;
6088pub const SPI_SETDESKPATTERN: UINT = 0x0015;
6089pub const SPI_GETKEYBOARDDELAY: UINT = 0x0016;
6090pub const SPI_SETKEYBOARDDELAY: UINT = 0x0017;
6091pub const SPI_ICONVERTICALSPACING: UINT = 0x0018;
6092pub const SPI_GETICONTITLEWRAP: UINT = 0x0019;
6093pub const SPI_SETICONTITLEWRAP: UINT = 0x001A;
6094pub const SPI_GETMENUDROPALIGNMENT: UINT = 0x001B;
6095pub const SPI_SETMENUDROPALIGNMENT: UINT = 0x001C;
6096pub const SPI_SETDOUBLECLKWIDTH: UINT = 0x001D;
6097pub const SPI_SETDOUBLECLKHEIGHT: UINT = 0x001E;
6098pub const SPI_GETICONTITLELOGFONT: UINT = 0x001F;
6099pub const SPI_SETDOUBLECLICKTIME: UINT = 0x0020;
6100pub const SPI_SETMOUSEBUTTONSWAP: UINT = 0x0021;
6101pub const SPI_SETICONTITLELOGFONT: UINT = 0x0022;
6102pub const SPI_GETFASTTASKSWITCH: UINT = 0x0023;
6103pub const SPI_SETFASTTASKSWITCH: UINT = 0x0024;
6104pub const SPI_SETDRAGFULLWINDOWS: UINT = 0x0025;
6105pub const SPI_GETDRAGFULLWINDOWS: UINT = 0x0026;
6106pub const SPI_GETNONCLIENTMETRICS: UINT = 0x0029;
6107pub const SPI_SETNONCLIENTMETRICS: UINT = 0x002A;
6108pub const SPI_GETMINIMIZEDMETRICS: UINT = 0x002B;
6109pub const SPI_SETMINIMIZEDMETRICS: UINT = 0x002C;
6110pub const SPI_GETICONMETRICS: UINT = 0x002D;
6111pub const SPI_SETICONMETRICS: UINT = 0x002E;
6112pub const SPI_SETWORKAREA: UINT = 0x002F;
6113pub const SPI_GETWORKAREA: UINT = 0x0030;
6114pub const SPI_SETPENWINDOWS: UINT = 0x0031;
6115pub const SPI_GETHIGHCONTRAST: UINT = 0x0042;
6116pub const SPI_SETHIGHCONTRAST: UINT = 0x0043;
6117pub const SPI_GETKEYBOARDPREF: UINT = 0x0044;
6118pub const SPI_SETKEYBOARDPREF: UINT = 0x0045;
6119pub const SPI_GETSCREENREADER: UINT = 0x0046;
6120pub const SPI_SETSCREENREADER: UINT = 0x0047;
6121pub const SPI_GETANIMATION: UINT = 0x0048;
6122pub const SPI_SETANIMATION: UINT = 0x0049;
6123pub const SPI_GETFONTSMOOTHING: UINT = 0x004A;
6124pub const SPI_SETFONTSMOOTHING: UINT = 0x004B;
6125pub const SPI_SETDRAGWIDTH: UINT = 0x004C;
6126pub const SPI_SETDRAGHEIGHT: UINT = 0x004D;
6127pub const SPI_SETHANDHELD: UINT = 0x004E;
6128pub const SPI_GETLOWPOWERTIMEOUT: UINT = 0x004F;
6129pub const SPI_GETPOWEROFFTIMEOUT: UINT = 0x0050;
6130pub const SPI_SETLOWPOWERTIMEOUT: UINT = 0x0051;
6131pub const SPI_SETPOWEROFFTIMEOUT: UINT = 0x0052;
6132pub const SPI_GETLOWPOWERACTIVE: UINT = 0x0053;
6133pub const SPI_GETPOWEROFFACTIVE: UINT = 0x0054;
6134pub const SPI_SETLOWPOWERACTIVE: UINT = 0x0055;
6135pub const SPI_SETPOWEROFFACTIVE: UINT = 0x0056;
6136pub const SPI_SETCURSORS: UINT = 0x0057;
6137pub const SPI_SETICONS: UINT = 0x0058;
6138pub const SPI_GETDEFAULTINPUTLANG: UINT = 0x0059;
6139pub const SPI_SETDEFAULTINPUTLANG: UINT = 0x005A;
6140pub const SPI_SETLANGTOGGLE: UINT = 0x005B;
6141pub const SPI_GETWINDOWSEXTENSION: UINT = 0x005C;
6142pub const SPI_SETMOUSETRAILS: UINT = 0x005D;
6143pub const SPI_GETMOUSETRAILS: UINT = 0x005E;
6144pub const SPI_SETSCREENSAVERRUNNING: UINT = 0x0061;
6145pub const SPI_SCREENSAVERRUNNING: UINT = SPI_SETSCREENSAVERRUNNING;
6146pub const SPI_GETFILTERKEYS: UINT = 0x0032;
6147pub const SPI_SETFILTERKEYS: UINT = 0x0033;
6148pub const SPI_GETTOGGLEKEYS: UINT = 0x0034;
6149pub const SPI_SETTOGGLEKEYS: UINT = 0x0035;
6150pub const SPI_GETMOUSEKEYS: UINT = 0x0036;
6151pub const SPI_SETMOUSEKEYS: UINT = 0x0037;
6152pub const SPI_GETSHOWSOUNDS: UINT = 0x0038;
6153pub const SPI_SETSHOWSOUNDS: UINT = 0x0039;
6154pub const SPI_GETSTICKYKEYS: UINT = 0x003A;
6155pub const SPI_SETSTICKYKEYS: UINT = 0x003B;
6156pub const SPI_GETACCESSTIMEOUT: UINT = 0x003C;
6157pub const SPI_SETACCESSTIMEOUT: UINT = 0x003D;
6158pub const SPI_GETSERIALKEYS: UINT = 0x003E;
6159pub const SPI_SETSERIALKEYS: UINT = 0x003F;
6160pub const SPI_GETSOUNDSENTRY: UINT = 0x0040;
6161pub const SPI_SETSOUNDSENTRY: UINT = 0x0041;
6162pub const SPI_GETSNAPTODEFBUTTON: UINT = 0x005F;
6163pub const SPI_SETSNAPTODEFBUTTON: UINT = 0x0060;
6164pub const SPI_GETMOUSEHOVERWIDTH: UINT = 0x0062;
6165pub const SPI_SETMOUSEHOVERWIDTH: UINT = 0x0063;
6166pub const SPI_GETMOUSEHOVERHEIGHT: UINT = 0x0064;
6167pub const SPI_SETMOUSEHOVERHEIGHT: UINT = 0x0065;
6168pub const SPI_GETMOUSEHOVERTIME: UINT = 0x0066;
6169pub const SPI_SETMOUSEHOVERTIME: UINT = 0x0067;
6170pub const SPI_GETWHEELSCROLLLINES: UINT = 0x0068;
6171pub const SPI_SETWHEELSCROLLLINES: UINT = 0x0069;
6172pub const SPI_GETMENUSHOWDELAY: UINT = 0x006A;
6173pub const SPI_SETMENUSHOWDELAY: UINT = 0x006B;
6174pub const SPI_GETWHEELSCROLLCHARS: UINT = 0x006C;
6175pub const SPI_SETWHEELSCROLLCHARS: UINT = 0x006D;
6176pub const SPI_GETSHOWIMEUI: UINT = 0x006E;
6177pub const SPI_SETSHOWIMEUI: UINT = 0x006F;
6178pub const SPI_GETMOUSESPEED: UINT = 0x0070;
6179pub const SPI_SETMOUSESPEED: UINT = 0x0071;
6180pub const SPI_GETSCREENSAVERRUNNING: UINT = 0x0072;
6181pub const SPI_GETDESKWALLPAPER: UINT = 0x0073;
6182pub const SPI_GETAUDIODESCRIPTION: UINT = 0x0074;
6183pub const SPI_SETAUDIODESCRIPTION: UINT = 0x0075;
6184pub const SPI_GETSCREENSAVESECURE: UINT = 0x0076;
6185pub const SPI_SETSCREENSAVESECURE: UINT = 0x0077;
6186pub const SPI_GETHUNGAPPTIMEOUT: UINT = 0x0078;
6187pub const SPI_SETHUNGAPPTIMEOUT: UINT = 0x0079;
6188pub const SPI_GETWAITTOKILLTIMEOUT: UINT = 0x007A;
6189pub const SPI_SETWAITTOKILLTIMEOUT: UINT = 0x007B;
6190pub const SPI_GETWAITTOKILLSERVICETIMEOUT: UINT = 0x007C;
6191pub const SPI_SETWAITTOKILLSERVICETIMEOUT: UINT = 0x007D;
6192pub const SPI_GETMOUSEDOCKTHRESHOLD: UINT = 0x007E;
6193pub const SPI_SETMOUSEDOCKTHRESHOLD: UINT = 0x007F;
6194pub const SPI_GETPENDOCKTHRESHOLD: UINT = 0x0080;
6195pub const SPI_SETPENDOCKTHRESHOLD: UINT = 0x0081;
6196pub const SPI_GETWINARRANGING: UINT = 0x0082;
6197pub const SPI_SETWINARRANGING: UINT = 0x0083;
6198pub const SPI_GETMOUSEDRAGOUTTHRESHOLD: UINT = 0x0084;
6199pub const SPI_SETMOUSEDRAGOUTTHRESHOLD: UINT = 0x0085;
6200pub const SPI_GETPENDRAGOUTTHRESHOLD: UINT = 0x0086;
6201pub const SPI_SETPENDRAGOUTTHRESHOLD: UINT = 0x0087;
6202pub const SPI_GETMOUSESIDEMOVETHRESHOLD: UINT = 0x0088;
6203pub const SPI_SETMOUSESIDEMOVETHRESHOLD: UINT = 0x0089;
6204pub const SPI_GETPENSIDEMOVETHRESHOLD: UINT = 0x008A;
6205pub const SPI_SETPENSIDEMOVETHRESHOLD: UINT = 0x008B;
6206pub const SPI_GETDRAGFROMMAXIMIZE: UINT = 0x008C;
6207pub const SPI_SETDRAGFROMMAXIMIZE: UINT = 0x008D;
6208pub const SPI_GETSNAPSIZING: UINT = 0x008E;
6209pub const SPI_SETSNAPSIZING: UINT = 0x008F;
6210pub const SPI_GETDOCKMOVING: UINT = 0x0090;
6211pub const SPI_SETDOCKMOVING: UINT = 0x0091;
6212pub const SPI_GETACTIVEWINDOWTRACKING: UINT = 0x1000;
6213pub const SPI_SETACTIVEWINDOWTRACKING: UINT = 0x1001;
6214pub const SPI_GETMENUANIMATION: UINT = 0x1002;
6215pub const SPI_SETMENUANIMATION: UINT = 0x1003;
6216pub const SPI_GETCOMBOBOXANIMATION: UINT = 0x1004;
6217pub const SPI_SETCOMBOBOXANIMATION: UINT = 0x1005;
6218pub const SPI_GETLISTBOXSMOOTHSCROLLING: UINT = 0x1006;
6219pub const SPI_SETLISTBOXSMOOTHSCROLLING: UINT = 0x1007;
6220pub const SPI_GETGRADIENTCAPTIONS: UINT = 0x1008;
6221pub const SPI_SETGRADIENTCAPTIONS: UINT = 0x1009;
6222pub const SPI_GETKEYBOARDCUES: UINT = 0x100A;
6223pub const SPI_SETKEYBOARDCUES: UINT = 0x100B;
6224pub const SPI_GETMENUUNDERLINES: UINT = SPI_GETKEYBOARDCUES;
6225pub const SPI_SETMENUUNDERLINES: UINT = SPI_SETKEYBOARDCUES;
6226pub const SPI_GETACTIVEWNDTRKZORDER: UINT = 0x100C;
6227pub const SPI_SETACTIVEWNDTRKZORDER: UINT = 0x100D;
6228pub const SPI_GETHOTTRACKING: UINT = 0x100E;
6229pub const SPI_SETHOTTRACKING: UINT = 0x100F;
6230pub const SPI_GETMENUFADE: UINT = 0x1012;
6231pub const SPI_SETMENUFADE: UINT = 0x1013;
6232pub const SPI_GETSELECTIONFADE: UINT = 0x1014;
6233pub const SPI_SETSELECTIONFADE: UINT = 0x1015;
6234pub const SPI_GETTOOLTIPANIMATION: UINT = 0x1016;
6235pub const SPI_SETTOOLTIPANIMATION: UINT = 0x1017;
6236pub const SPI_GETTOOLTIPFADE: UINT = 0x1018;
6237pub const SPI_SETTOOLTIPFADE: UINT = 0x1019;
6238pub const SPI_GETCURSORSHADOW: UINT = 0x101A;
6239pub const SPI_SETCURSORSHADOW: UINT = 0x101B;
6240pub const SPI_GETMOUSESONAR: UINT = 0x101C;
6241pub const SPI_SETMOUSESONAR: UINT = 0x101D;
6242pub const SPI_GETMOUSECLICKLOCK: UINT = 0x101E;
6243pub const SPI_SETMOUSECLICKLOCK: UINT = 0x101F;
6244pub const SPI_GETMOUSEVANISH: UINT = 0x1020;
6245pub const SPI_SETMOUSEVANISH: UINT = 0x1021;
6246pub const SPI_GETFLATMENU: UINT = 0x1022;
6247pub const SPI_SETFLATMENU: UINT = 0x1023;
6248pub const SPI_GETDROPSHADOW: UINT = 0x1024;
6249pub const SPI_SETDROPSHADOW: UINT = 0x1025;
6250pub const SPI_GETBLOCKSENDINPUTRESETS: UINT = 0x1026;
6251pub const SPI_SETBLOCKSENDINPUTRESETS: UINT = 0x1027;
6252pub const SPI_GETUIEFFECTS: UINT = 0x103E;
6253pub const SPI_SETUIEFFECTS: UINT = 0x103F;
6254pub const SPI_GETDISABLEOVERLAPPEDCONTENT: UINT = 0x1040;
6255pub const SPI_SETDISABLEOVERLAPPEDCONTENT: UINT = 0x1041;
6256pub const SPI_GETCLIENTAREAANIMATION: UINT = 0x1042;
6257pub const SPI_SETCLIENTAREAANIMATION: UINT = 0x1043;
6258pub const SPI_GETCLEARTYPE: UINT = 0x1048;
6259pub const SPI_SETCLEARTYPE: UINT = 0x1049;
6260pub const SPI_GETSPEECHRECOGNITION: UINT = 0x104A;
6261pub const SPI_SETSPEECHRECOGNITION: UINT = 0x104B;
6262pub const SPI_GETFOREGROUNDLOCKTIMEOUT: UINT = 0x2000;
6263pub const SPI_SETFOREGROUNDLOCKTIMEOUT: UINT = 0x2001;
6264pub const SPI_GETACTIVEWNDTRKTIMEOUT: UINT = 0x2002;
6265pub const SPI_SETACTIVEWNDTRKTIMEOUT: UINT = 0x2003;
6266pub const SPI_GETFOREGROUNDFLASHCOUNT: UINT = 0x2004;
6267pub const SPI_SETFOREGROUNDFLASHCOUNT: UINT = 0x2005;
6268pub const SPI_GETCARETWIDTH: UINT = 0x2006;
6269pub const SPI_SETCARETWIDTH: UINT = 0x2007;
6270pub const SPI_GETMOUSECLICKLOCKTIME: UINT = 0x2008;
6271pub const SPI_SETMOUSECLICKLOCKTIME: UINT = 0x2009;
6272pub const SPI_GETFONTSMOOTHINGTYPE: UINT = 0x200A;
6273pub const SPI_SETFONTSMOOTHINGTYPE: UINT = 0x200B;
6274pub const FE_FONTSMOOTHINGSTANDARD: UINT = 0x0001;
6275pub const FE_FONTSMOOTHINGCLEARTYPE: UINT = 0x0002;
6276pub const SPI_GETFONTSMOOTHINGCONTRAST: UINT = 0x200C;
6277pub const SPI_SETFONTSMOOTHINGCONTRAST: UINT = 0x200D;
6278pub const SPI_GETFOCUSBORDERWIDTH: UINT = 0x200E;
6279pub const SPI_SETFOCUSBORDERWIDTH: UINT = 0x200F;
6280pub const SPI_GETFOCUSBORDERHEIGHT: UINT = 0x2010;
6281pub const SPI_SETFOCUSBORDERHEIGHT: UINT = 0x2011;
6282pub const SPI_GETFONTSMOOTHINGORIENTATION: UINT = 0x2012;
6283pub const SPI_SETFONTSMOOTHINGORIENTATION: UINT = 0x2013;
6284pub const FE_FONTSMOOTHINGORIENTATIONBGR: UINT = 0x0000;
6285pub const FE_FONTSMOOTHINGORIENTATIONRGB: UINT = 0x0001;
6286pub const SPI_GETMINIMUMHITRADIUS: UINT = 0x2014;
6287pub const SPI_SETMINIMUMHITRADIUS: UINT = 0x2015;
6288pub const SPI_GETMESSAGEDURATION: UINT = 0x2016;
6289pub const SPI_SETMESSAGEDURATION: UINT = 0x2017;
6290//12472
6291pub const SPIF_UPDATEINIFILE: UINT = 0x0001;
6292pub const SPIF_SENDWININICHANGE: UINT = 0x0002;
6293pub const SPIF_SENDCHANGE: UINT = SPIF_SENDWININICHANGE;
6294//12484
6295STRUCT!{struct NONCLIENTMETRICSA {
6296    cbSize: UINT,
6297    iBorderWidth: c_int,
6298    iScrollWidth: c_int,
6299    iScrollHeight: c_int,
6300    iCaptionWidth: c_int,
6301    iCaptionHeight: c_int,
6302    lfCaptionFont: LOGFONTA,
6303    iSmCaptionWidth: c_int,
6304    iSmCaptionHeight: c_int,
6305    lfSmCaptionFont: LOGFONTA,
6306    iMenuWidth: c_int,
6307    iMenuHeight: c_int,
6308    lfMenuFont: LOGFONTA,
6309    lfStatusFont: LOGFONTA,
6310    lfMessageFont: LOGFONTA,
6311    iPaddedBorderWidth: c_int,
6312}}
6313pub type LPNONCLIENTMETRICSA = *mut NONCLIENTMETRICSA;
6314STRUCT!{struct NONCLIENTMETRICSW {
6315    cbSize: UINT,
6316    iBorderWidth: c_int,
6317    iScrollWidth: c_int,
6318    iScrollHeight: c_int,
6319    iCaptionWidth: c_int,
6320    iCaptionHeight: c_int,
6321    lfCaptionFont: LOGFONTW,
6322    iSmCaptionWidth: c_int,
6323    iSmCaptionHeight: c_int,
6324    lfSmCaptionFont: LOGFONTW,
6325    iMenuWidth: c_int,
6326    iMenuHeight: c_int,
6327    lfMenuFont: LOGFONTW,
6328    lfStatusFont: LOGFONTW,
6329    lfMessageFont: LOGFONTW,
6330    iPaddedBorderWidth: c_int,
6331}}
6332pub type LPNONCLIENTMETRICSW = *mut NONCLIENTMETRICSW;
6333//12598
6334STRUCT!{struct ANIMATIONINFO {
6335    cbSize: UINT,
6336    iMinAnimate: c_int,
6337}}
6338pub type LPANIMATIONINFO = *mut ANIMATIONINFO;
6339//12638
6340STRUCT!{struct HIGHCONTRASTA {
6341    cbSize: UINT,
6342    dwFlags: DWORD,
6343    lpszDefaultScheme: LPSTR,
6344}}
6345pub type LPHIGHCONTRASTA = *mut HIGHCONTRASTA;
6346STRUCT!{struct HIGHCONTRASTW {
6347    cbSize: UINT,
6348    dwFlags: DWORD,
6349    lpszDefaultScheme: LPWSTR,
6350}}
6351pub type LPHIGHCONTRASTW = *mut HIGHCONTRASTW;
6352pub const HCF_HIGHCONTRASTON: DWORD = 0x00000001;
6353pub const HCF_AVAILABLE: DWORD = 0x00000002;
6354pub const HCF_HOTKEYACTIVE: DWORD = 0x00000004;
6355pub const HCF_CONFIRMHOTKEY: DWORD = 0x00000008;
6356pub const HCF_HOTKEYSOUND: DWORD = 0x00000010;
6357pub const HCF_INDICATOR: DWORD = 0x00000020;
6358pub const HCF_HOTKEYAVAILABLE: DWORD = 0x00000040;
6359pub const HCF_LOGONDESKTOP: DWORD = 0x00000100;
6360pub const HCF_DEFAULTDESKTOP: DWORD = 0x00000200;
6361pub const CDS_UPDATEREGISTRY: DWORD = 0x00000001;
6362pub const CDS_TEST: DWORD = 0x00000002;
6363pub const CDS_FULLSCREEN: DWORD = 0x00000004;
6364pub const CDS_GLOBAL: DWORD = 0x00000008;
6365pub const CDS_SET_PRIMARY: DWORD = 0x00000010;
6366pub const CDS_VIDEOPARAMETERS: DWORD = 0x00000020;
6367pub const CDS_ENABLE_UNSAFE_MODES: DWORD = 0x00000100;
6368pub const CDS_DISABLE_UNSAFE_MODES: DWORD = 0x00000200;
6369pub const CDS_RESET: DWORD = 0x40000000;
6370pub const CDS_RESET_EX: DWORD = 0x20000000;
6371pub const CDS_NORESET: DWORD = 0x10000000;
6372pub const DISP_CHANGE_SUCCESSFUL: LONG = 0;
6373pub const DISP_CHANGE_RESTART: LONG = 1;
6374pub const DISP_CHANGE_FAILED: LONG = -1;
6375pub const DISP_CHANGE_BADMODE: LONG = -2;
6376pub const DISP_CHANGE_NOTUPDATED: LONG = -3;
6377pub const DISP_CHANGE_BADFLAGS: LONG = -4;
6378pub const DISP_CHANGE_BADPARAM: LONG = -5;
6379pub const DISP_CHANGE_BADDUALVIEW: LONG = -6;
6380extern "system" {
6381    pub fn ChangeDisplaySettingsA(
6382        lpDevMode: *mut DEVMODEA,
6383        dwFlags: DWORD,
6384    ) -> LONG;
6385    pub fn ChangeDisplaySettingsW(
6386        lpDevMode: *mut DEVMODEW,
6387        dwFlags: DWORD,
6388    ) -> LONG;
6389    pub fn ChangeDisplaySettingsExA(
6390        lpszDeviceName: LPCSTR,
6391        lpDevMode: *mut DEVMODEA,
6392        hwnd: HWND,
6393        dwFlags: DWORD,
6394        lParam: LPVOID,
6395    ) -> LONG;
6396    pub fn ChangeDisplaySettingsExW(
6397        lpszDeviceName: LPCWSTR,
6398        lpDevMode: *mut DEVMODEW,
6399        hwnd: HWND,
6400        dwFlags: DWORD,
6401        lParam: LPVOID,
6402    ) -> LONG;
6403}
6404pub const ENUM_CURRENT_SETTINGS: DWORD = 0xFFFFFFFF;
6405pub const ENUM_REGISTRY_SETTINGS: DWORD = 0xFFFFFFFE;
6406extern "system" {
6407    pub fn EnumDisplaySettingsA(
6408        lpszDeviceName: LPCSTR,
6409        iModeNum: DWORD,
6410        lpDevMode: *mut DEVMODEA,
6411    ) -> BOOL;
6412    pub fn EnumDisplaySettingsW(
6413        lpszDeviceName: LPCWSTR,
6414        iModeNum: DWORD,
6415        lpDevMode: *mut DEVMODEW,
6416    ) -> BOOL;
6417    pub fn EnumDisplaySettingsExA(
6418        lpszDeviceName: LPCSTR,
6419        iModeNum: DWORD,
6420        lpDevMode: *mut DEVMODEA,
6421        dwFlags: DWORD,
6422    ) -> BOOL;
6423    pub fn EnumDisplaySettingsExW(
6424        lpszDeviceName: LPCWSTR,
6425        iModeNum: DWORD,
6426        lpDevMode: *mut DEVMODEW,
6427        dwFlags: DWORD,
6428    ) -> BOOL;
6429}
6430pub const EDS_RAWMODE: DWORD = 0x00000002;
6431pub const EDS_ROTATEDMODE: DWORD = 0x00000004;
6432extern "system" {
6433    pub fn EnumDisplayDevicesA(
6434        lpDevice: LPCSTR,
6435        iDevNum: DWORD,
6436        lpDisplayDevice: PDISPLAY_DEVICEA,
6437        dwFlags: DWORD,
6438    ) -> BOOL;
6439    pub fn EnumDisplayDevicesW(
6440        lpDevice: LPCWSTR,
6441        iDevNum: DWORD,
6442        lpDisplayDevice: PDISPLAY_DEVICEW,
6443        dwFlags: DWORD,
6444    ) -> BOOL;
6445}
6446pub const EDD_GET_DEVICE_INTERFACE_NAME: DWORD = 0x00000001;
6447extern "system" {
6448    pub fn SystemParametersInfoA(
6449        uiAction: UINT,
6450        uiParam: UINT,
6451        pvParam: PVOID,
6452        fWinIni: UINT,
6453    ) -> BOOL;
6454    pub fn SystemParametersInfoW(
6455        uiAction: UINT,
6456        uiParam: UINT,
6457        pvParam: PVOID,
6458        fWinIni: UINT,
6459    ) -> BOOL;
6460    pub fn SystemParametersInfoForDpi(
6461        uiAction: UINT,
6462        uiParam: UINT,
6463        pvParam: PVOID,
6464        fWinIni: UINT,
6465        dpi: UINT,
6466    ) -> BOOL;
6467}
6468//13191
6469extern "system" {
6470    pub fn SetLastErrorEx(
6471        dwErrCode: DWORD,
6472        dwType: DWORD,
6473    );
6474    pub fn InternalGetWindowText(
6475        hWnd: HWND,
6476        pString: LPWSTR,
6477        cchMaxCount: c_int,
6478    ) -> c_int;
6479    pub fn EndTask(
6480        hWnd: HWND,
6481        fShutDown: BOOL,
6482        fForce: BOOL,
6483    ) -> BOOL;
6484    pub fn CancelShutdown() -> BOOL;
6485}
6486pub const MONITOR_DEFAULTTONULL: DWORD = 0x00000000;
6487pub const MONITOR_DEFAULTTOPRIMARY: DWORD = 0x00000001;
6488pub const MONITOR_DEFAULTTONEAREST: DWORD = 0x00000002;
6489extern "system" {
6490    pub fn MonitorFromPoint(
6491        pt: POINT,
6492        dwFlags: DWORD,
6493    ) -> HMONITOR;
6494    pub fn MonitorFromRect(
6495        lprc: LPCRECT,
6496        dwFlags: DWORD,
6497    ) -> HMONITOR;
6498    pub fn MonitorFromWindow(
6499        hwnd: HWND,
6500        dwFlags: DWORD,
6501    ) -> HMONITOR;
6502}
6503pub const MONITORINFOF_PRIMARY: DWORD = 1;
6504pub const CCHDEVICENAME: usize = 32;
6505STRUCT!{struct MONITORINFO {
6506    cbSize: DWORD,
6507    rcMonitor: RECT,
6508    rcWork: RECT,
6509    dwFlags: DWORD,
6510}}
6511pub type LPMONITORINFO = *mut MONITORINFO;
6512STRUCT!{struct MONITORINFOEXA {
6513    cbSize: DWORD,
6514    rcMonitor: RECT,
6515    rcWork: RECT,
6516    dwFlags: DWORD,
6517    szDevice: [CHAR; CCHDEVICENAME],
6518}}
6519pub type LPMONITORINFOEXA = *mut MONITORINFOEXA;
6520STRUCT!{struct MONITORINFOEXW {
6521    cbSize: DWORD,
6522    rcMonitor: RECT,
6523    rcWork: RECT,
6524    dwFlags: DWORD,
6525    szDevice: [WCHAR; CCHDEVICENAME],
6526}}
6527pub type LPMONITORINFOEXW = *mut MONITORINFOEXW;
6528extern "system" {
6529    pub fn GetMonitorInfoA(
6530        hMonitor: HMONITOR,
6531        lpmi: LPMONITORINFO,
6532    ) -> BOOL;
6533    pub fn GetMonitorInfoW(
6534        hMonitor: HMONITOR,
6535        lpmi: LPMONITORINFO,
6536    ) -> BOOL;
6537}
6538FN!{stdcall MONITORENUMPROC(
6539    HMONITOR,
6540    HDC,
6541    LPRECT,
6542    LPARAM,
6543) -> BOOL}
6544extern "system" {
6545    pub fn EnumDisplayMonitors(
6546        hdc: HDC,
6547        lprcClip: LPCRECT,
6548        lpfnEnum: MONITORENUMPROC,
6549        dwData: LPARAM,
6550    ) -> BOOL;
6551    pub fn NotifyWinEvent(
6552        event: DWORD,
6553        hwnd: HWND,
6554        idObject: LONG,
6555        idChild: LONG,
6556    );
6557}
6558FN!{stdcall WINEVENTPROC(
6559    HWINEVENTHOOK,
6560    DWORD,
6561    HWND,
6562    LONG,
6563    LONG,
6564    DWORD,
6565    DWORD,
6566) -> ()}
6567extern "system" {
6568    pub fn SetWinEventHook(
6569        eventMin: DWORD,
6570        eventMax: DWORD,
6571        hmodWinEventProc: HMODULE,
6572        pfnWinEventProc: WINEVENTPROC,
6573        idProcess: DWORD,
6574        idThread: DWORD,
6575        dwFlags: DWORD,
6576    ) -> HWINEVENTHOOK;
6577    pub fn IsWinEventHookInstalled(
6578        event: DWORD,
6579    ) -> BOOL;
6580}
6581pub const WINEVENT_OUTOFCONTEXT: UINT = 0x0000;
6582pub const WINEVENT_SKIPOWNTHREAD: UINT = 0x0001;
6583pub const WINEVENT_SKIPOWNPROCESS: UINT = 0x0002;
6584pub const WINEVENT_INCONTEXT: UINT = 0x0004;
6585extern "system" {
6586    pub fn UnhookWinEvent(
6587        hWinEventHook: HWINEVENTHOOK,
6588    ) -> BOOL;
6589}
6590pub const CHILDID_SELF: LONG = 0;
6591pub const INDEXID_OBJECT: LONG = 0;
6592pub const INDEXID_CONTAINER: LONG = 0;
6593pub const OBJID_WINDOW: LONG = 0x0000;
6594pub const OBJID_SYSMENU: LONG = 0xFFFFFFFF;
6595pub const OBJID_TITLEBAR: LONG = 0xFFFFFFFE;
6596pub const OBJID_MENU: LONG = 0xFFFFFFFD;
6597pub const OBJID_CLIENT: LONG = 0xFFFFFFFC;
6598pub const OBJID_VSCROLL: LONG = 0xFFFFFFFB;
6599pub const OBJID_HSCROLL: LONG = 0xFFFFFFFA;
6600pub const OBJID_SIZEGRIP: LONG = 0xFFFFFFF9;
6601pub const OBJID_CARET: LONG = 0xFFFFFFF8;
6602pub const OBJID_CURSOR: LONG = 0xFFFFFFF7;
6603pub const OBJID_ALERT: LONG = 0xFFFFFFF6;
6604pub const OBJID_SOUND: LONG = 0xFFFFFFF5;
6605pub const OBJID_QUERYCLASSNAMEIDX: LONG = 0xFFFFFFF4;
6606pub const OBJID_NATIVEOM: LONG = 0xFFFFFFF0;
6607pub const EVENT_MIN: UINT = 0x0001;
6608pub const EVENT_MAX: UINT = 0x7FFFFFFF;
6609pub const EVENT_SYSTEM_SOUND: UINT = 0x0001;
6610pub const EVENT_SYSTEM_ALERT: UINT = 0x0002;
6611pub const EVENT_SYSTEM_FOREGROUND: UINT = 0x0003;
6612pub const EVENT_SYSTEM_MENUSTART: UINT = 0x0004;
6613pub const EVENT_SYSTEM_MENUEND: UINT = 0x0005;
6614pub const EVENT_SYSTEM_MENUPOPUPSTART: UINT = 0x0006;
6615pub const EVENT_SYSTEM_MENUPOPUPEND: UINT = 0x0007;
6616pub const EVENT_SYSTEM_CAPTURESTART: UINT = 0x0008;
6617pub const EVENT_SYSTEM_CAPTUREEND: UINT = 0x0009;
6618pub const EVENT_SYSTEM_MOVESIZESTART: UINT = 0x000A;
6619pub const EVENT_SYSTEM_MOVESIZEEND: UINT = 0x000B;
6620pub const EVENT_SYSTEM_CONTEXTHELPSTART: UINT = 0x000C;
6621pub const EVENT_SYSTEM_CONTEXTHELPEND: UINT = 0x000D;
6622pub const EVENT_SYSTEM_DRAGDROPSTART: UINT = 0x000E;
6623pub const EVENT_SYSTEM_DRAGDROPEND: UINT = 0x000F;
6624pub const EVENT_SYSTEM_DIALOGSTART: UINT = 0x0010;
6625pub const EVENT_SYSTEM_DIALOGEND: UINT = 0x0011;
6626pub const EVENT_SYSTEM_SCROLLINGSTART: UINT = 0x0012;
6627pub const EVENT_SYSTEM_SCROLLINGEND: UINT = 0x0013;
6628pub const EVENT_SYSTEM_SWITCHSTART: UINT = 0x0014;
6629pub const EVENT_SYSTEM_SWITCHEND: UINT = 0x0015;
6630pub const EVENT_SYSTEM_MINIMIZESTART: UINT = 0x0016;
6631pub const EVENT_SYSTEM_MINIMIZEEND: UINT = 0x0017;
6632pub const EVENT_SYSTEM_DESKTOPSWITCH: UINT = 0x0020;
6633pub const EVENT_SYSTEM_SWITCHER_APPGRABBED: UINT = 0x0024;
6634pub const EVENT_SYSTEM_SWITCHER_APPOVERTARGET: UINT = 0x0025;
6635pub const EVENT_SYSTEM_SWITCHER_APPDROPPED: UINT = 0x0026;
6636pub const EVENT_SYSTEM_SWITCHER_CANCELLED: UINT = 0x0027;
6637pub const EVENT_SYSTEM_IME_KEY_NOTIFICATION: UINT = 0x0029;
6638pub const EVENT_SYSTEM_END: UINT = 0x00FF;
6639pub const EVENT_OEM_DEFINED_START: UINT = 0x0101;
6640pub const EVENT_OEM_DEFINED_END: UINT = 0x01FF;
6641pub const EVENT_UIA_EVENTID_START: UINT = 0x4E00;
6642pub const EVENT_UIA_EVENTID_END: UINT = 0x4EFF;
6643pub const EVENT_UIA_PROPID_START: UINT = 0x7500;
6644pub const EVENT_UIA_PROPID_END: UINT = 0x75FF;
6645pub const EVENT_CONSOLE_CARET: UINT = 0x4001;
6646pub const EVENT_CONSOLE_UPDATE_REGION: UINT = 0x4002;
6647pub const EVENT_CONSOLE_UPDATE_SIMPLE: UINT = 0x4003;
6648pub const EVENT_CONSOLE_UPDATE_SCROLL: UINT = 0x4004;
6649pub const EVENT_CONSOLE_LAYOUT: UINT = 0x4005;
6650pub const EVENT_CONSOLE_START_APPLICATION: UINT = 0x4006;
6651pub const EVENT_CONSOLE_END_APPLICATION: UINT = 0x4007;
6652#[cfg(target_pointer_width = "64")]
6653pub const CONSOLE_APPLICATION_16BIT: LONG = 0x0000;
6654#[cfg(target_pointer_width = "32")]
6655pub const CONSOLE_APPLICATION_16BIT: LONG = 0x0001;
6656pub const CONSOLE_CARET_SELECTION: LONG = 0x0001;
6657pub const CONSOLE_CARET_VISIBLE: LONG = 0x0002;
6658pub const EVENT_CONSOLE_END: UINT = 0x40FF;
6659pub const EVENT_OBJECT_CREATE: UINT = 0x8000;
6660pub const EVENT_OBJECT_DESTROY: UINT = 0x8001;
6661pub const EVENT_OBJECT_SHOW: UINT = 0x8002;
6662pub const EVENT_OBJECT_HIDE: UINT = 0x8003;
6663pub const EVENT_OBJECT_REORDER: UINT = 0x8004;
6664pub const EVENT_OBJECT_FOCUS: UINT = 0x8005;
6665pub const EVENT_OBJECT_SELECTION: UINT = 0x8006;
6666pub const EVENT_OBJECT_SELECTIONADD: UINT = 0x8007;
6667pub const EVENT_OBJECT_SELECTIONREMOVE: UINT = 0x8008;
6668pub const EVENT_OBJECT_SELECTIONWITHIN: UINT = 0x8009;
6669pub const EVENT_OBJECT_STATECHANGE: UINT = 0x800A;
6670pub const EVENT_OBJECT_LOCATIONCHANGE: UINT = 0x800B;
6671pub const EVENT_OBJECT_NAMECHANGE: UINT = 0x800C;
6672pub const EVENT_OBJECT_DESCRIPTIONCHANGE: UINT = 0x800D;
6673pub const EVENT_OBJECT_VALUECHANGE: UINT = 0x800E;
6674pub const EVENT_OBJECT_PARENTCHANGE: UINT = 0x800F;
6675pub const EVENT_OBJECT_HELPCHANGE: UINT = 0x8010;
6676pub const EVENT_OBJECT_DEFACTIONCHANGE: UINT = 0x8011;
6677pub const EVENT_OBJECT_ACCELERATORCHANGE: UINT = 0x8012;
6678pub const EVENT_OBJECT_INVOKED: UINT = 0x8013;
6679pub const EVENT_OBJECT_TEXTSELECTIONCHANGED: UINT = 0x8014;
6680pub const EVENT_OBJECT_CONTENTSCROLLED: UINT = 0x8015;
6681pub const EVENT_SYSTEM_ARRANGMENTPREVIEW: UINT = 0x8016;
6682pub const EVENT_OBJECT_CLOAKED: UINT = 0x8017;
6683pub const EVENT_OBJECT_UNCLOAKED: UINT = 0x8018;
6684pub const EVENT_OBJECT_LIVEREGIONCHANGED: UINT = 0x8019;
6685pub const EVENT_OBJECT_HOSTEDOBJECTSINVALIDATED: UINT = 0x8020;
6686pub const EVENT_OBJECT_DRAGSTART: UINT = 0x8021;
6687pub const EVENT_OBJECT_DRAGCANCEL: UINT = 0x8022;
6688pub const EVENT_OBJECT_DRAGCOMPLETE: UINT = 0x8023;
6689pub const EVENT_OBJECT_DRAGENTER: UINT = 0x8024;
6690pub const EVENT_OBJECT_DRAGLEAVE: UINT = 0x8025;
6691pub const EVENT_OBJECT_DRAGDROPPED: UINT = 0x8026;
6692pub const EVENT_OBJECT_IME_SHOW: UINT = 0x8027;
6693pub const EVENT_OBJECT_IME_HIDE: UINT = 0x8028;
6694pub const EVENT_OBJECT_IME_CHANGE: UINT = 0x8029;
6695pub const EVENT_OBJECT_TEXTEDIT_CONVERSIONTARGETCHANGED: UINT = 0x8030;
6696pub const EVENT_OBJECT_END: UINT = 0x80FF;
6697pub const EVENT_AIA_START: UINT = 0xA000;
6698pub const EVENT_AIA_END: UINT = 0xAFFF;
6699pub const ALERT_SYSTEM_INFORMATIONAL: LONG = 1;
6700pub const ALERT_SYSTEM_WARNING: LONG = 2;
6701pub const ALERT_SYSTEM_ERROR: LONG = 3;
6702pub const ALERT_SYSTEM_QUERY: LONG = 4;
6703pub const ALERT_SYSTEM_CRITICAL: LONG = 5;
6704pub const CALERT_SYSTEM: LONG = 6;
6705STRUCT!{struct GUITHREADINFO {
6706    cbSize: DWORD,
6707    flags: DWORD,
6708    hwndActive: HWND,
6709    hwndFocus: HWND,
6710    hwndCapture: HWND,
6711    hwndMenuOwner: HWND,
6712    hwndMoveSize: HWND,
6713    hwndCaret: HWND,
6714    rcCaret: RECT,
6715}}
6716pub type PGUITHREADINFO = *mut GUITHREADINFO;
6717pub type LPGUITHREADINFO = *mut GUITHREADINFO;
6718pub const GUI_CARETBLINKING: DWORD = 0x00000001;
6719pub const GUI_INMOVESIZE: DWORD = 0x00000002;
6720pub const GUI_INMENUMODE: DWORD = 0x00000004;
6721pub const GUI_SYSTEMMENUMODE: DWORD = 0x00000008;
6722pub const GUI_POPUPMENUMODE: DWORD = 0x00000010;
6723#[cfg(target_arch = "x86_64")]
6724pub const GUI_16BITTASK: DWORD = 0x00000000;
6725#[cfg(target_arch = "x86")]
6726pub const GUI_16BITTASK: DWORD = 0x00000020;
6727extern "system" {
6728    pub fn GetGUIThreadInfo(
6729        idThread: DWORD,
6730        pgui: PGUITHREADINFO,
6731    ) -> BOOL;
6732    pub fn BlockInput(
6733        fBlockIt: BOOL,
6734    ) -> BOOL;
6735}
6736pub const USER_DEFAULT_SCREEN_DPI: LONG = 96;
6737extern "system" {
6738    pub fn SetProcessDPIAware() -> BOOL;
6739    pub fn IsProcessDPIAware() -> BOOL;
6740    pub fn SetThreadDpiAwarenessContext(
6741        dpiContext: DPI_AWARENESS_CONTEXT,
6742    ) -> DPI_AWARENESS_CONTEXT;
6743    pub fn GetThreadDpiAwarenessContext() -> DPI_AWARENESS_CONTEXT;
6744    pub fn GetWindowDpiAwarenessContext(
6745        hwnd: HWND,
6746    ) -> DPI_AWARENESS_CONTEXT;
6747    pub fn GetAwarenessFromDpiAwarenessContext(
6748        value: DPI_AWARENESS_CONTEXT,
6749    ) -> DPI_AWARENESS;
6750    pub fn GetDpiFromDpiAwarenessContext(
6751        value: DPI_AWARENESS_CONTEXT,
6752    ) -> UINT;
6753    pub fn AreDpiAwarenessContextsEqual(
6754        dpiContextA: DPI_AWARENESS_CONTEXT,
6755        dpiContextB: DPI_AWARENESS_CONTEXT,
6756    ) -> BOOL;
6757    pub fn IsValidDpiAwarenessContext(
6758        value: DPI_AWARENESS_CONTEXT,
6759    ) -> BOOL;
6760    pub fn GetDpiForWindow(
6761        hwnd: HWND,
6762    ) -> UINT;
6763    pub fn GetDpiForSystem() -> UINT;
6764    pub fn GetSystemDpiForProcess(
6765        hProcess: HANDLE,
6766    ) -> UINT;
6767    pub fn EnableNonClientDpiScaling(
6768        hwnd: HWND,
6769    ) -> BOOL;
6770    pub fn SetProcessDpiAwarenessContext(
6771        value: DPI_AWARENESS_CONTEXT,
6772    ) -> BOOL;
6773    pub fn SetThreadDpiHostingBehavior(
6774        value: DPI_HOSTING_BEHAVIOR,
6775    ) -> DPI_HOSTING_BEHAVIOR;
6776    pub fn GetThreadDpiHostingBehavior() -> DPI_HOSTING_BEHAVIOR;
6777    pub fn GetWindowDpiHostingBehavior(
6778        hwnd: HWND,
6779    ) -> DPI_HOSTING_BEHAVIOR;
6780    pub fn GetWindowModuleFileNameA(
6781        hWnd: HWND,
6782        lpszFileName: LPCSTR,
6783        cchFileNameMax: UINT,
6784    ) -> UINT;
6785    pub fn GetWindowModuleFileNameW(
6786        hWnd: HWND,
6787        lpszFileName: LPWSTR,
6788        cchFileNameMax: UINT,
6789    ) -> UINT;
6790}
6791pub const STATE_SYSTEM_UNAVAILABLE: DWORD = 0x00000001;
6792pub const STATE_SYSTEM_SELECTED: DWORD = 0x00000002;
6793pub const STATE_SYSTEM_FOCUSED: DWORD = 0x00000004;
6794pub const STATE_SYSTEM_PRESSED: DWORD = 0x00000008;
6795pub const STATE_SYSTEM_CHECKED: DWORD = 0x00000010;
6796pub const STATE_SYSTEM_MIXED: DWORD = 0x00000020;
6797pub const STATE_SYSTEM_INDETERMINATE: DWORD = STATE_SYSTEM_MIXED;
6798pub const STATE_SYSTEM_READONLY: DWORD = 0x00000040;
6799pub const STATE_SYSTEM_HOTTRACKED: DWORD = 0x00000080;
6800pub const STATE_SYSTEM_DEFAULT: DWORD = 0x00000100;
6801pub const STATE_SYSTEM_EXPANDED: DWORD = 0x00000200;
6802pub const STATE_SYSTEM_COLLAPSED: DWORD = 0x00000400;
6803pub const STATE_SYSTEM_BUSY: DWORD = 0x00000800;
6804pub const STATE_SYSTEM_FLOATING: DWORD = 0x00001000;
6805pub const STATE_SYSTEM_MARQUEED: DWORD = 0x00002000;
6806pub const STATE_SYSTEM_ANIMATED: DWORD = 0x00004000;
6807pub const STATE_SYSTEM_INVISIBLE: DWORD = 0x00008000;
6808pub const STATE_SYSTEM_OFFSCREEN: DWORD = 0x00010000;
6809pub const STATE_SYSTEM_SIZEABLE: DWORD = 0x00020000;
6810pub const STATE_SYSTEM_MOVEABLE: DWORD = 0x00040000;
6811pub const STATE_SYSTEM_SELFVOICING: DWORD = 0x00080000;
6812pub const STATE_SYSTEM_FOCUSABLE: DWORD = 0x00100000;
6813pub const STATE_SYSTEM_SELECTABLE: DWORD = 0x00200000;
6814pub const STATE_SYSTEM_LINKED: DWORD = 0x00400000;
6815pub const STATE_SYSTEM_TRAVERSED: DWORD = 0x00800000;
6816pub const STATE_SYSTEM_MULTISELECTABLE: DWORD = 0x01000000;
6817pub const STATE_SYSTEM_EXTSELECTABLE: DWORD = 0x02000000;
6818pub const STATE_SYSTEM_ALERT_LOW: DWORD = 0x04000000;
6819pub const STATE_SYSTEM_ALERT_MEDIUM: DWORD = 0x08000000;
6820pub const STATE_SYSTEM_ALERT_HIGH: DWORD = 0x10000000;
6821pub const STATE_SYSTEM_PROTECTED: DWORD = 0x20000000;
6822pub const STATE_SYSTEM_VALID: DWORD = 0x3fffffff;
6823pub const CCHILDREN_TITLEBAR: usize = 5;
6824pub const CCHILDREN_SCROLLBAR: usize = 5;
6825STRUCT!{struct CURSORINFO {
6826    cbSize: DWORD,
6827    flags: DWORD,
6828    hCursor: HCURSOR,
6829    ptScreenPos: POINT,
6830}}
6831pub type PCURSORINFO = *mut CURSORINFO;
6832pub type LPCURSORINFO = *mut CURSORINFO;
6833pub const CURSOR_SHOWING: DWORD = 0x00000001;
6834pub const CURSOR_SUPPRESSED: DWORD = 0x00000002;
6835extern "system" {
6836    pub fn GetCursorInfo(
6837        pci: PCURSORINFO,
6838    ) -> BOOL;
6839}
6840STRUCT!{struct WINDOWINFO {
6841    cbSize: DWORD,
6842    rcWindow: RECT,
6843    rcClient: RECT,
6844    dwStyle: DWORD,
6845    dwExStyle: DWORD,
6846    dwWindowStatus: DWORD,
6847    cxWindowBorders: UINT,
6848    cyWindowBorders: UINT,
6849    atomWindowType: ATOM,
6850    wCreatorVersion: WORD,
6851}}
6852pub type PWINDOWINFO = *mut WINDOWINFO;
6853pub type LPWINDOWINFO = *mut WINDOWINFO;
6854pub const WS_ACTIVECAPTION: DWORD = 0x0001;
6855extern "system" {
6856    pub fn GetWindowInfo(
6857        hwnd: HWND,
6858        pwi: PWINDOWINFO,
6859    ) -> BOOL;
6860}
6861STRUCT!{struct TITLEBARINFO {
6862    cbSize: DWORD,
6863    rcTitleBar: RECT,
6864    rgstate: [DWORD; CCHILDREN_TITLEBAR + 1],
6865}}
6866pub type PTITLEBARINFO = *mut TITLEBARINFO;
6867pub type LPTITLEBARINFO = *mut TITLEBARINFO;
6868extern "system" {
6869    pub fn GetTitleBarInfo(
6870        hwnd: HWND,
6871        pti: PTITLEBARINFO,
6872    ) -> BOOL;
6873}
6874STRUCT!{struct TITLEBARINFOEX {
6875    cbSize: DWORD,
6876    rcTitleBar: RECT,
6877    rgstate: [DWORD; CCHILDREN_TITLEBAR + 1],
6878    rgrect: [RECT; CCHILDREN_TITLEBAR + 1],
6879}}
6880pub type PTITLEBARINFOEX = *mut TITLEBARINFOEX;
6881pub type LPTITLEBARINFOEX = *mut TITLEBARINFOEX;
6882STRUCT!{struct MENUBARINFO {
6883    cbSize: DWORD,
6884    rcBar: RECT,
6885    hMenu: HMENU,
6886    hwndMenu: HWND,
6887    BitFields: BOOL,
6888}}
6889BITFIELD!{MENUBARINFO BitFields: BOOL [
6890    fBarFocused set_fBarFocused[0..1],
6891    fFocused set_fFocused[1..2],
6892]}
6893pub type PMENUBARINFO = *mut MENUBARINFO;
6894pub type LPMENUBARINFO = *mut MENUBARINFO;
6895extern "system" {
6896    pub fn GetMenuBarInfo(
6897        hwnd: HWND,
6898        idObject: LONG,
6899        idItem: LONG,
6900        pmbi: PMENUBARINFO,
6901    ) -> BOOL;
6902}
6903STRUCT!{struct SCROLLBARINFO {
6904    cbSize: DWORD,
6905    rcScrollBar: RECT,
6906    dxyLineButton: c_int,
6907    xyThumbTop: c_int,
6908    xyThumbBottom: c_int,
6909    reserved: c_int,
6910    rgstate: [DWORD; CCHILDREN_SCROLLBAR + 1],
6911}}
6912pub type PSCROLLBARINFO = *mut SCROLLBARINFO;
6913pub type LPSCROLLBARINFO = *mut SCROLLBARINFO;
6914extern "system" {
6915    pub fn GetScrollBarInfo(
6916        hwnd: HWND,
6917        idObject: LONG,
6918        psbi: PSCROLLBARINFO,
6919    ) -> BOOL;
6920}
6921STRUCT!{struct COMBOBOXINFO {
6922    cbSize: DWORD,
6923    rcItem: RECT,
6924    rcButton: RECT,
6925    stateButton: DWORD,
6926    hwndCombo: HWND,
6927    hwndItem: HWND,
6928    hwndList: HWND,
6929}}
6930pub type PCOMBOBOXINFO = *mut COMBOBOXINFO;
6931pub type LPCOMBOBOXINFO = *mut COMBOBOXINFO;
6932extern "system" {
6933    pub fn GetComboBoxInfo(
6934        hwndCombo: HWND,
6935        pcbi: PCOMBOBOXINFO,
6936    ) -> BOOL;
6937}
6938pub const GA_PARENT: UINT = 1;
6939pub const GA_ROOT: UINT = 2;
6940pub const GA_ROOTOWNER: UINT = 3;
6941extern "system" {
6942    pub fn GetAncestor(
6943        hwnd: HWND,
6944        gaFlags: UINT,
6945    ) -> HWND;
6946    pub fn RealChildWindowFromPoint(
6947        hwndParent: HWND,
6948        ptParentClientCoords: POINT,
6949    ) -> HWND;
6950    pub fn RealGetWindowClassA(
6951        hwnd: HWND,
6952        ptszClassName: LPSTR,
6953        cchClassNameMax: UINT,
6954    ) -> UINT;
6955    pub fn RealGetWindowClassW(
6956        hwnd: HWND,
6957        ptszClassName: LPWSTR,
6958        cchClassNameMax: UINT,
6959    ) -> UINT;
6960}
6961STRUCT!{struct ALTTABINFO {
6962    cbSize: DWORD,
6963    cItems: c_int,
6964    cColumns: c_int,
6965    cRows: c_int,
6966    iColFocus: c_int,
6967    iRowFocus: c_int,
6968    cxItem: c_int,
6969    cyItem: c_int,
6970    ptStart: POINT,
6971}}
6972pub type PALTTABINFO = *mut ALTTABINFO;
6973pub type LPALTTABINFO = *mut ALTTABINFO;
6974extern "system" {
6975    pub fn GetAltTabInfoA(
6976        hwnd: HWND,
6977        iItem: c_int,
6978        pati: PALTTABINFO,
6979        pszItemText: LPSTR,
6980        cchItemText: UINT,
6981    ) -> BOOL;
6982    pub fn GetAltTabInfoW(
6983        hwnd: HWND,
6984        iItem: c_int,
6985        pati: PALTTABINFO,
6986        pszItemText: LPWSTR,
6987        cchItemText: UINT,
6988    ) -> BOOL;
6989    pub fn GetListBoxInfo(
6990        hwnd: HWND,
6991    ) -> DWORD;
6992    pub fn LockWorkStation() -> BOOL;
6993    pub fn UserHandleGrantAccess(
6994        hUserHandle: HANDLE,
6995        hJob: HANDLE,
6996        bGrant: BOOL,
6997    ) -> BOOL;
6998}
6999DECLARE_HANDLE!{HRAWINPUT, HRAWINPUT__}
7000#[inline]
7001pub fn GET_RAWINPUT_CODE_WPARAM(wParam: WPARAM) -> WPARAM { wParam & 0xff }
7002pub const RIM_INPUT: WPARAM = 0;
7003pub const RIM_INPUTSINK: WPARAM = 1;
7004STRUCT!{struct RAWINPUTHEADER {
7005    dwType: DWORD,
7006    dwSize: DWORD,
7007    hDevice: HANDLE,
7008    wParam: WPARAM,
7009}}
7010pub type PRAWINPUTHEADER = *mut RAWINPUTHEADER;
7011pub type LPRAWINPUTHEADER = *mut RAWINPUTHEADER;
7012pub const RIM_TYPEMOUSE: DWORD = 0;
7013pub const RIM_TYPEKEYBOARD: DWORD = 1;
7014pub const RIM_TYPEHID: DWORD = 2;
7015STRUCT!{struct RAWMOUSE {
7016    usFlags: USHORT,
7017    memory_padding: USHORT, // 16bit Padding for 32bit align in following union
7018    usButtonFlags: USHORT,
7019    usButtonData: USHORT,
7020    ulRawButtons: ULONG,
7021    lLastX: LONG,
7022    lLastY: LONG,
7023    ulExtraInformation: ULONG,
7024}}
7025pub type PRAWMOUSE = *mut RAWMOUSE;
7026pub type LPRAWMOUSE = *mut RAWMOUSE;
7027pub const RI_MOUSE_LEFT_BUTTON_DOWN: USHORT = 0x0001;
7028pub const RI_MOUSE_LEFT_BUTTON_UP: USHORT = 0x0002;
7029pub const RI_MOUSE_RIGHT_BUTTON_DOWN: USHORT = 0x0004;
7030pub const RI_MOUSE_RIGHT_BUTTON_UP: USHORT = 0x0008;
7031pub const RI_MOUSE_MIDDLE_BUTTON_DOWN: USHORT = 0x0010;
7032pub const RI_MOUSE_MIDDLE_BUTTON_UP: USHORT = 0x0020;
7033pub const RI_MOUSE_BUTTON_1_DOWN: USHORT = RI_MOUSE_LEFT_BUTTON_DOWN;
7034pub const RI_MOUSE_BUTTON_1_UP: USHORT = RI_MOUSE_LEFT_BUTTON_UP;
7035pub const RI_MOUSE_BUTTON_2_DOWN: USHORT = RI_MOUSE_RIGHT_BUTTON_DOWN;
7036pub const RI_MOUSE_BUTTON_2_UP: USHORT = RI_MOUSE_RIGHT_BUTTON_UP;
7037pub const RI_MOUSE_BUTTON_3_DOWN: USHORT = RI_MOUSE_MIDDLE_BUTTON_DOWN;
7038pub const RI_MOUSE_BUTTON_3_UP: USHORT = RI_MOUSE_MIDDLE_BUTTON_UP;
7039pub const RI_MOUSE_BUTTON_4_DOWN: USHORT = 0x0040;
7040pub const RI_MOUSE_BUTTON_4_UP: USHORT = 0x0080;
7041pub const RI_MOUSE_BUTTON_5_DOWN: USHORT = 0x0100;
7042pub const RI_MOUSE_BUTTON_5_UP: USHORT = 0x0200;
7043pub const RI_MOUSE_WHEEL: USHORT = 0x0400;
7044pub const MOUSE_MOVE_RELATIVE: USHORT = 0;
7045pub const MOUSE_MOVE_ABSOLUTE: USHORT = 1;
7046pub const MOUSE_VIRTUAL_DESKTOP: USHORT = 0x02;
7047pub const MOUSE_ATTRIBUTES_CHANGED: USHORT = 0x04;
7048pub const MOUSE_MOVE_NOCOALESCE: USHORT = 0x08;
7049STRUCT!{struct RAWKEYBOARD {
7050    MakeCode: USHORT,
7051    Flags: USHORT,
7052    Reserved: USHORT,
7053    VKey: USHORT,
7054    Message: UINT,
7055    ExtraInformation: ULONG,
7056}}
7057pub type PRAWKEYBOARD = *mut RAWKEYBOARD;
7058pub type LPRAWKEYBOARD = *mut RAWKEYBOARD;
7059pub const KEYBOARD_OVERRUN_MAKE_CODE: DWORD = 0xFF;
7060pub const RI_KEY_MAKE: DWORD = 0;
7061pub const RI_KEY_BREAK: DWORD = 1;
7062pub const RI_KEY_E0: DWORD = 2;
7063pub const RI_KEY_E1: DWORD = 4;
7064pub const RI_KEY_TERMSRV_SET_LED: DWORD = 8;
7065pub const RI_KEY_TERMSRV_SHADOW: DWORD = 0x10;
7066STRUCT!{struct RAWHID {
7067    dwSizeHid: DWORD,
7068    dwCount: DWORD,
7069    bRawData: [BYTE; 1],
7070}}
7071pub type PRAWHID = *mut RAWHID;
7072pub type LPRAWHID = *mut RAWHID;
7073UNION!{union RAWINPUT_data {
7074    [u32; 6],
7075    mouse mouse_mut: RAWMOUSE,
7076    keyboard keyboard_mut: RAWKEYBOARD,
7077    hid hid_mut: RAWHID,
7078}}
7079STRUCT!{struct RAWINPUT {
7080    header: RAWINPUTHEADER,
7081    data: RAWINPUT_data,
7082}}
7083pub type PRAWINPUT = *mut RAWINPUT;
7084pub type LPRAWINPUT = *mut RAWINPUT;
7085pub const RID_INPUT: DWORD = 0x10000003;
7086pub const RID_HEADER: DWORD = 0x10000005;
7087extern "system" {
7088    pub fn GetRawInputData(
7089        hRawInput: HRAWINPUT,
7090        uiCommand: UINT,
7091        pData: LPVOID,
7092        pcbSize: PUINT,
7093        cbSizeHeader: UINT,
7094    ) -> UINT;
7095}
7096pub const RIDI_PREPARSEDDATA: DWORD = 0x20000005;
7097pub const RIDI_DEVICENAME: DWORD = 0x20000007;
7098pub const RIDI_DEVICEINFO: DWORD = 0x2000000b;
7099STRUCT!{struct RID_DEVICE_INFO_MOUSE {
7100    dwId: DWORD,
7101    dwNumberOfButtons: DWORD,
7102    dwSampleRate: DWORD,
7103    fHasHorizontalWheel: BOOL,
7104}}
7105pub type PRID_DEVICE_INFO_MOUSE = *mut RID_DEVICE_INFO_MOUSE;
7106STRUCT!{struct RID_DEVICE_INFO_KEYBOARD {
7107    dwType: DWORD,
7108    dwSubType: DWORD,
7109    dwKeyboardMode: DWORD,
7110    dwNumberOfFunctionKeys: DWORD,
7111    dwNumberOfIndicators: DWORD,
7112    dwNumberOfKeysTotal: DWORD,
7113}}
7114pub type PRID_DEVICE_INFO_KEYBOARD = *mut RID_DEVICE_INFO_KEYBOARD;
7115STRUCT!{struct RID_DEVICE_INFO_HID {
7116    dwVendorId: DWORD,
7117    dwProductId: DWORD,
7118    dwVersionNumber: DWORD,
7119    usUsagePage: USHORT,
7120    usUsage: USHORT,
7121}}
7122pub type PRID_DEVICE_INFO_HID = *mut RID_DEVICE_INFO_HID;
7123UNION!{union RID_DEVICE_INFO_u {
7124    [u32; 6],
7125    mouse mouse_mut: RID_DEVICE_INFO_MOUSE,
7126    keyboard keyboard_mut: RID_DEVICE_INFO_KEYBOARD,
7127    hid hid_mut: RID_DEVICE_INFO_HID,
7128}}
7129STRUCT!{struct RID_DEVICE_INFO {
7130    cbSize: DWORD,
7131    dwType: DWORD,
7132    u: RID_DEVICE_INFO_u,
7133}}
7134pub type PRID_DEVICE_INFO = *mut RID_DEVICE_INFO;
7135pub type LPRID_DEVICE_INFO = *mut RID_DEVICE_INFO;
7136extern "system" {
7137    pub fn GetRawInputDeviceInfoA(
7138        hDevice: HANDLE,
7139        uiCommand: UINT,
7140        pData: LPVOID,
7141        pcbSize: PUINT,
7142    ) -> UINT;
7143    pub fn GetRawInputDeviceInfoW(
7144        hDevice: HANDLE,
7145        uiCommand: UINT,
7146        pData: LPVOID,
7147        pcbSize: PUINT,
7148    ) -> UINT;
7149    pub fn GetRawInputBuffer(
7150        pData: PRAWINPUT,
7151        pcbSize: PUINT,
7152        cbSizeHeader: UINT,
7153    ) -> UINT;
7154}
7155STRUCT!{struct RAWINPUTDEVICE {
7156    usUsagePage: USHORT,
7157    usUsage: USHORT,
7158    dwFlags: DWORD,
7159    hwndTarget: HWND,
7160}}
7161pub type PRAWINPUTDEVICE = *mut RAWINPUTDEVICE;
7162pub type LPRAWINPUTDEVICE = *mut RAWINPUTDEVICE;
7163pub type PCRAWINPUTDEVICE = *const RAWINPUTDEVICE;
7164pub const RIDEV_REMOVE: DWORD = 0x00000001;
7165pub const RIDEV_EXCLUDE: DWORD = 0x00000010;
7166pub const RIDEV_PAGEONLY: DWORD = 0x00000020;
7167pub const RIDEV_NOLEGACY: DWORD = 0x00000030;
7168pub const RIDEV_INPUTSINK: DWORD = 0x00000100;
7169pub const RIDEV_CAPTUREMOUSE: DWORD = 0x00000200;
7170pub const RIDEV_NOHOTKEYS: DWORD = 0x00000200;
7171pub const RIDEV_APPKEYS: DWORD = 0x00000400;
7172pub const RIDEV_EXINPUTSINK: DWORD = 0x00001000;
7173pub const RIDEV_DEVNOTIFY: DWORD = 0x00002000;
7174pub const RIDEV_EXMODEMASK: DWORD = 0x000000F0;
7175pub const GIDC_ARRIVAL: DWORD = 1;
7176pub const GIDC_REMOVAL: DWORD = 2;
7177extern "system" {
7178    pub fn RegisterRawInputDevices(
7179        pRawInputDevices: PCRAWINPUTDEVICE,
7180        uiNumDevices: UINT,
7181        cbSize: UINT,
7182    ) -> BOOL;
7183    pub fn GetRegisteredRawInputDevices(
7184        pRawInputDevices: PRAWINPUTDEVICE,
7185        puiNumDevices: PUINT,
7186        cbSize: UINT,
7187    ) -> UINT;
7188}
7189STRUCT!{struct RAWINPUTDEVICELIST {
7190    hDevice: HANDLE,
7191    dwType: DWORD,
7192}}
7193pub type PRAWINPUTDEVICELIST = *mut RAWINPUTDEVICELIST;
7194extern "system" {
7195    pub fn GetRawInputDeviceList(
7196        pRawInputDeviceList: PRAWINPUTDEVICELIST,
7197        puiNumDevices: PUINT,
7198        cbSize: UINT,
7199    ) -> UINT;
7200    pub fn DefRawInputProc(
7201        paRawInput: *mut PRAWINPUT,
7202        nInput: INT,
7203        cbSizeHeader: UINT,
7204    ) -> LRESULT;
7205    pub fn ChangeWindowMessageFilter(
7206        message: UINT,
7207        dwFlag: DWORD,
7208    ) -> BOOL;
7209}
7210//15165
7211STRUCT!{struct CHANGEFILTERSTRUCT {
7212    cbSize: DWORD,
7213    ExtStatus: DWORD,
7214}}
7215extern "system" {
7216    pub fn ChangeWindowMessageFilterEx(
7217        hwnd: HWND,
7218        message: UINT,
7219        action: DWORD,
7220        pChangeFilterStruct: PCHANGEFILTERSTRUCT,
7221    ) -> BOOL;
7222}
7223pub type PCHANGEFILTERSTRUCT = *mut CHANGEFILTERSTRUCT;
7224//15427
7225pub const NID_INTEGRATED_TOUCH: UINT = 0x00000001;
7226pub const NID_EXTERNAL_TOUCH: UINT = 0x00000002;
7227pub const NID_INTEGRATED_PEN: UINT = 0x00000004;
7228pub const NID_EXTERNAL_PEN: UINT = 0x00000008;
7229pub const NID_MULTI_INPUT: UINT = 0x00000040;
7230pub const NID_READY: UINT = 0x00000080;
7231pub const MAX_STR_BLOCKREASON: usize = 256;
7232extern "system" {
7233    pub fn ShutdownBlockReasonCreate(
7234        hWnd: HWND,
7235        pwszReason: LPCWSTR,
7236    ) -> BOOL;
7237    pub fn ShutdownBlockReasonQuery(
7238        hWnd: HWND,
7239        pwszBuff: LPWSTR,
7240        pcchBuff: *mut DWORD,
7241    ) -> BOOL;
7242    pub fn ShutdownBlockReasonDestroy(
7243        hWnd: HWND,
7244    ) -> BOOL;
7245}
7246//15615
7247extern "system" {
7248    pub fn IsImmersiveProcess(
7249        hProcess: HANDLE,
7250    ) -> BOOL;
7251}