/*
 *  winuser.h   Win32 user interface functions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2026 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _WINUSER_
#define _WINUSER_

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#include <tvout.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Define default Windows version number. */
#ifndef WINVER
    #define WINVER          0x0400
#endif

/* Macro to specify user functions */
#define WINUSERAPI  DECLSPEC_IMPORT

/* Handle data type used with DeferWindowPos(), etc. */
typedef HANDLE  HDWP;

/* Handle to a device notification */
#if (WINVER >= 0x0500)
typedef PVOID       HDEVNOTIFY;
typedef HDEVNOTIFY  *PHDEVNOTIFY;
#endif

/* Handle to a power notification */
#if (_WIN32_WINNT >= 0x0502)
#ifndef _HPOWERNOTIFY_DEF_
#define _HPOWERNOTIFY_DEF_
typedef PVOID           HPOWERNOTIFY;
typedef HPOWERNOTIFY    *PHPOWERNOTIFY;
#endif
#endif

/* Raw input handle */
#if (_WIN32_WINNT >= 0x0501)
DECLARE_HANDLE( HRAWINPUT );
#endif

/* Touch input handle */
#if (WINVER >= 0x0601)
DECLARE_HANDLE( HTOUCHINPUT );
#endif

/* Gesture information handle */
#if (WINVER >= 0x0601)
DECLARE_HANDLE( HGESTUREINFO );
#endif

/* Macro to check whether a value is a resource identifier */
#define IS_INTRESOURCE( x ) ((((ULONG_PTR)(x)) >> 16) == 0)

/* Macro to define a resource identifier */
#define MAKEINTRESOURCEA( x )   ((LPSTR)(ULONG_PTR)(WORD)(x))
#define MAKEINTRESOURCEW( x )   ((LPWSTR)(ULONG_PTR)(WORD)(x))
#ifdef UNICODE
    #define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
    #define MAKEINTRESOURCE MAKEINTRESOURCEA
#endif

/* Macros to manipulate the parameters to WM_APPCOMMAND */
#if (_WIN32_WINNT >= 0x0500)
    #define GET_APPCOMMAND_LPARAM( x )  ((short)(HIWORD( x ) & ~FAPPCOMMAND_MASK))
    #define GET_DEVICE_LPARAM( x )      ((WORD)(HIWORD( x ) & FAPPCOMMAND_MASK))
    #define GET_MOUSEORKEY_LPARAM( x )  GET_DEVICE_LPARAM( x )
    #define GET_FLAGS_LPARAM( x )       LOWORD( x )
    #define GET_KEYSTATE_LPARAM( x )    GET_FLAGS_LPARAM( x )
#endif

/* Macros to convert between the POINT and POINTS structures */
#define POINTSTOPOINT( p1, p2 ) \
    { \
        (p1).x = (LONG)(SHORT)LOWORD( *(LONG *)&p2 ); \
        (p1).y = (LONG)(SHORT)HIWORD( *(LONG *)&p2 ); \
    }
#define POINTTOPOINTS( p )  MAKELONG( (short)((p).x), (short)((p).y) )

/* Macros to construct message parameters and results */
#define MAKEWPARAM( p1, p2 )    ((WPARAM)(DWORD)MAKELONG( p1, p2 ))
#define MAKELPARAM( p1, p2 )    ((LPARAM)(DWORD)MAKELONG( p1, p2 ))
#define MAKELRESULT( p1, p2 )   ((LRESULT)(DWORD)MAKELONG( p1, p2 ))

/* Macro to manipulate the parameters to WM_MOUSEWHEEL */
#if (_WIN32_WINNT >= 0x0400)
    #define GET_WHEEL_DELTA_WPARAM( x ) ((short)HIWORD( x ))
#endif

/* Macros to manipulate the parameters to the mouse message and WM_NCHITTEST */
#if (_WIN32_WINNT >= 0x0500)
    #define GET_KEYSTATE_WPARAM( x )    LOWORD( x )
    #define GET_NCHITTEST_WPARAM( x )   ((short)LOWORD( x ))
    #define GET_XBUTTON_WPARAM( x )     HIWORD( x )
#endif

/* Macro to convert touch coordinates to pixels */
#if (WINVER >= 0x0601)
    #define TOUCH_COORD_TO_PIXEL( x )   ((x) / 100)
#endif

/* Macro to manipulate the parameters to WM_SYSCOMMAND */
#define GET_SC_WPARAM( x )  ((int)(x) & 0x0000FFF0)

/* Macro to manipulate the parameters to WM_INPUT */
#if (_WIN32_WINNT >= 0x0501)
    #define GET_RAWINPUT_CODE_WPARAM( x )   ((x) & 0xFF)
#endif

/* Macro to manipulate the parameters to WM_INPUT_DEVICE_CHANGE */
#if (_WIN32_WINNT >= 0x0601)
    #define GET_DEVICE_CHANGE_WPARAM( x )   LOWORD( x )
#elif (_WIN32_WINNT >= 0x0501)
    #define GET_DEVICE_CHANGE_LPARAM( x )   LOWORD( x )
#endif

/* Macros to manipulate gesture parameters */
#if (WINVER >= 0x0601)
    #define GID_ROTATE_ANGLE_TO_ARGUMENT( x ) \
        ((USHORT)((((x) + 2.0 * 3.14159265) / (4.0 * 3.14159265)) * (65535.0))
    #define GID_ROATE_ANGLE_FROM_ARGUMENT( x ) \
        ((((double)(x) / 65536.0) * 4.0 * 3.14159265) - 2.0 * 3.14159265)
#endif

/* Resource types */
#define RT_CURSOR           MAKEINTRESOURCE( 1 )
#define RT_BITMAP           MAKEINTRESOURCE( 2 )
#define RT_ICON             MAKEINTRESOURCE( 3 )
#define RT_MENU             MAKEINTRESOURCE( 4 )
#define RT_DIALOG           MAKEINTRESOURCE( 5 )
#define RT_STRING           MAKEINTRESOURCE( 6 )
#define RT_FONTDIR          MAKEINTRESOURCE( 7 )
#define RT_FONT             MAKEINTRESOURCE( 8 )
#define RT_ACCELERATOR      MAKEINTRESOURCE( 9 )
#define RT_RCDATA           MAKEINTRESOURCE( 10 )
#define RT_MESSAGETABLE     MAKEINTRESOURCE( 11 )
#define RT_GROUP_CURSOR     MAKEINTRESOURCE( 12 )
#define RT_GROUP_ICON       MAKEINTRESOURCE( 14 )
#define RT_VERSION          MAKEINTRESOURCE( 16 )
#define RT_DLGINCLUDE       MAKEINTRESOURCE( 17 )
#if (WINVER >= 0x0400)
    #define RT_PLUGPLAY     MAKEINTRESOURCE( 19 )
    #define RT_VXD          MAKEINTRESOURCE( 20 )
    #define RT_ANICURSOR    MAKEINTRESOURCE( 21 )
    #define RT_ANIICON      MAKEINTRESOURCE( 22 )
#endif
#define RT_HTML             MAKEINTRESOURCE( 23 )
#define RT_MANIFEST         MAKEINTRESOURCE( 24 )

/* Manifest resource identifiers */
#define CREATEPROCESS_MANIFEST_RESOURCE_ID                  MAKEINTRESOURCE( 1 )
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID                 MAKEINTRESOURCE( 2 )
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID  MAKEINTRESOURCE( 3 )
#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID               MAKEINTRESOURCE( 1 )
#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID               MAKEINTRESOURCE( 16 )

/* Constant used with SPI_SETDESKWALLPAPER */
#define SETWALLPAPER_DEFAULT    ((LPWSTR)-1)

/* Scroll bar identifiers */
#define SB_HORZ 0
#define SB_VERT 1
#define SB_CTL  2
#define SB_BOTH 3

/* Scroll bar commands */
#define SB_LINEUP           0
#define SB_LINELEFT         0
#define SB_LINEDOWN         1
#define SB_LINERIGHT        1
#define SB_PAGEUP           2
#define SB_PAGELEFT         2
#define SB_PAGEDOWN         3
#define SB_PAGERIGHT        3
#define SB_THUMBPOSITION    4
#define SB_THUMBTRACK       5
#define SB_TOP              6
#define SB_LEFT             6
#define SB_BOTTOM           7
#define SB_RIGHT            7
#define SB_ENDSCROLL        8

/* ShowWindow() commands */
#define SW_HIDE             0
#define SW_SHOWNORMAL       1
#define SW_NORMAL           1
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SW_FORCEMINIMIZE    11
#define SW_MAX              11

/* Old names for ShowWindow() commands */
#define HIDE_WINDOW         0
#define SHOW_OPENWINDOW     1
#define SHOW_ICONWINDOW     2
#define SHOW_FULLSCREEN     3
#define SHOW_OPENNOACTIVATE 4

/* WM_SHOWWINDOW identifiers */
#define SW_PARENTCLOSING    1
#define SW_OTHERZOOM        2
#define SW_PARENTOPENING    3
#define SW_OTHERUNZOOM      4

/* AnimateWindow() commands */
#if (WINVER >= 0x0500)
    #define AW_HOR_POSITIVE 0x00000001L
    #define AW_HOR_NEGATIVE 0x00000002L
    #define AW_VER_POSITIVE 0x00000004L
    #define AW_VER_NEGATIVE 0x00000008L
    #define AW_CENTER       0x00000010L
    #define AW_HIDE         0x00010000L
    #define AW_ACTIVATE     0x00020000L
    #define AW_SLIDE        0x00040000L
    #define AW_BLEND        0x00080000L
#endif

/* Keyboard message flags */
#define KF_EXTENDED 0x0100
#define KF_DLGMODE  0x0800
#define KF_MENUMODE 0x1000
#define KF_ALTDOWN  0x2000
#define KF_REPEAT   0x4000
#define KF_UP       0x8000

/* Virtual key codes */
#define VK_LBUTTON                  0x01
#define VK_RBUTTON                  0x02
#define VK_CANCEL                   0x03
#define VK_MBUTTON                  0x04
#if (_WIN32_WINNT >= 0x0500)
    #define VK_XBUTTON1             0x05
    #define VK_XBUTTON2             0x06
#endif
#define VK_BACK                     0x08
#define VK_TAB                      0x09
#define VK_CLEAR                    0x0C
#define VK_RETURN                   0x0D
#define VK_SHIFT                    0x10
#define VK_CONTROL                  0x11
#define VK_MENU                     0x12
#define VK_PAUSE                    0x13
#define VK_CAPITAL                  0x14
#define VK_KANA                     0x15
#define VK_HANGEUL                  0x15
#define VK_HANGUL                   0x15
#define VK_JUNJA                    0x17
#define VK_FINAL                    0x18
#define VK_HANJA                    0x19
#define VK_KANJI                    0x19
#define VK_ESCAPE                   0x1B
#define VK_CONVERT                  0x1C
#define VK_NONCONVERT               0x1D
#define VK_ACCEPT                   0x1E
#define VK_MODECHANGE               0x1F
#define VK_SPACE                    0x20
#define VK_PRIOR                    0x21
#define VK_NEXT                     0x22
#define VK_END                      0x23
#define VK_HOME                     0x24
#define VK_LEFT                     0x25
#define VK_UP                       0x26
#define VK_RIGHT                    0x27
#define VK_DOWN                     0x28
#define VK_SELECT                   0x29
#define VK_PRINT                    0x2A
#define VK_EXECUTE                  0x2B
#define VK_SNAPSHOT                 0x2C
#define VK_INSERT                   0x2D
#define VK_DELETE                   0x2E
#define VK_HELP                     0x2F
#define VK_LWIN                     0x5B
#define VK_RWIN                     0x5C
#define VK_APPS                     0x5D
#define VK_SLEEP                    0x5F
#define VK_NUMPAD0                  0x60
#define VK_NUMPAD1                  0x61
#define VK_NUMPAD2                  0x62
#define VK_NUMPAD3                  0x63
#define VK_NUMPAD4                  0x64
#define VK_NUMPAD5                  0x65
#define VK_NUMPAD6                  0x66
#define VK_NUMPAD7                  0x67
#define VK_NUMPAD8                  0x68
#define VK_NUMPAD9                  0x69
#define VK_MULTIPLY                 0x6A
#define VK_ADD                      0x6B
#define VK_SEPARATOR                0x6C
#define VK_SUBTRACT                 0x6D
#define VK_DECIMAL                  0x6E
#define VK_DIVIDE                   0x6F
#define VK_F1                       0x70
#define VK_F2                       0x71
#define VK_F3                       0x72
#define VK_F4                       0x73
#define VK_F5                       0x74
#define VK_F6                       0x75
#define VK_F7                       0x76
#define VK_F8                       0x77
#define VK_F9                       0x78
#define VK_F10                      0x79
#define VK_F11                      0x7A
#define VK_F12                      0x7B
#define VK_F13                      0x7C
#define VK_F14                      0x7D
#define VK_F15                      0x7E
#define VK_F16                      0x7F
#define VK_F17                      0x80
#define VK_F18                      0x81
#define VK_F19                      0x82
#define VK_F20                      0x83
#define VK_F21                      0x84
#define VK_F22                      0x85
#define VK_F23                      0x86
#define VK_F24                      0x87
#define VK_NUMLOCK                  0x90
#define VK_SCROLL                   0x91
#define VK_OEM_NEC_EQUAL            0x92
#define VK_OEM_FJ_JISHO             0x92
#define VK_OEM_FJ_MASSHOU           0x93
#define VK_OEM_FJ_TOUROKU           0x94
#define VK_OEM_FJ_LOYA              0x95
#define VK_OEM_FJ_ROYA              0x96
#define VK_LSHIFT                   0xA0
#define VK_RSHIFT                   0xA1
#define VK_LCONTROL                 0xA2
#define VK_RCONTROL                 0xA3
#define VK_LMENU                    0xA4
#define VK_RMENU                    0xA5
#if (_WIN32_WINNT >= 0x0500)
    #define VK_BROWSER_BACK         0xA6
    #define VK_BROWSER_FORWARD      0xA7
    #define VK_BROWSER_REFRESH      0xA8
    #define VK_BROWSER_STOP         0xA9
    #define VK_BROWSER_SEARCH       0xAA
    #define VK_BROWSER_FAVORITES    0xAB
    #define VK_BROWSER_HOME         0xAC
    #define VK_VOLUME_MUTE          0xAD
    #define VK_VOLUME_DOWN          0xAE
    #define VK_VOLUME_UP            0xAF
    #define VK_MEDIA_NEXT_TRACK     0xB0
    #define VK_MEDIA_PREV_TRACK     0xB1
    #define VK_MEDIA_STOP           0xB2
    #define VK_MEDIA_PLAY_PAUSE     0xB3
    #define VK_LAUNCH_MAIL          0xB4
    #define VK_LAUNCH_MEDIA_SELECT  0xB5
    #define VK_LAUNCH_APP1          0xB6
    #define VK_LAUNCH_APP2          0xB7
#endif
#define VK_OEM_1                    0xBA
#define VK_OEM_PLUS                 0xBB
#define VK_OEM_COMMA                0xBC
#define VK_OEM_MINUS                0xBD
#define VK_OEM_PERIOD               0xBE
#define VK_OEM_2                    0xBF
#define VK_OEM_3                    0xC0
#define VK_OEM_4                    0xDB
#define VK_OEM_5                    0xDC
#define VK_OEM_6                    0xDD
#define VK_OEM_7                    0xDE
#define VK_OEM_8                    0xDF
#define VK_OEM_AX                   0xE1
#define VK_OEM_102                  0xE2
#define VK_ICO_HELP                 0xE3
#define VK_ICO_00                   0xE4
#if (WINVER >= 0x0400)
    #define VK_PROCESSKEY           0xE5
#endif
#define VK_ICO_CLEAR                0xE6
#if (_WIN32_WINNT >= 0x0500)
    #define VK_PACKET               0xE7
#endif
#define VK_OEM_RESET                0xE9
#define VK_OEM_JUMP                 0xEA
#define VK_OEM_PA1                  0xEB
#define VK_OEM_PA2                  0xEC
#define VK_OEM_PA3                  0xED
#define VK_OEM_WSCTRL               0xEE
#define VK_OEM_CUSEL                0xEF
#define VK_OEM_ATTN                 0xF0
#define VK_OEM_FINISH               0xF1
#define VK_OEM_COPY                 0xF2
#define VK_OEM_AUTO                 0xF3
#define VK_OEM_ENLW                 0xF4
#define VK_OEM_BACKTAB              0xF5
#define VK_ATTN                     0xF6
#define VK_CRSEL                    0xF7
#define VK_EXSEL                    0xF8
#define VK_EREOF                    0xF9
#define VK_PLAY                     0xFA
#define VK_ZOOM                     0xFB
#define VK_NONAME                   0xFC
#define VK_PA1                      0xFD
#define VK_OEM_CLEAR                0xFE

/* Hook types */
#define WH_MIN                  (-1)
#define WH_MSGFILTER            (-1)
#define WH_JOURNALRECORD        0
#define WH_JOURNALPLAYBACK      1
#define WH_KEYBOARD             2
#define WH_GETMESSAGE           3
#define WH_CALLWNDPROC          4
#define WH_CBT                  5
#define WH_SYSMSGFILTER         6
#define WH_MOUSE                7
#define WH_HARDWARE             8
#define WH_DEBUG                9
#define WH_SHELL                10
#define WH_FOREGROUNDIDLE       11
#if (WINVER >= 0x0400)
    #define WH_CALLWNDPROCRET   12
#endif
#if (_WIN32_WINNT >= 0x0400)
    #define WH_KEYBOARD_LL      13
    #define WH_MOUSE_LL         14
    #define WH_MAX              14
#elif (WINVER >= 0x0400)
    #define WH_MAX              12
#else
    #define WH_MAX              11
#endif
#define WH_MINHOOK              WH_MIN
#define WH_MAXHOOK              WH_MAX

/* Hook codes */
#define HC_ACTION       0
#define HC_GETNEXT      1
#define HC_SKIP         2
#define HC_NOREMOVE     3
#define HC_NOREM        HC_NOREMOVE
#define HC_SYSMODALON   4
#define HC_SYSMODALOFF  5

/* CBT hook codes */
#define HCBT_MOVESIZE       0
#define HCBT_MINMAX         1
#define HCBT_QS             2
#define HCBT_CREATEWND      3
#define HCBT_DESTROYWND     4
#define HCBT_ACTIVATE       5
#define HCBT_CLICKSKIPPED   6
#define HCBT_KEYSKIPPED     7
#define HCBT_SYSCOMMAND     8
#define HCBT_SETFOCUS       9

/* WM_WTSSESSION_CHANGE codes */
#if (_WIN32_WINNT >= 0x0501)
    #define WTS_CONSOLE_CONNECT         0x00000001
    #define WTS_CONSOLE_DISCONNECT      0x00000002
    #define WTS_REMOTE_CONNECT          0x00000003
    #define WTS_REMOTE_DISCONNECT       0x00000004
    #define WTS_SESSION_LOGON           0x00000005
    #define WTS_SESSION_LOGOFF          0x00000006
    #define WTS_SESSION_LOCK            0x00000007
    #define WTS_SESSION_UNLOCK          0x00000008
    #define WTS_SESSION_REMOTE_CONTROL  0x00000009
#endif

/* Message filter codes */
#define MSGF_DIALOGBOX  0
#define MSGF_MESSAGEBOX 1
#define MSGF_MENU       2
#define MSGF_SCROLLBAR  5
#define MSGF_NEXTWINDOW 6
#define MSGF_MAX        8
#define MSGF_USER       4096

/* Shell hook codes */
#define HSHELL_WINDOWCREATED            1
#define HSHELL_WINDOWDESTROYED          2
#define HSHELL_ACTIVATESHELLWINDOW      3
#if (WINVER >= 0x0400)
    #define HSHELL_WINDOWACTIVATED      4
    #define HSHELL_GETMINRECT           5
    #define HSHELL_REDRAW               6
    #define HSHELL_TASKMAN              7
    #define HSHELL_LANGUAGE             8
    #define HSHELL_SYSMENU              9
    #define HSHELL_ENDTASK              10
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define HSHELL_ACCESSIBILITYSTATE   11
    #define HSHELL_APPCOMMAND           12
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define HSHELL_WINDOWREPLACED       13
    #define HSHELL_WINDOWREPLACING      14
#endif
#define HSHELL_HIGHBIT                  0x8000
#if (WINVER >= 0x0400)
    #define HSHELL_FLASH                (HSHELL_REDRAW | HSHELL_HIGHBIT)
    #define HSHELL_RUDEAPPACTIVATED     (HSHELL_WINDOWACTIVATED | HSHELL_HIGHBIT)
#endif

/* Accessibility state parameters */
#if (_WIN32_WINNT >= 0x0500)
    #define ACCESS_STICKYKEYS   0x0001
    #define ACCESS_FILTERKEYS   0x0002
    #define ACCESS_MOUSEKEYS    0x0003
#endif

/* WM_APPCOMMAND commands */
#if (_WIN32_WINNT >= 0x0500)
    #define APPCOMMAND_BROWSER_BACKWARD                     1
    #define APPCOMMAND_BROWSER_FORWARD                      2
    #define APPCOMMAND_BROWSER_REFRESH                      3
    #define APPCOMMAND_BROWSER_STOP                         4
    #define APPCOMMAND_BROWSER_SEARCH                       5
    #define APPCOMMAND_BROWSER_FAVORITES                    6
    #define APPCOMMAND_BROWSER_HOME                         7
    #define APPCOMMAND_VOLUME_MUTE                          8
    #define APPCOMMAND_VOLUME_DOWN                          9
    #define APPCOMMAND_VOLUME_UP                            10
    #define APPCOMMAND_MEDIA_NEXTTRACK                      11
    #define APPCOMMAND_MEDIA_PREVIOUSTRACK                  12
    #define APPCOMMAND_MEDIA_STOP                           13
    #define APPCOMMAND_MEDIA_PLAY_PAUSE                     14
    #define APPCOMMAND_LAUNCH_MAIL                          15
    #define APPCOMMAND_LAUNCH_MEDIA_SELECT                  16
    #define APPCOMMAND_LAUNCH_APP1                          17
    #define APPCOMMAND_LAUNCH_APP2                          18
    #define APPCOMMAND_BASS_DOWN                            19
    #define APPCOMMAND_BASS_BOOST                           20
    #define APPCOMMAND_BASS_UP                              21
    #define APPCOMMAND_TREBLE_DOWN                          22
    #define APPCOMMAND_TREBLE_UP                            23
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define APPCOMMAND_MICROPHONE_VOLUME_MUTE               24
    #define APPCOMMAND_MICROPHONE_VOLUME_DOWN               25
    #define APPCOMMAND_MICROPHONE_VOLUME_UP                 26
    #define APPCOMMAND_HELP                                 27
    #define APPCOMMAND_FIND                                 28
    #define APPCOMMAND_NEW                                  29
    #define APPCOMMAND_OPEN                                 30
    #define APPCOMMAND_CLOSE                                31
    #define APPCOMMAND_SAVE                                 32
    #define APPCOMMAND_PRINT                                33
    #define APPCOMMAND_UNDO                                 34
    #define APPCOMMAND_REDO                                 35
    #define APPCOMMAND_COPY                                 36
    #define APPCOMMAND_CUT                                  37
    #define APPCOMMAND_PASTE                                38
    #define APPCOMMAND_REPLY_TO_MAIL                        39
    #define APPCOMMAND_FORWARD_MAIL                         40
    #define APPCOMMAND_SEND_MAIL                            41
    #define APPCOMMAND_SPELL_CHECK                          42
    #define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE    43
    #define APPCOMMAND_MIC_ON_OFF_TOGGLE                    44
    #define APPCOMMAND_CORRECTION_LIST                      45
    #define APPCOMMAND_MEDIA_PLAY                           46
    #define APPCOMMAND_MEDIA_PAUSE                          47
    #define APPCOMMAND_MEDIA_RECORD                         48
    #define APPCOMMAND_MEDIA_FAST_FORWARD                   49
    #define APPCOMMAND_MEDIA_REWIND                         50
    #define APPCOMMAND_MEDIA_CHANNEL_UP                     51
    #define APPCOMMAND_MEDIA_CHANNEL_DOWN                   52
#endif
#if (_WIN32_WINNT >= 0x0600)
    #define APPCOMMAND_DELETE                               53
    #define APPCOMMAND_DWM_FLIP3D                           54
#endif

/* WM_APPCOMMAND device flags */
#if (_WIN32_WINNT >= 0x0500)
    #define FAPPCOMMAND_MOUSE   0x8000
    #define FAPPCOMMAND_KEY     0x0000
    #define FAPPCOMMAND_OEM     0x1000
    #define FAPPCOMMAND_MASK    0xF000
#endif

/* Low level keyboard hook flags */
#if (_WIN32_WINNT >= 0x0400)
    #define LLKHF_EXTENDED  (KF_EXTENDED >> 8)
    #define LLKHF_INJECTED  0x00000010L
    #define LLKHF_ALTDOWN   (KF_ALTDOWN >> 8)
    #define LLKHF_UP        (KF_UP >> 8)
#endif

/* Low level mouse hook flags */
#if (_WIN32_WINNT >= 0x0400)
    #define LLMHF_INJECTED  0x00000001L
#endif

/* Special keyboard layout handle values */
#define HKL_PREV    0
#define HKL_NEXT    1

/* Keyboard layout flags */
#define KLF_ACTIVATE            0x00000001
#define KLF_SUBSTITUTE_OK       0x00000002
#define KLF_REORDER             0x00000008
#if (WINVER >= 0x0400)
    #define KLF_REPLACELANG     0x00000010
    #define KLF_NOTELLSHELL     0x00000080
#endif
#define KLF_SETFORPROCESS       0x00000100
#if (_WIN32_WINNT >= 0x0500)
    #define KLF_SHIFTLOCK       0x00010000
    #define KLF_RESET           0x40000000
#endif

/* WM_INPUTLANGCHANGEREQUEST flags */
#if (WINVER >= 0x0500)
    #define INPUTLANGCHANGE_SYSCHARSET  0x0001
    #define INPUTLANGCHANGE_FORWARD     0x0002
    #define INPUTLANGCHANGE_BACKWARD    0x0004
#endif

/* Keyboard layout name length */
#define KL_NAMELENGTH   9

/* GetMouseMovePointsEx() resolutions */
#if (WINVER >= 0x0500)
    #define GMMP_USE_DISPLAY_POINTS         1L
    #define GMMP_USE_HIGH_RESOLUTION_POINTS 2L
#endif

/* Desktop access rights */
#define DESKTOP_READOBJECTS     0x0001L
#define DESKTOP_CREATEWINDOW    0x0002L
#define DESKTOP_CREATEMENU      0x0004L
#define DESKTOP_HOOKCONTROL     0x0008L
#define DESKTOP_JOURNALRECORD   0x0010L
#define DESKTOP_JOURNALPLAYBACK 0x0020L
#define DESKTOP_ENUMERATE       0x0040L
#define DESKTOP_WRITEOBJECTS    0x0080L
#define DESKTOP_SWITCHDESKTOP   0x0100L

/* CreateDesktop() flags */
#define DF_ALLOWOTHERACCOUNTHOOK    0x00000001L

/* Window station access rights */
#define WINSTA_ENUMDESKTOPS         0x0001L
#define WINSTA_READATTRIBUTES       0x0002L
#define WINSTA_ACCESSCLIPBOARD      0x0004L
#define WINSTA_CREATEDESKTOP        0x0008L
#define WINSTA_WRITEATTRIBUTES      0x0010L
#define WINSTA_ACCESSGLOBALATOMS    0x0020L
#define WINSTA_EXITWINDOWS          0x0040L
#define WINSTA_ENUMERATE            0x0100L
#define WINSTA_READSCREEN           0x0200L
#define WINSTA_ALL_ACCESS \
    (WINSTA_ENUMDESKTOPS | WINSTA_READATTRIBUTES | WINSTA_ACCESSCLIPBOARD | \
    WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES | WINSTA_ACCESSGLOBALATOMS | \
    WINSTA_EXITWINDOWS | WINSTA_ENUMERATE | WINSTA_READSCREEN)

/* CreateWindowStation() flags */
#define CWF_CREATE_ONLY 0x00000001L

/* Window station flags */
#define WSF_VISIBLE 0x00000001L

/* User object information types */
#define UOI_FLAGS           1
#define UOI_NAME            2
#define UOI_TYPE            3
#define UOI_USER_SID        4
#if (WINVER >= 0x0600)
    #define UOI_HEAPSIZE    5
    #define UOI_IO          6
#endif

/* GetWindowLong() offsets */
#define GWL_WNDPROC     (-4)
#define GWL_HINSTANCE   (-6)
#define GWL_HWNDPARENT  (-8)
#define GWL_ID          (-12)
#define GWL_STYLE       (-16)
#define GWL_EXSTYLE     (-20)
#define GWL_USERDATA    (-21)

/* GetWindowLongPtr() offsets */
#define GWLP_WNDPROC    (-4)
#define GWLP_HINSTANCE  (-6)
#define GWLP_HWNDPARENT (-8)
#define GWLP_ID         (-12)
#define GWLP_USERDATA   (-21)

/* GetClassLong() and GetClassWord() offsets */
#define GCL_MENUNAME        (-8)
#define GCL_HBRBACKGROUND   (-10)
#define GCL_HCURSOR         (-12)
#define GCL_HICON           (-14)
#define GCL_HMODULE         (-16)
#define GCL_CBWNDEXTRA      (-18)
#define GCL_CBCLSEXTRA      (-20)
#define GCL_WNDPROC         (-24)
#define GCL_STYLE           (-26)
#define GCW_ATOM            (-32)
#if (WINVER >= 0x0400)
    #define GCL_HICONSM     (-34)
#endif

/* GetClassLongPtr() offsets */
#define GCLP_MENUNAME       (-8)
#define GCLP_HBRBACKGROUND  (-10)
#define GCLP_HCURSOR        (-12)
#define GCLP_HICON          (-14)
#define GCLP_HMODULE        (-16)
#define GCLP_WNDPROC        (-24)
#define GCLP_HICONSM        (-34)

/* Window messages */
#define WM_NULL                                 0x0000
#define WM_CREATE                               0x0001
#define WM_DESTROY                              0x0002
#define WM_MOVE                                 0x0003
#define WM_SIZE                                 0x0005
#define WM_ACTIVATE                             0x0006
#define WM_SETFOCUS                             0x0007
#define WM_KILLFOCUS                            0x0008
#define WM_ENABLE                               0x000A
#define WM_SETREDRAW                            0x000B
#define WM_SETTEXT                              0x000C
#define WM_GETTEXT                              0x000D
#define WM_GETTEXTLENGTH                        0x000E
#define WM_PAINT                                0x000F
#define WM_CLOSE                                0x0010
#define WM_QUERYENDSESSION                      0x0011
#define WM_QUIT                                 0x0012
#define WM_QUERYOPEN                            0x0013
#define WM_ERASEBKGND                           0x0014
#define WM_SYSCOLORCHANGE                       0x0015
#define WM_ENDSESSION                           0x0016
#define WM_SHOWWINDOW                           0x0018
#define WM_WININICHANGE                         0x001A
#if (WINVER >= 0x0400)
    #define WM_SETTINGCHANGE                    WM_WININICHANGE
#endif
#define WM_DEVMODECHANGE                        0x001B
#define WM_ACTIVATEAPP                          0x001C
#define WM_FONTCHANGE                           0x001D
#define WM_TIMECHANGE                           0x001E
#define WM_CANCELMODE                           0x001F
#define WM_SETCURSOR                            0x0020
#define WM_MOUSEACTIVATE                        0x0021
#define WM_CHILDACTIVATE                        0x0022
#define WM_QUEUESYNC                            0x0023
#define WM_GETMINMAXINFO                        0x0024
#define WM_PAINTICON                            0x0026
#define WM_ICONERASEBKGND                       0x0027
#define WM_NEXTDLGCTL                           0x0028
#define WM_SPOOLERSTATUS                        0x002A
#define WM_DRAWITEM                             0x002B
#define WM_MEASUREITEM                          0x002C
#define WM_DELETEITEM                           0x002D
#define WM_VKEYTOITEM                           0x002E
#define WM_CHARTOITEM                           0x002F
#define WM_SETFONT                              0x0030
#define WM_GETFONT                              0x0031
#define WM_SETHOTKEY                            0x0032
#define WM_GETHOTKEY                            0x0033
#define WM_QUERYDRAGICON                        0x0037
#define WM_COMPAREITEM                          0x0039
#if (WINVER >= 0x0500)
    #define WM_GETOBJECT                        0x003D
#endif
#define WM_COMPACTING                           0x0041
#define WM_COMMNOTIFY                           0x0044
#define WM_WINDOWPOSCHANGING                    0x0046
#define WM_WINDOWPOSCHANGED                     0x0047
#define WM_POWER                                0x0048
#define WM_COPYDATA                             0x004A
#define WM_CANCELJOURNAL                        0x004B
#if (WINVER >= 0x0400)
    #define WM_NOTIFY                           0x004E
    #define WM_INPUTLANGCHANGEREQUEST           0x0050
    #define WM_INPUTLANGCHANGE                  0x0051
    #define WM_TCARD                            0x0052
    #define WM_HELP                             0x0053
    #define WM_USERCHANGED                      0x0054
    #define WM_NOTIFYFORMAT                     0x0055
    #define WM_CONTEXTMENU                      0x007B
    #define WM_STYLECHANGING                    0x007C
    #define WM_STYLECHANGED                     0x007D
    #define WM_DISPLAYCHANGE                    0x007E
    #define WM_GETICON                          0x007F
    #define WM_SETICON                          0x0080
#endif
#define WM_NCCREATE                             0x0081
#define WM_NCDESTROY                            0x0082
#define WM_NCCALCSIZE                           0x0083
#define WM_NCHITTEST                            0x0084
#define WM_NCPAINT                              0x0085
#define WM_NCACTIVATE                           0x0086
#define WM_GETDLGCODE                           0x0087
#define WM_SYNCPAINT                            0x0088
#define WM_NCMOUSEMOVE                          0x00A0
#define WM_NCLBUTTONDOWN                        0x00A1
#define WM_NCLBUTTONUP                          0x00A2
#define WM_NCLBUTTONDBLCLK                      0x00A3
#define WM_NCRBUTTONDOWN                        0x00A4
#define WM_NCRBUTTONUP                          0x00A5
#define WM_NCRBUTTONDBLCLK                      0x00A6
#define WM_NCMBUTTONDOWN                        0x00A7
#define WM_NCMBUTTONUP                          0x00A8
#define WM_NCMBUTTONDBLCLK                      0x00A9
#if (_WIN32_WINNT >= 0x0500)
    #define WM_NCXBUTTONDOWN                    0x00AB
    #define WM_NCXBUTTONUP                      0x00AC
    #define WM_NCXBUTTONDBLCLK                  0x00AD
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define WM_INPUT_DEVICE_CHANGE              0x00FE
    #define WM_INPUT                            0x00FF
#endif
#define WM_KEYFIRST                             0x0100
#define WM_KEYDOWN                              0x0100
#define WM_KEYUP                                0x0101
#define WM_CHAR                                 0x0102
#define WM_DEADCHAR                             0x0103
#define WM_SYSKEYDOWN                           0x0104
#define WM_SYSKEYUP                             0x0105
#define WM_SYSCHAR                              0x0106
#define WM_SYSDEADCHAR                          0x0107
#if (_WIN32_WINNT >= 0x0501)
    #define WM_UNICHAR                          0x0109
    #define WM_KEYLAST                          0x0109
#else
    #define WM_KEYLAST                          0x0108
#endif
#if (WINVER >= 0x0400)
    #define WM_IME_STARTCOMPOSITION             0x010D
    #define WM_IME_ENDCOMPOSITION               0x010E
    #define WM_IME_COMPOSITION                  0x010F
    #define WM_IME_KEYLAST                      0x010F
#endif
#define WM_INITDIALOG                           0x0110
#define WM_COMMAND                              0x0111
#define WM_SYSCOMMAND                           0x0112
#define WM_TIMER                                0x0113
#define WM_HSCROLL                              0x0114
#define WM_VSCROLL                              0x0115
#define WM_INITMENU                             0x0116
#define WM_INITMENUPOPUP                        0x0117
#if (WINVER >= 0x0601)
    #define WM_GESTURE                          0x0119
    #define WM_GESTUREINPUT                     0x011A
#endif
#define WM_MENUSELECT                           0x011F
#define WM_MENUCHAR                             0x0120
#define WM_ENTERIDLE                            0x0121
#if (WINVER >= 0x0500)
    #define WM_MENURBUTTONUP                    0x0122
    #define WM_MENUDRAG                         0x0123
    #define WM_MENUGETOBJECT                    0x0124
    #define WM_UNINITMENUPOPUP                  0x0125
    #define WM_MENUCOMMAND                      0x0126
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define WM_CHANGEUISTATE                    0x0127
    #define WM_UPDATEUISTATE                    0x0128
    #define WM_QUERYUISTATE                     0x0129
#endif
#define WM_CTLCOLORMSGBOX                       0x0132
#define WM_CTLCOLOREDIT                         0x0133
#define WM_CTLCOLORLISTBOX                      0x0134
#define WM_CTLCOLORBTN                          0x0135
#define WM_CTLCOLORDLG                          0x0136
#define WM_CTLCOLORSCROLLBAR                    0x0137
#define WM_CTLCOLORSTATIC                       0x0138
#define MN_GETHMENU                             0x01E1
#define WM_MOUSEFIRST                           0x0200
#define WM_MOUSEMOVE                            0x0200
#define WM_LBUTTONDOWN                          0x0201
#define WM_LBUTTONUP                            0x0202
#define WM_LBUTTONDBLCLK                        0x0203
#define WM_RBUTTONDOWN                          0x0204
#define WM_RBUTTONUP                            0x0205
#define WM_RBUTTONDBLCLK                        0x0206
#define WM_MBUTTONDOWN                          0x0207
#define WM_MBUTTONUP                            0x0208
#define WM_MBUTTONDBLCLK                        0x0209
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
    #define WM_MOUSEWHEEL                       0x020A
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define WM_XBUTTONDOWN                      0x020B
    #define WM_XBUTTONUP                        0x020C
    #define WM_XBUTTONDBLCLK                    0x020D
#endif
#if (_WIN32_WINNT >= 0x0600)
    #define WM_MOUSEHWHEEL                      0x020E
    #define WM_MOUSELAST                        0x020E
#elif (_WIN32_WINNT >= 0x0500)
    #define WM_MOUSELAST                        0x020D
#elif (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
    #define WM_MOUSELAST                        0x020A
#else
    #define WM_MOUSELAST                        0x0209
#endif
#define WM_PARENTNOTIFY                         0x0210
#define WM_ENTERMENULOOP                        0x0211
#define WM_EXITMENULOOP                         0x0212
#if (WINVER >= 0x0400)
    #define WM_NEXTMENU                         0x0213
    #define WM_SIZING                           0x0214
    #define WM_CAPTURECHANGED                   0x0215
    #define WM_MOVING                           0x0216
    #define WM_POWERBROADCAST                   0x0218
    #define WM_DEVICECHANGE                     0x0219
#endif
#define WM_MDICREATE                            0x0220
#define WM_MDIDESTROY                           0x0221
#define WM_MDIACTIVATE                          0x0222
#define WM_MDIRESTORE                           0x0223
#define WM_MDINEXT                              0x0224
#define WM_MDIMAXIMIZE                          0x0225
#define WM_MDITILE                              0x0226
#define WM_MDICASCADE                           0x0227
#define WM_MDIICONARRANGE                       0x0228
#define WM_MDIGETACTIVE                         0x0229
#define WM_MDISETMENU                           0x0230
#define WM_ENTERSIZEMOVE                        0x0231
#define WM_EXITSIZEMOVE                         0x0232
#define WM_DROPFILES                            0x0233
#define WM_MDIREFRESHMENU                       0x0234
#if (WINVER >= 0x0601)
    #define WM_TOUCH                            0x0240
#endif
#if (WINVER >= 0x0400)
    #define WM_IME_SETCONTEXT                   0x0281
    #define WM_IME_NOTIFY                       0x0282
    #define WM_IME_CONTROL                      0x0283
    #define WM_IME_COMPOSITIONFULL              0x0284
    #define WM_IME_SELECT                       0x0285
    #define WM_IME_CHAR                         0x0286
#endif
#if (WINVER >= 0x0500)
    #define WM_IME_REQUEST                      0x0288
#endif
#if (WINVER >= 0x0400)
    #define WM_IME_KEYDOWN                      0x0290
    #define WM_IME_KEYUP                        0x0291
#endif
#if (WINVER >= 0x0500)
    #define WM_NCMOUSEHOVER                     0x02A0
#endif
#if (_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500)
    #define WM_MOUSEHOVER                       0x02A1
#endif
#if (WINVER >= 0x0500)
    #define WM_NCMOUSELEAVE                     0x02A2
#endif
#if (_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500)
    #define WM_MOUSELEAVE                       0x02A3
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define WM_WTSSESSION_CHANGE                0x02B1
    #define WM_TABLET_FIRST                     0x02C0
    #define WM_TABLET_LAST                      0x02DF
#endif
#define WM_CUT                                  0x0300
#define WM_COPY                                 0x0301
#define WM_PASTE                                0x0302
#define WM_CLEAR                                0x0303
#define WM_UNDO                                 0x0304
#define WM_RENDERFORMAT                         0x0305
#define WM_RENDERALLFORMATS                     0x0306
#define WM_DESTROYCLIPBOARD                     0x0307
#define WM_DRAWCLIPBOARD                        0x0308
#define WM_PAINTCLIPBOARD                       0x0309
#define WM_VSCROLLCLIPBOARD                     0x030A
#define WM_SIZECLIPBOARD                        0x030B
#define WM_ASKCBFORMATNAME                      0x030C
#define WM_CHANGECBCHAIN                        0x030D
#define WM_HSCROLLCLIPBOARD                     0x030E
#define WM_QUERYNEWPALETTE                      0x030F
#define WM_PALETTEISCHANGING                    0x0310
#define WM_PALETTECHANGED                       0x0311
#define WM_HOTKEY                               0x0312
#if (WINVER >= 0x0400)
    #define WM_PRINT                            0x0317
    #define WM_PRINTCLIENT                      0x0318
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define WM_APPCOMMAND                       0x0319
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define WM_THEMECHANGED                     0x031A
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define WM_CLIPBOARDUPDATE                  0x031D
#endif
#if (_WIN32_WINNT >= 0x0600)
    #define WM_DWMCOMPOSITIONCHANGED            0x031E
    #define WM_DWMNCRENDERINGCHANGED            0x031F
    #define WM_DWMCOLORIZATIONCOLORCHANGED      0x0320
    #define WM_DWMWINDOWMAXIMIZEDCHANGE         0x0321
#endif
#if (_WIN32_WINNT >= 0x0601)
    #define WM_DWMSENDICONICTHUMBNAIL           0x0323
    #define WM_DWMSENDICONICLIVEPREVIEWBITMAP   0x0326
#endif
#if (WINVER >= 0x0600)
    #define WM_GETTITLEBARINFOEX                0x033F
#endif
#if (WINVER >= 0x0400)
    #define WM_HANDHELDFIRST                    0x0358
    #define WM_HANDHELDLAST                     0x035F
    #define WM_AFXFIRST                         0x0360
    #define WM_AFXLAST                          0x037F
#endif
#define WM_PENWINFIRST                          0x0380
#define WM_PENWINLAST                           0x038F
#define WM_USER                                 0x0400
#if (WINVER >= 0x0400)
    #define WM_APP                              0x8000
#endif

/* WM_ACTIVATE states */
#define WA_INACTIVE     0
#define WA_ACTIVE       1
#define WA_CLICKACTIVE  2

/* WM_POWER return values */
#define PWR_OK      1
#define PWR_FAIL    (-1)

/* WM_POWER notification codes */
#define PWR_SUSPENDREQUEST  1
#define PWR_SUSPENDRESUME   2
#define PWR_CRITICALRESUME  3

/* WM_NOTIFYFORMAT return values */
#if (WINVER >= 0x0400)
    #define NFR_ANSI    1
    #define NFR_UNICODE 2
#endif

/* WM_NOTIFYFORMAT notification codes */
#if (WINVER >= 0x0400)
    #define NF_QUERY    3
    #define NF_REQUERY  4
#endif

/* WM_UNICHAR special value */
#if (_WIN32_WINNT >= 0x0501)
    #define UNICODE_NOCHAR  0xFFFF
#endif

/* UI states */
#if (_WIN32_WINNT >= 0x0500)
    #define UIS_SET         1
    #define UIS_CLEAR       2
    #define UIS_INITIALIZE  3
#endif

/* UI state flags */
#if (_WIN32_WINNT >= 0x0500)
    #define UISF_HIDEFOCUS  0x0001
    #define UISF_HIDEACCEL  0x0002
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define UISF_ACTIVE     0x0004
#endif

/* Constant used with WM_MOUSEWHEEL */
#if (_WIN32_WINNT >= 0x0400)
    #define WHEEL_DELTA 120
#endif

/* Constant used with SPI_GETWHEELSCROLLLINES and SPI_SETWHEELSCROLLLINES */
#if (_WIN32_WINNT >= 0x0400)
    #define WHEEL_PAGESCROLL    UINT_MAX
#endif

/* X button identifiers */
#if (_WIN32_WINNT >= 0x0500)
    #define XBUTTON1    0x0001
    #define XBUTTON2    0x0002
#endif

/* Power management events */
#if (WINVER >= 0x0400)
    #define PBT_APMQUERYSUSPEND         0x0000
    #define PBT_APMQUERYSTANDBY         0x0001
    #define PBT_APMQUERYSUSPENDFAILED   0x0002
    #define PBT_APMQUERYSTANDBYFAILED   0x0003
    #define PBT_APMSUSPEND              0x0004
    #define PBT_APMSTANDBY              0x0005
    #define PBT_APMRESUMECRITICAL       0x0006
    #define PBT_APMRESUMESUSPEND        0x0007
    #define PBT_APMRESUMESTANDBY        0x0008
    #define PBT_APMBATTERYLOW           0x0009
    #define PBT_APMPOWERSTATUSCHANGE    0x000A
    #define PBT_APMOEMEVENT             0x000B
    #define PBT_APMRESUMEAUTOMATIC      0x0012
    #if (_WIN32_WINNT >= 0x0502)
        #define PBT_POWERSETTINGCHANGE  0x8013
    #endif
#endif

/* WM_POWERBROADCAST flags */
#if (WINVER >= 0x0400)
    #define PBTF_APMRESUMEFROMFAILURE   0x00000001L
#endif

/* WM_SIZING codes */
#if (WINVER >= 0x0400)
    #define WMSZ_LEFT           1
    #define WMSZ_RIGHT          2
    #define WMSZ_TOP            3
    #define WMSZ_TOPLEFT        4
    #define WMSZ_TOPRIGHT       5
    #define WMSZ_BOTTOM         6
    #define WMSZ_BOTTOMLEFT     7
    #define WMSZ_BOTTOMRIGHT    8
#endif

/* WM_NCHITTEST codes */
#define HTERROR         (-2)
#define HTTRANSPARENT   (-1)
#define HTNOWHERE       0
#define HTCLIENT        1
#define HTCAPTION       2
#define HTSYSMENU       3
#define HTGROWBOX       4
#define HTSIZE          HTGROWBOX
#define HTMENU          5
#define HTHSCROLL       6
#define HTVSCROLL       7
#define HTMINBUTTON     8
#define HTMAXBUTTON     9
#define HTLEFT          10
#define HTRIGHT         11
#define HTTOP           12
#define HTTOPLEFT       13
#define HTTOPRIGHT      14
#define HTBOTTOM        15
#define HTBOTTOMLEFT    16
#define HTBOTTOMRIGHT   17
#define HTBORDER        18
#define HTREDUCE        HTMINBUTTON
#define HTZOOM          HTMAXBUTTON
#define HTSIZEFIRST     HTLEFT
#define HTSIZELAST      HTBOTTOMRIGHT
#if (WINVER >= 0x0400)
    #define HTOBJECT    19
    #define HTCLOSE     20
    #define HTHELP      21
#endif

/* SendMessageTimeout() flags */
#define SMTO_NORMAL                 0x0000
#define SMTO_BLOCK                  0x0001
#define SMTO_ABORTIFHUNG            0x0002
#if (WINVER >= 0x0500)
    #define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
#endif
#if (WINVER >= 0x0600)
    #define SMTO_ERRORONEXIT        0x0020
#endif

/* WM_MOUSEACTIVATE return values */
#define MA_ACTIVATE         1L
#define MA_ACTIVATEANDEAT   2L
#define MA_NOACTIVATE       3L
#define MA_NOACTIVATEANDEAT 4L

/* Icon types */
#define ICON_SMALL      0
#define ICON_BIG        1
#if (_WIN32_WINNT >= 0x0501)
    #define ICON_SMALL2 2
#endif

/* WM_SIZE codes */
#define SIZE_RESTORED   0
#define SIZE_MINIMIZED  1
#define SIZE_MAXIMIZED  2
#define SIZE_MAXSHOW    3
#define SIZE_MAXHIDE    4

/* Old names for WM_SIZE codes */
#define SIZENORMAL      SIZE_RESTORED
#define SIZEICONIC      SIZE_MINIMIZED
#define SIZEFULLSCREEN  SIZE_MAXIMIZED
#define SIZEZOOMSHOW    SIZE_MAXSHOW
#define SIZEZOOMHIDE    SIZE_MAXHIDE

/* WM_NCCALCSIZE return values */
#define WVR_ALIGNTOP    0x00000010L
#define WVR_ALIGNLEFT   0x00000020L
#define WVR_ALIGNBOTTOM 0x00000040L
#define WVR_ALIGNRIGHT  0x00000080L
#define WVR_HREDRAW     0x00000100L
#define WVR_VREDRAW     0x00000200L
#define WVR_REDRAW      (WVR_HREDRAW | WVR_VREDRAW)
#define WVR_VALIDRECTS  0x00000400L

/* Key states used with mouse messages */
#define MK_LBUTTON      0x0001
#define MK_RBUTTON      0x0002
#define MK_SHIFT        0x0004
#define MK_CONTROL      0x0008
#define MK_MBUTTON      0x0010
#if (_WIN32_WINNT >= 0x0500)
    #define MK_XBUTTON1 0x0020
    #define MK_XBUTTON2 0x0040
#endif

/* TrackMouseEvent() flags */
#if (_WIN32_WINNT >= 0x0400)
    #define TME_HOVER           0x00000001L
    #define TME_LEAVE           0x00000002L
    #if (WINVER >= 0x0500)
        #define TME_NONCLIENT   0x00000010L
    #endif
    #define TME_QUERY           0x40000000L
    #define TME_CANCEL          0x80000000L
#endif

/* Hover time special value */
#if (_WIN32_WINNT >= 0x0400)
    #define HOVER_DEFAULT   0xFFFFFFFFL
#endif

/* Window styles */
#define WS_OVERLAPPED       0x00000000L
#define WS_POPUP            0x80000000L
#define WS_CHILD            0x40000000L
#define WS_MINIMIZE         0x20000000L
#define WS_VISIBLE          0x10000000L
#define WS_DISABLED         0x08000000L
#define WS_CLIPSIBLINGS     0x04000000L
#define WS_CLIPCHILDREN     0x02000000L
#define WS_MAXIMIZE         0x01000000L
#define WS_CAPTION          0x00C00000L
#define WS_BORDER           0x00800000L
#define WS_DLGFRAME         0x00400000L
#define WS_VSCROLL          0x00200000L
#define WS_HSCROLL          0x00100000L
#define WS_SYSMENU          0x00080000L
#define WS_THICKFRAME       0x00040000L
#define WS_GROUP            0x00020000L
#define WS_TABSTOP          0x00010000L
#define WS_MINIMIZEBOX      0x00020000L
#define WS_MAXIMIZEBOX      0x00010000L
#define WS_OVERLAPPEDWINDOW \
    (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | \
    WS_MAXIMIZEBOX)
#define WS_POPUPWINDOW      (WS_POPUP | WS_BORDER | WS_SYSMENU)
#define WS_CHILDWINDOW      (WS_CHILD)

/* Old names for window styles */
#define WS_TILED        WS_OVERLAPPED
#define WS_ICONIC       WS_MINIMIZE
#define WS_SIZEBOX      WS_THICKFRAME
#define WS_TILEDWINDOW  WS_OVERLAPPEDWINDOW

/* Extended window styles */
#define WS_EX_DLGMODALFRAME         0x00000001L
#define WS_EX_NOPARENTNOTIFY        0x00000004L
#define WS_EX_TOPMOST               0x00000008L
#define WS_EX_ACCEPTFILES           0x00000010L
#define WS_EX_TRANSPARENT           0x00000020L
#if (WINVER >= 0x0400)
    #define WS_EX_MDICHILD          0x00000040L
    #define WS_EX_TOOLWINDOW        0x00000080L
    #define WS_EX_WINDOWEDGE        0x00000100L
    #define WS_EX_CLIENTEDGE        0x00000200L
    #define WS_EX_CONTEXTHELP       0x00000400L
    #define WS_EX_RIGHT             0x00001000L
    #define WS_EX_LEFT              0x00000000L
    #define WS_EX_RTLREADING        0x00002000L
    #define WS_EX_LTRREADING        0x00000000L
    #define WS_EX_LEFTSCROLLBAR     0x00004000L
    #define WS_EX_RIGHTSCROLLBAR    0x00000000L
    #define WS_EX_CONTROLPARENT     0x00010000L
    #define WS_EX_STATICEDGE        0x00020000L
    #define WS_EX_APPWINDOW         0x00040000L
    #define WS_EX_OVERLAPPEDWINDOW  (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
    #define WS_EX_PALETTEWINDOW     (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define WS_EX_LAYERED           0x00080000L
#endif
#if (WINVER >= 0x0500)
    #define WS_EX_NOINHERITLAYOUT   0x00100000L
    #define WS_EX_LAYOUTRTL         0x00400000L
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define WS_EX_COMPOSITED        0x02000000L
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define WS_EX_NOACTIVATE        0x08000000L
#endif

/* Class styles */
#define CS_VREDRAW          0x00000001
#define CS_HREDRAW          0x00000002
#define CS_DBLCLKS          0x00000008
#define CS_OWNDC            0x00000020
#define CS_CLASSDC          0x00000040
#define CS_PARENTDC         0x00000080
#define CS_NOCLOSE          0x00000200
#define CS_SAVEBITS         0x00000800
#define CS_BYTEALIGNCLIENT  0x00001000
#define CS_BYTEALIGNWINDOW  0x00002000
#define CS_GLOBALCLASS      0x00004000
#define CS_IME              0x00010000
#if (_WIN32_WINNT >= 0x0501)
    #define CS_DROPSHADOW   0x00020000
#endif

/* WM_PRINT flags */
#if (WINVER >= 0x0400)
    #define PRF_CHECKVISIBLE    0x00000001L
    #define PRF_NONCLIENT       0x00000002L
    #define PRF_CLIENT          0x00000004L
    #define PRF_ERASEBKGND      0x00000008L
    #define PRF_CHILDREN        0x00000010L
    #define PRF_OWNED           0x00000020L
#endif

/* DrawEdge() styles */
#if (WINVER >= 0x0400)
    #define BDR_RAISEDOUTER 0x0001
    #define BDR_SUNKENOUTER 0x0002
    #define BDR_RAISEDINNER 0x0004
    #define BDR_SUNKENINNER 0x0008
    #define BDR_OUTER       (BDR_RAISEDOUTER | BDR_SUNKENOUTER)
    #define BDR_INNER       (BDR_RAISEDINNER | BDR_SUNKENINNER)
    #define BDR_RAISED      (BDR_RAISEDOUTER | BDR_RAISEDINNER)
    #define BDR_SUNKEN      (BDR_SUNKENOUTER | BDR_SUNKENINNER)
    #define EDGE_RAISED     (BDR_RAISEDOUTER | BDR_RAISEDINNER)
    #define EDGE_SUNKEN     (BDR_SUNKENOUTER | BDR_SUNKENINNER)
    #define EDGE_ETCHED     (BDR_SUNKENOUTER | BDR_RAISEDINNER)
    #define EDGE_BUMP       (BDR_RAISEDOUTER | BDR_SUNKENINNER)
#endif

/* DrawEdge() flags */
#if (WINVER >= 0x0400)
    #define BF_LEFT                     0x0001
    #define BF_TOP                      0x0002
    #define BF_RIGHT                    0x0004
    #define BF_BOTTOM                   0x0008
    #define BF_TOPLEFT                  (BF_TOP | BF_LEFT)
    #define BF_TOPRIGHT                 (BF_TOP | BF_RIGHT)
    #define BF_BOTTOMLEFT               (BF_BOTTOM | BF_LEFT)
    #define BF_BOTTOMRIGHT              (BF_BOTTOM | BF_RIGHT)
    #define BF_RECT                     (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM)
    #define BF_DIAGONAL                 0x0010
    #define BF_DIAGONAL_ENDTOPRIGHT     (BF_DIAGONAL | BF_TOP | BF_RIGHT)
    #define BF_DIAGONAL_ENDTOPLEFT      (BF_DIAGONAL | BF_TOP | BF_LEFT)
    #define BF_DIAGONAL_ENDBOTTOMLEFT   (BF_DIAGONAL | BF_BOTTOM | BF_LEFT)
    #define BF_DIAGONAL_ENDBOTTOMRIGHT  (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT)
    #define BF_MIDDLE                   0x0800
    #define BF_SOFT                     0x1000
    #define BF_ADJUST                   0x2000
    #define BF_FLAT                     0x4000
    #define BF_MONO                     0x8000
#endif

/* DrawFrameControl() types */
#if (WINVER >= 0x0400)
    #define DFC_CAPTION     1
    #define DFC_MENU        2
    #define DFC_SCROLL      3
    #define DFC_BUTTON      4
#endif
#if (WINVER >= 0x0500)
    #define DFC_POPUPMENU   5
#endif

/* DrawFrameControl() state flags */
#if (WINVER >= 0x0400)
    #define DFCS_CAPTIONCLOSE           0x0000
    #define DFCS_CAPTIONMIN             0x0001
    #define DFCS_CAPTIONMAX             0x0002
    #define DFCS_CAPTIONRESTORE         0x0003
    #define DFCS_CAPTIONHELP            0x0004
    #define DFCS_MENUARROW              0x0000
    #define DFCS_MENUCHECK              0x0001
    #define DFCS_MENUBULLET             0x0002
    #define DFCS_MENUARROWRIGHT         0x0004
    #define DFCS_SCROLLUP               0x0000
    #define DFCS_SCROLLDOWN             0x0001
    #define DFCS_SCROLLLEFT             0x0002
    #define DFCS_SCROLLRIGHT            0x0003
    #define DFCS_SCROLLCOMBOBOX         0x0005
    #define DFCS_SCROLLSIZEGRIP         0x0008
    #define DFCS_SCROLLSIZEGRIPRIGHT    0x0010
    #define DFCS_BUTTONCHECK            0x0000
    #define DFCS_BUTTONRADIOIMAGE       0x0001
    #define DFCS_BUTTONRADIOMASK        0x0002
    #define DFCS_BUTTONRADIO            0x0004
    #define DFCS_BUTTON3STATE           0x0008
    #define DFCS_BUTTONPUSH             0x0010
    #define DFCS_INACTIVE               0x0100
    #define DFCS_PUSHED                 0x0200
    #define DFCS_CHECKED                0x0400
#endif
#if (WINVER >= 0x0500)
    #define DFCS_TRANSPARENT            0x0800
    #define DFCS_HOT                    0x1000
#endif
#if (WINVER >= 0x0400)
    #define DFCS_ADJUSTRECT             0x2000
    #define DFCS_FLAT                   0x4000
    #define DFCS_MONO                   0x8000
#endif

/* DrawCaption() flags */
#if (WINVER >= 0x0400)
    #define DC_ACTIVE       0x0001
    #define DC_SMALLCAP     0x0002
    #define DC_ICON         0x0004
    #define DC_TEXT         0x0008
    #define DC_INBUTTON     0x0010
#endif
#if (WINVER >= 0x0500)
    #define DC_GRADIENT     0x0020
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define DC_BUTTONS      0x1000
#endif

/* DrawAnimatedRects() animation identifiers */
#if (WINVER >= 0x0400)
    #define IDANI_OPEN      1
    #define IDANI_CAPTION   3
#endif

/* Clipboard formats */
#define CF_TEXT             0x0001
#define CF_BITMAP           0x0002
#define CF_METAFILEPICT     0x0003
#define CF_SYLK             0x0004
#define CF_DIF              0x0005
#define CF_TIFF             0x0006
#define CF_OEMTEXT          0x0007
#define CF_DIB              0x0008
#define CF_PALETTE          0x0009
#define CF_PENDATA          0x000A
#define CF_RIFF             0x000B
#define CF_WAVE             0x000C
#define CF_UNICODETEXT      0x000D
#define CF_ENHMETAFILE      0x000E
#if (WINVER >= 0x0400)
    #define CF_HDROP        0x000F
    #define CF_LOCALE       0x0010
#endif
#if (WINVER >= 0x0500)
    #define CF_DIBV5        0x0011
    #define CF_MAX          0x0012
#elif (WINVER >= 0x0400)
    #define CF_MAX          0x0011
#else
    #define CF_MAX          0x000F
#endif
#define CF_OWNERDISPLAY     0x0080
#define CF_DSPTEXT          0x0081
#define CF_DSPBITMAP        0x0082
#define CF_DSPMETAFILEPICT  0x0083
#define CF_DSPENHMETAFILE   0x008E
#define CF_PRIVATEFIRST     0x0200
#define CF_PRIVATELAST      0x02FF
#define CF_GDIOBJFIRST      0x0300
#define CF_GDIOBJLAST       0x03FF

/* Accelerator flags */
#define FVIRTKEY    0x01
#define FNOINVERT   0x02
#define FSHIFT      0x04
#define FCONTROL    0x08
#define FALT        0x10

/* Window placement flags */
#define WPF_SETMINPOSITION              0x0001
#define WPF_RESTORETOMAXIMIZED          0x0002
#if (_WIN32_WINNT >= 0x0500)
    #define WPF_ASYNCWINDOWPLACEMENT    0x0004
#endif

/* Owner draw types */
#define ODT_MENU        1
#define ODT_LISTBOX     2
#define ODT_COMBOBOX    3
#define ODT_BUTTON      4
#if (WINVER >= 0x0400)
    #define ODT_STATIC  5
#endif

/* Owner draw actions */
#define ODA_DRAWENTIRE  0x0001
#define ODA_SELECT      0x0002
#define ODA_FOCUS       0x0004

/* Owner draw states */
#define ODS_SELECTED            0x0001
#define ODS_GRAYED              0x0002
#define ODS_DISABLED            0x0004
#define ODS_CHECKED             0x0008
#define ODS_FOCUS               0x0010
#if (WINVER >= 0x0400)
    #define ODS_DEFAULT         0x0020
#endif
#if (WINVER >= 0x0500)
    #define ODS_HOTLIGHT        0x0040
    #define ODS_INACTIVE        0x0080
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define ODS_NOACCEL         0x0100
    #define ODS_NOFOCUSRECT     0x0200
#endif
#if (WINVER >= 0x0400)
    #define ODS_COMBOBOXEDIT    0x1000
#endif

/* GetQueueStatus() return values */
#define QS_KEY              0x00000001L
#define QS_MOUSEMOVE        0x00000002L
#define QS_MOUSEBUTTON      0x00000004L
#define QS_POSTMESSAGE      0x00000008L
#define QS_TIMER            0x00000010L
#define QS_PAINT            0x00000020L
#define QS_SENDMESSAGE      0x00000040L
#define QS_HOTKEY           0x00000080L
#define QS_ALLPOSTMESSAGE   0x00000100L
#if (_WIN32_WINNT >= 0x0501)
    #define QS_RAWINPUT     0x00000400L
#endif
#define QS_MOUSE            (QS_MOUSEMOVE | QS_MOUSEBUTTON)
#if (_WIN32_WINNT >= 0x0501)
    #define QS_INPUT        (QS_MOUSE | QS_KEY | QS_RAWINPUT)
#else
    #define QS_INPUT        (QS_MOUSE | QS_KEY)
#endif
#define QS_ALLEVENTS        (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY)
#define QS_ALLINPUT \
    (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE)

/* PeekMessage() flags */
#define PM_NOREMOVE             0x0000
#define PM_REMOVE               0x0001
#define PM_NOYIELD              0x0002
#if (WINVER >= 0x0500)
    #define PM_QS_INPUT         (QS_INPUT << 16)
    #define PM_QS_POSTMESSAGE   ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
    #define PM_QS_PAINT         (QS_PAINT << 16)
    #define PM_QS_SENDMESSAGE   (QS_SENDMESSAGE << 16)
#endif

/* Hot key modifiers */
#define MOD_ALT             0x0001
#define MOD_CONTROL         0x0002
#define MOD_SHIFT           0x0004
#define MOD_WIN             0x0008
#if (WINVER >= 0x0601)
    #define MOD_NOREPEAT    0x4000
#endif

/* Special hotkey identifiers */
#define IDHOT_SNAPWINDOW    (-1)
#define IDHOT_SNAPDESKTOP   (-2)

/* Flag used with WM_QUERYENDSESSION and WM_ENDSESSION */
#if (WINVER >= 0x0400)
    #define ENDSESSION_LOGOFF   0x80000000L
    #define ENDSESSION_CRITICAL 0x40000000L
    #define ENDSESSION_CLOSEAPP 0x00000001L
#endif

/* ExitWindowsEx() flags */
#define EWX_LOGOFF          0x00000000L
#define EWX_SHUTDOWN        0x00000001L
#define EWX_REBOOT          0x00000002L
#define EWX_FORCE           0x00000004L
#define EWX_POWEROFF        0x00000008L
#if (_WIN32_WINNT >= 0x0500)
    #define EWX_FORCEIFHUNG 0x00000010L
#endif
#define EWX_QUICKRESOLVE    0x00000020L
#if (_WIN32_WINNT >= 0x0600)
    #define EWX_RESTARTAPPS 0x00000040L
#endif

/* BroadcastSystemMessage() recipients */
#if (WINVER >= 0x0400)
    #define BSM_ALLCOMPONENTS       0x00000000L
    #define BSM_VXDS                0x00000001L
    #define BSM_NETDRIVER           0x00000002L
    #define BSM_INSTALLABLEDRIVERS  0x00000004L
    #define BSM_APPLICATIONS        0x00000008L
    #define BSM_ALLDESKTOPS         0x00000010L
#endif

/* BroadcastSystemMessage() flags */
#if (WINVER >= 0x0400)
    #define BSF_QUERY                   0x00000001L
    #define BSF_IGNORECURRENTTASK       0x00000002L
    #define BSF_FLUSHDISK               0x00000004L
    #define BSF_NOHANG                  0x00000008L
    #define BSF_POSTMESSAGE             0x00000010L
    #define BSF_FORCEIFHUNG             0x00000020L
    #define BSF_NOTIMEOUTIFNOTHUNG      0x00000040L
    #if (_WIN32_WINNT >= 0x0500)
        #define BSF_ALLOWSFW            0x00000080L
        #define BSF_SENDNOTIFYMESSAGE   0x00000100L
    #endif
    #if (_WIN32_WINNT >= 0x0501)
        #define BSF_RETURNHDESK         0x00000200L
        #define BSF_LUID                0x00000400L
    #endif
#endif

/* Value returned in response to system messages */
#if (WINVER >= 0x0400)
    #define BROADCAST_QUERY_DENY    0x424D5144L
#endif

/* Device notification flags */
#if (WINVER >= 0x0500)
    #define DEVICE_NOTIFY_WINDOW_HANDLE             0x00000000L
    #define DEVICE_NOTIFY_SERVICE_HANDLE            0x00000001L
    #if (_WIN32_WINNT >= 0x0501)
        #define DEVICE_NOTIFY_ALL_INTERFACE_CLASSES 0x00000004L
    #endif
#endif

/* Special window handle value used with PostMessage() and SendMessage() */
#define HWND_BROADCAST  ((HWND)0xFFFF)

/* Special window handle specified as a parent for message-only windows */
#if (WINVER >= 0x0500)
    #define HWND_MESSAGE    ((HWND)-3)
#endif

/* InSendMessageEx() return values */
#if (WINVER >= 0x0500)
    #define ISMEX_NOSEND    0x00000000L
    #define ISMEX_SEND      0x00000001L
    #define ISMEX_NOTIFY    0x00000002L
    #define ISMEX_CALLBACK  0x00000004L
    #define ISMEX_REPLIED   0x00000008L
#endif

/* Special value used with CreateWindow() */
#define CW_USEDEFAULT   0x80000000

/* Window handle for the desktop */
#define HWND_DESKTOP    0

/* PrintWindow() flags */
#if (_WIN32_WINNT >= 0x0501)
    #define PW_CLIENTONLY   0x00000001
#endif

/* Layered window attributes */
#if (_WIN32_WINNT >= 0x0500)
    #define LWA_COLORKEY    0x00000001L
    #define LWA_ALPHA       0x00000002L
#endif

/* UpdateLayeredWindow() flags */
#if (_WIN32_WINNT >= 0x0500)
    #define ULW_COLORKEY    0x00000001L
    #define ULW_ALPHA       0x00000002L
    #define ULW_OPAQUE      0x00000004L
    #define ULW_EX_NORESIZE 0x00000008L
#endif

/* FlashWindowEx() flags */
#if (WINVER >= 0x0500)
    #define FLASHW_STOP         0x00000000L
    #define FLASHW_CAPTION      0x00000001L
    #define FLASHW_TRAY         0x00000002L
    #define FLASHW_ALL          (FLASHW_CAPTION | FLASHW_TRAY)
    #define FLASHW_TIMER        0x00000004L
    #define FLASHW_TIMERNOFG    0x0000000CL
#endif

/* Window display affinity values */
#if (_WIN32_WINNT >= 0x0601)
    #define WDA_NONE    0x00000000L
    #define WDA_MONITOR 0x00000001L
#endif

/* SetWindowPos() flags */
#define SWP_NOSIZE              0x0001
#define SWP_NOMOVE              0x0002
#define SWP_NOZORDER            0x0004
#define SWP_NOREDRAW            0x0008
#define SWP_NOACTIVATE          0x0010
#define SWP_FRAMECHANGED        0x0020
#define SWP_SHOWWINDOW          0x0040
#define SWP_HIDEWINDOW          0x0080
#define SWP_NOCOPYBITS          0x0100
#define SWP_NOOWNERZORDER       0x0200
#define SWP_NOSENDCHANGING      0x0400
#define SWP_DRAWFRAME           SWP_FRAMECHANGED
#define SWP_NOREPOSITION        SWP_NOOWNERZORDER
#if (WINVER >= 0x0400)
    #define SWP_DEFERERASE      0x2000
    #define SWP_ASYNCWINDOWPOS  0x4000
#endif

/* Special window handles used with SetWindowPos() */
#define HWND_TOP        ((HWND)0)
#define HWND_BOTTOM     ((HWND)1)
#define HWND_TOPMOST    ((HWND)-1)
#define HWND_NOTOPMOST  ((HWND)-2)

/* Extra bytes for dialog window classes */
#define DLGWINDOWEXTRA  30

/* keybd_event() flags */
#define KEYEVENTF_EXTENDEDKEY   0x00000001L
#define KEYEVENTF_KEYUP         0x00000002L
#if (_WIN32_WINNT >= 0x0500)
    #define KEYEVENTF_UNICODE   0x00000004L
    #define KEYEVENTF_SCANCODE  0x00000008L
#endif

/* mouse_event() flags */
#define MOUSEEVENTF_MOVE                0x00000001L
#define MOUSEEVENTF_LEFTDOWN            0x00000002L
#define MOUSEEVENTF_LEFTUP              0x00000004L
#define MOUSEEVENTF_RIGHTDOWN           0x00000008L
#define MOUSEEVENTF_RIGHTUP             0x00000010L
#define MOUSEEVENTF_MIDDLEDOWN          0x00000020L
#define MOUSEEVENTF_MIDDLEUP            0x00000040L
#define MOUSEEVENTF_XDOWN               0x00000080L
#define MOUSEEVENTF_XUP                 0x00000100L
#define MOUSEEVENTF_WHEEL               0x00000800L
#if (_WIN32_WINNT >= 0x0600)
    #define MOUSEEVENTF_HWHEEL          0x00001000L
#endif
#if (WINVER >= 0x0600)
    #define MOUSEEVENTF_MOVE_NOCOALESCE 0x00002000L
#endif
#define MOUSEEVENTF_VIRTUALDESK         0x00004000L
#define MOUSEEVENTF_ABSOLUTE            0x00008000L

/* Input types */
#if (_WIN32_WINNT > 0x0400)
    #define INPUT_MOUSE     0L
    #define INPUT_KEYBOARD  1L
    #define INPUT_HARDWARE  2L
#endif

/* Touch event flags */
#if (WINVER >= 0x0601)
    #define TOUCHEVENTF_MOVE        0x00000001L
    #define TOUCHEVENTF_DOWN        0x00000002L
    #define TOUCHEVENTF_UP          0x00000004L
    #define TOUCHEVENTF_INRANGE     0x00000008L
    #define TOUCHEVENTF_PRIMARY     0x00000010L
    #define TOUCHEVENTF_NOCOALESCE  0x00000020L
    #define TOUCHEVENTF_PEN         0x00000040L
    #define TOUCHEVENTF_PALM        0x00000080L
#endif

/* Touch input mask flags */
#if (WINVER >= 0x0601)
    #define TOUCHINPUTMASKF_TIMEFROMSYSTEM  0x00000001L
    #define TOUCHINPUTMASKF_EXTRAINFO       0x00000002L
    #define TOUCHINPUTMASKF_CONTACTAREA     0x00000004L
#endif

/* RegisterTouchWindow() flags */
#if (WINVER >= 0x0601)
    #define TWF_FINETOUCH   0x00000001L
    #define TWF_WANTPALM    0x00000002L
#endif

/* MapVirtualKeyEx() mapping types */
#define MAPVK_VK_TO_VSC         0
#define MAPVK_VSC_TO_VK         1
#define MAPVK_VK_TO_CHAR        2
#define MAPVK_VSC_TO_VK_EX      3
#if (WINVER >= 0x0600)
    #define MAPVK_VK_TO_VSC_EX  4
#endif

/* MsgWaitForMultipleObjects() flags */
#define MWMO_WAITALL        0x00000001L
#define MWMO_ALERTABLE      0x00000002L
#define MWMO_INPUTAVAILABLE 0x00000004L

/* Minimum and maximum timer durations */
#define USER_TIMER_MAXIMUM  0x7FFFFFFFL
#define USER_TIMER_MINUMUM  0x0000000AL

/* GetSystemMetrics() indices */
#define SM_CXSCREEN                         0
#define SM_CYSCREEN                         1
#define SM_CXVSCROLL                        2
#define SM_CYHSCROLL                        3
#define SM_CYCAPTION                        4
#define SM_CXBORDER                         5
#define SM_CYBORDER                         6
#define SM_CXDLGFRAME                       7
#define SM_CYDLGFRAME                       8
#define SM_CYVTHUMB                         9
#define SM_CXHTHUMB                         10
#define SM_CXICON                           11
#define SM_CYICON                           12
#define SM_CXCURSOR                         13
#define SM_CYCURSOR                         14
#define SM_CYMENU                           15
#define SM_CXFULLSCREEN                     16
#define SM_CYFULLSCREEN                     17
#define SM_CYKANJIWINDOW                    18
#define SM_MOUSEPRESENT                     19
#define SM_CYVSCROLL                        20
#define SM_CXHSCROLL                        21
#define SM_DEBUG                            22
#define SM_SWAPBUTTON                       23
#define SM_CXMIN                            28
#define SM_CYMIN                            29
#define SM_CXSIZE                           30
#define SM_CYSIZE                           31
#define SM_CXFRAME                          32
#define SM_CYFRAME                          33
#define SM_CXMINTRACK                       34
#define SM_CYMINTRACK                       35
#define SM_CXDOUBLECLK                      36
#define SM_CYDOUBLECLK                      37
#define SM_CXICONSPACING                    38
#define SM_CYICONSPACING                    39
#define SM_MENUDROPALIGNMENT                40
#define SM_PENWINDOWS                       41
#define SM_DBCSENABLED                      42
#define SM_CMOUSEBUTTONS                    43
#if (WINVER >= 0x0400)
    #define SM_CXFIXEDFRAME                 SM_CXDLGFRAME
    #define SM_CYFIXEDFRAME                 SM_CYDLGFRAME
    #define SM_CXSIZEFRAME                  SM_CXFRAME
    #define SM_CYSIZEFRAME                  SM_CYFRAME
    #define SM_SECURE                       44
    #define SM_CXEDGE                       45
    #define SM_CYEDGE                       46
    #define SM_CXMINSPACING                 47
    #define SM_CYMINSPACING                 48
    #define SM_CXSMICON                     49
    #define SM_CYSMICON                     50
    #define SM_CYSMCAPTION                  51
    #define SM_CXSMSIZE                     52
    #define SM_CYSMSIZE                     53
    #define SM_CXMENUSIZE                   54
    #define SM_CYMENUSIZE                   55
    #define SM_ARRANGE                      56
    #define SM_CXMINIMIZED                  57
    #define SM_CYMINIMIZED                  58
    #define SM_CXMAXTRACK                   59
    #define SM_CYMAXTRACK                   60
    #define SM_CXMAXIMIZED                  61
    #define SM_CYMAXIMIZED                  62
    #define SM_NETWORK                      63
    #define SM_CLEANBOOT                    67
    #define SM_CXDRAG                       68
    #define SM_CYDRAG                       69
#endif
#define SM_SHOWSOUNDS                       70
#if (WINVER >= 0x0400)
    #define SM_CXMENUCHECK                  71
    #define SM_CYMENUCHECK                  72
    #define SM_SLOWMACHINE                  73
    #define SM_MIDEASTENABLED               74
#endif
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
    #define SM_MOUSEWHEELPRESENT            75
#endif
#if (WINVER >= 0x0500)
    #define SM_XVIRTUALSCREEN               76
    #define SM_YVIRTUALSCREEN               77
    #define SM_CXVIRTUALSCREEN              78
    #define SM_CYVIRTUALSCREEN              79
    #define SM_CMONITORS                    80
    #define SM_SAMEDISPLAYFORMAT            81
#endif
#if (_WIN32_WINNT >= 0x0500)
    #define SM_IMMENABLED                   82
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define SM_CXFOCUSBORDER                83
    #define SM_CYFOCUSBORDER                84
    #define SM_TABLETPC                     86
    #define SM_MEDIACENTER                  87
    #define SM_STARTER                      88
    #define SM_SERVERR2                     89
#endif
#if (_WIN32_WINNT >= 0x0600)
    #define SM_MOUSEHORIZONTALWHEELPRESENT  91
    #define SM_CXPADDEDBORDER               92
#endif
#if (WINVER >= 0x0601)
    #define SM_DIGITIZER                    94
    #define SM_MAXIMUMTOUCHES               95
#endif
#if (WINVER >= 0x0601)
    #define SM_CMETRICS                     97
#elif (WINVER >= 0x0600)
    #define SM_CMETRICS                     93
#elif (WINVER >= 0x0501)
    #define SM_CMETRICS                     91
#elif (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
    #define SM_CMETRICS                     83
#else
    #define SM_CMETRICS                     76
#endif
#if (WINVER >= 0x0500)
    #define SM_REMOTESESSION                0x1000
    #if (_WIN32_WINNT >= 0x0501)
        #define SM_SHUTTINGDOWN             0x2000
    #endif
#endif
#if (WINVER >= 0x0501)
    #define SM_REMOTECONTROL                0x2001
    #define SM_CARETBLINKINGENABLED         0x2002
#endif

/* WM_MENUCHAR return values */
#if (WINVER >= 0x0400)
    #define MNC_IGNORE  0
    #define MNC_CLOSE   1
    #define MNC_EXECUTE 2
    #define MNC_SELECT  3
#endif

/* Menu styles */
#if (WINVER >= 0x0500)
    #define MNS_NOCHECK     0x80000000L
    #define MNS_MODELESS    0x40000000L
    #define MNS_DRAGDROP    0x20000000L
    #define MNS_AUTODISMISS 0x10000000L
    #define MNS_NOTIFYBYPOS 0x08000000L
    #define MNS_CHECKORBMP  0x04000000L
#endif

/* Menu information mask flags */
#if (WINVER >= 0x0500)
    #define MIM_MAXHEIGHT       0x00000001L
    #define MIM_BACKGROUND      0x00000002L
    #define MIM_HELPID          0x00000004L
    #define MIM_MENUDATA        0x00000008L
    #define MIM_STYLE           0x00000010L
    #define MIM_APPLYTOSUBMENUS 0x80000000L
#endif

/* WM_MENUDRAG return values */
#if (WINVER >= 0x0500)
    #define MND_CONTINUE    0L
    #define MND_ENDMENU     1L
#endif

/* WM_MENUGETOBJECT flags */
#if (WINVER >= 0x0500)
    #define MNGOF_TOPGAP    0x00000001L
    #define MNGOF_BOTTOMGAP 0x00000002L
#endif

/* WM_MENUGETOBJECT return values */
#if (WINVER >= 0x0500)
    #define MNGO_NOINTERFACE    0x00000000L
    #define MNGO_NOERROR        0x00000001L
#endif

/* Menu item information mask flags */
#if (WINVER >= 0x0400)
    #define MIIM_STATE      0x00000001L
    #define MIIM_ID         0x00000002L
    #define MIIM_SUBMENU    0x00000004L
    #define MIIM_CHECKMARKS 0x00000008L
    #define MIIM_TYPE       0x00000010L
    #define MIIM_DATA       0x00000020L
#endif
#if (WINVER >= 0x0500)
    #define MIIM_STRING     0x00000040L
    #define MIIM_BITMAP     0x00000080L
    #define MIIM_FTYPE      0x00000100L
#endif

/* Special bitmap handles used with menu items */
#if (WINVER >= 0x0500)
    #define HBMMENU_CALLBACK        ((HBITMAP)-1)
    #define HBMMENU_SYSTEM          ((HBITMAP)1)
    #define HBMMENU_MBAR_RESTORE    ((HBITMAP)2)
    #define HBMMENU_MBAR_MINIMIZE   ((HBITMAP)3)
    #define HBMMENU_MBAR_CLOSE      ((HBITMAP)5)
    #define HBMMENU_MBAR_CLOSE_D    ((HBITMAP)6)
    #define HBMMENU_MBAR_MINIMIZE_D ((HBITMAP)7)
    #define HBMMENU_POPUP_CLOSE     ((HBITMAP)8)
    #define HBMMENU_POPUP_RESTORE   ((HBITMAP)9)
    #define HBMMENU_POPUP_MAXIMIZE  ((HBITMAP)10)
    #define HBMMENU_POPUP_MINIMIZE  ((HBITMAP)11)
#endif

/* GetMenuDefaultItem() flags */
#if (WINVER >= 0x0400)
    #define GMDI_USEDISABLED    0x00000001
    #define GMDI_GOINTOPOPUPS   0x00000002
#endif

/* TrackPopupMenu() flags */
#define TPM_LEFTBUTTON          0x00000000
#define TPM_RIGHTBUTTON         0x00000002
#define TPM_LEFTALIGN           0x00000000
#define TPM_CENTERALIGN         0x00000004
#define TPM_RIGHTALIGN          0x00000008
#if (WINVER >= 0x0400)
    #define TPM_TOPALIGN        0x00000000
    #define TPM_VCENTERALIGN    0x00000010
    #define TPM_BOTTOMALIGN     0x00000020
    #define TPM_HORIZONTAL      0x00000000
    #define TPM_VERTICAL        0x00000040
    #define TPM_NONOTIFY        0x00000080
    #define TPM_RETURNCMD       0x00000100
#endif
#if (WINVER >= 0x0500)
    #define TPM_RECURSE         0x00000001
    #define TPM_HORPOSANIMATION 0x00000400
    #define TPM_HORNEGANIMATION 0x00000800
    #define TPM_VERPOSANIMATION 0x00001000
    #define TPM_VERNEGANIMATION 0x00002000
    #if (_WIN32_WINNT >= 0x0500)
        #define TPM_NOANIMATION 0x00004000
    #endif
    #if (_WIN32_WINNT >= 0x0501)
        #define TPM_LAYOUTRTL   0x00008000
    #endif
#endif
#if (_WIN32_WINNT >= 0x0601)
    #define TPM_WORKAREA        0x00010000
#endif

/* DragObject() flags */
#if (WINVER >= 0x0400)
    #define DOF_EXECUTABLE  0x00008001L
    #define DOF_DOCUMENT    0x00008002L
    #define DOF_DIRECTORY   0x00008003L
    #define DOF_MULTIPLE    0x00008004L
    #define DOF_PROGMAN     0x00000001L
    #define DOF_SHELLDATA   0x00000002L
#endif

/* DragObject() data formats */
#if (WINVER >= 0x0400)
    #define DO_DROPFILE     0x454C4946
    #define DO_PRINTFILE    0x544E5250
#endif

/* DrawText() flags */
#define DT_TOP                      0x00000000
#define DT_LEFT                     0x00000000
#define DT_CENTER                   0x00000001
#define DT_RIGHT                    0x00000002
#define DT_VCENTER                  0x00000004
#define DT_BOTTOM                   0x00000008
#define DT_WORDBREAK                0x00000010
#define DT_SINGLELINE               0x00000020
#define DT_EXPANDTABS               0x00000040
#define DT_TABSTOP                  0x00000080
#define DT_NOCLIP                   0x00000100
#define DT_EXTERNALLEADING          0x00000200
#define DT_CALCRECT                 0x00000400
#define DT_NOPREFIX                 0x00000800
#define DT_INTERNAL                 0x00001000
#if (WINVER >= 0x0400)
    #define DT_EDITCONTROL          0x00002000
    #define DT_PATH_ELLIPSIS        0x00004000
    #define DT_END_ELLIPSIS         0x00008000
    #define DT_MODIFYSTRING         0x00010000
    #define DT_RTLREADING           0x00020000
    #define DT_WORD_ELLIPSIS        0x00040000
#endif
#if (WINVER >= 0x0500)
    #define DT_NOFULLWIDTHCHARBREAK 0x00080000
    #if (_WIN32_WINNT >= 0x0500)
        #define DT_HIDEPREFIX       0x00100000
        #define DT_PREFIXONLY       0x00200000
    #endif
#endif

/* DrawState() types */
#if (WINVER >= 0x0400)
    #define DST_COMPLEX     0x0000
    #define DST_TEXT        0x0001
    #define DST_PREFIXTEXT  0x0002
    #define DST_ICON        0x0003
    #define DST_BITMAP      0x0004
#endif

/* DrawState() states */
#if (WINVER >= 0x0400)
    #define DSS_NORMAL          0x0000
    #define DSS_UNION           0x0010
    #define DSS_DISABLED        0x0020
    #define DSS_MONO            0x0080
    #if (_WIN32_WINNT >= 0x0500)
        #define DSS_HIDEPREFIX  0x0200
        #define DSS_PREFIXONLY  0x0400
    #endif
    #define DSS_RIGHT           0x8000
#endif

/* LockSetForegroundWindow() lock codes */
#if (_WIN32_WINNT >= 0x0500)
    #define LSFW_LOCK   1
    #define LSFW_UNLOCK 2
#endif

/* GetDCEx() flags */
#define DCX_WINDOW              0x00000001L
#define DCX_CACHE               0x00000002L
#define DCX_NORESETATTRS        0x00000004L
#define DCX_CLIPCHILDREN        0x00000008L
#define DCX_CLIPSIBLINGS        0x00000010L
#define DCX_PARENTCLIP          0x00000020L
#define DCX_EXCLUDERGN          0x00000040L
#define DCX_INTERSECTRGN        0x00000080L
#define DCX_EXCLUDEUPDATE       0x00000100L
#define DCX_INTERSECTUPDATE     0x00000200L
#define DCX_LOCKWINDOWUPDATE    0x00000400L
#define DCX_VALIDATE            0x00200000L

/* RedrawWindow() flags */
#define RDW_INVALIDATE      0x0001
#define RDW_INTERNALPAINT   0x0002
#define RDW_ERASE           0x0004
#define RDW_VALIDATE        0x0008
#define RDW_NOINTERNALPAINT 0x0010
#define RDW_NOERASE         0x0020
#define RDW_NOCHILDREN      0x0040
#define RDW_ALLCHILDREN     0x0080
#define RDW_UPDATENOW       0x0100
#define RDW_ERASENOW        0x0200
#define RDW_FRAME           0x0400
#define RDW_NOFRAME         0x0800

/* ScrollWindowEx() flags */
#define SW_SCROLLCHILDREN   0x0001
#define SW_INVALIDATE       0x0002
#define SW_ERASE            0x0004
#if (WINVER >= 0x0500)
    #define SW_SMOOTHSCROLL 0x0010
#endif

/* EnableScrollBar() flags */
#define ESB_ENABLE_BOTH     0x0000
#define ESB_DISABLE_BOTH    0x0003
#define ESB_DISABLE_LEFT    0x0001
#define ESB_DISABLE_RIGHT   0x0002
#define ESB_DISABLE_UP      0x0001
#define ESB_DISABLE_DOWN    0x0002
#define ESB_DISABLE_LTUP    ESB_DISABLE_LEFT
#define ESB_DISABLE_RTDN    ESB_DISABLE_RIGHT

/* Help context types */
#define HELPINFO_WINDOW     0x0001
#define HELPINFO_MENUITEM   0x0002

/* MessageBox() flags */
#define MB_OK                           0x00000000L
#define MB_OKCANCEL                     0x00000001L
#define MB_ABORTRETRYIGNORE             0x00000002L
#define MB_YESNOCANCEL                  0x00000003L
#define MB_YESNO                        0x00000004L
#define MB_RETRYCANCEL                  0x00000005L
#if (WINVER >= 0x0500)
    #define MB_CANCELTRYCONTINUE        0x00000006L
#endif
#define MB_ICONHAND                     0x00000010L
#define MB_ICONQUESTION                 0x00000020L
#define MB_ICONEXCLAMATION              0x00000030L
#define MB_ICONASTERISK                 0x00000040L
#if (WINVER >= 0x0400)
    #define MB_USERICON                 0x00000080L
    #define MB_ICONWARNING              MB_ICONEXCLAMATION
    #define MB_ICONERROR                MB_ICONHAND
#endif
#define MB_ICONINFORMATION              MB_ICONASTERISK
#define MB_ICONSTOP                     MB_ICONHAND
#define MB_DEFBUTTON1                   0x00000000L
#define MB_DEFBUTTON2                   0x00000100L
#define MB_DEFBUTTON3                   0x00000200L
#if (WINVER >= 0x0400)
    #define MB_DEFBUTTON4               0x00000300L
#endif
#define MB_APPLMODAL                    0x00000000L
#define MB_SYSTEMMODAL                  0x00001000L
#define MB_TASKMODAL                    0x00002000L
#if (WINVER >= 0x0400)
    #define MB_HELP                     0x00004000L
#endif
#define MB_NOFOCUS                      0x00008000L
#define MB_SETFOREGROUND                0x00010000L
#define MB_DEFAULT_DESKTOP_ONLY         0x00020000L
#if (WINVER >= 0x0400)
    #define MB_TOPMOST                  0x00040000L
    #define MB_RIGHT                    0x00080000L
    #define MB_RTLREADING               0x00100000L
#endif
#if (_WIN32_WINNT >= 0x0400)
    #define MB_SERVICE_NOTIFICATION     0x00200000L
#else
    #define MB_SERVICE_NOTIFICATION     0x00040000L
#endif
#define MB_SERVICE_NOTIFICATION_NT3X    0x00040000L
#define MB_TYPEMASK                     0x0000000FL
#define MB_ICONMASK                     0x000000F0L
#define MB_DEFMASK                      0x00000F00L
#define MB_MODEMASK                     0x00003000L
#define MB_MISCMASK                     0x0000C000L

/* ChildWindowFromPointEx() flags */
#if (WINVER >= 0x0400)
    #define CWP_ALL             0x0000
    #define CWP_SKIPINVISIBLE   0x0001
    #define CWP_SKIPDISABLED    0x0002
    #define CWP_SKIPTRANSPARENT 0x0004
#endif

/* Control color types for compatibility */
#define CTLCOLOR_MSGBOX     0
#define CTLCOLOR_EDIT       1
#define CTLCOLOR_LISTBOX    2
#define CTLCOLOR_BTN        3
#define CTLCOLOR_DLG        4
#define CTLCOLOR_SCROLLBAR  5
#define CTLCOLOR_STATIC     6
#define CTLCOLOR_MAX        7

/* System color indices */
#define COLOR_SCROLLBAR                     0
#define COLOR_BACKGROUND                    1
#define COLOR_ACTIVECAPTION                 2
#define COLOR_INACTIVECAPTION               3
#define COLOR_MENU                          4
#define COLOR_WINDOW                        5
#define COLOR_WINDOWFRAME                   6
#define COLOR_MENUTEXT                      7
#define COLOR_WINDOWTEXT                    8
#define COLOR_CAPTIONTEXT                   9
#define COLOR_ACTIVEBORDER                  10
#define COLOR_INACTIVEBORDER                11
#define COLOR_APPWORKSPACE                  12
#define COLOR_HIGHLIGHT                     13
#define COLOR_HIGHLIGHTTEXT                 14
#define COLOR_BTNFACE                       15
#define COLOR_BTNSHADOW                     16
#define COLOR_GRAYTEXT                      17
#define COLOR_BTNTEXT                       18
#define COLOR_INACTIVECAPTIONTEXT           19
#define COLOR_BTNHIGHLIGHT                  20
#if (WINVER >= 0x0400)
    #define COLOR_3DDKSHADOW                21
    #define COLOR_3DLIGHT                   22
    #define COLOR_INFOTEXT                  23
    #define COLOR_INFOBK                    24
#endif
#if (WINVER >= 0x0500)
    #define COLOR_HOTLIGHT                  26
    #define COLOR_GRADIENTACTIVECAPTION     27
    #define COLOR_GARDIENTINACTIVECAPTION   28
#endif
#if (WINVER >= 0x0501)
    #define COLOR_MENUHILIGHT               29
    #define COLOR_MENUBAR                   30
#endif
#if (WINVER >= 0x0400)
    #define COLOR_DESKTOP                   COLOR_BACKGROUND
    #define COLOR_3DFACE                    COLOR_BTNFACE
    #define COLOR_3DSHADOW                  COLOR_BTNSHADOW
    #define COLOR_3DHIGHLIGHT               COLOR_BTNHIGHLIGHT
    #define COLOR_3DHILIGHT                 COLOR_BTNHIGHLIGHT
    #define COLOR_BTNHILIGHT                COLOR_BTNHIGHLIGHT
#endif

/* GetWindow() commands */
#define GW_HWNDFIRST        0
#define GW_HWNDLAST         1
#define GW_HWNDNEXT         2
#define GW_HWNDPREV         3
#define GW_OWNER            4
#define GW_CHILD            5
#if (WINVER >= 0x0500)
    #define GW_ENABLEDPOPUP 6
    #define GW_MAX          6
#else
    #define GW_MAX          5
#endif

/* Menu flags */
#define MF_INSERT           0x00000000
#define MF_CHANGE           0x00000080
#define MF_APPEND           0x00000100
#define MF_DELETE           0x00000200
#define MF_REMOVE           0x00001000
#define MF_BYCOMMAND        0x00000000
#define MF_BYPOSITION       0x00000400
#define MF_SEPARATOR        0x00000800
#define MF_ENABLED          0x00000000
#define MF_GRAYED           0x00000001
#define MF_DISABLED         0x00000002
#define MF_UNCHECKED        0x00000000
#define MF_CHECKED          0x00000008
#define MF_USECHECKBITMAPS  0x00000200
#define MF_STRING           0x00000000
#define MF_BITMAP           0x00000004
#define MF_OWNERDRAW        0x00000100
#define MF_POPUP            0x00000010
#define MF_MENUBARBREAK     0x00000020
#define MF_MENUBREAK        0x00000040
#define MF_UNHILITE         0x00000000
#define MF_HILITE           0x00000080
#if (WINVER >= 0x0400)
    #define MF_DEFAULT      0x00001000
#endif
#define MF_SYSMENU          0x00002000
#define MF_HELP             0x00004000
#if (WINVER >= 0x0400)
    #define MF_RIGHTJUSTIFY 0x00004000
#endif
#define MF_MOUSESELECT      0x00008000
#if (WINVER >= 0x0400)
    #define MF_END          0x00000080
#endif

/* Menu types */
#if (WINVER >= 0x0400)
    #define MFT_STRING          MF_STRING
    #define MFT_BITMAP          MF_BITMAP
    #define MFT_MENUBARBREAK    MF_MENUBARBREAK
    #define MFT_MENUBREAK       MF_MENUBREAK
    #define MFT_OWNERDRAW       MF_OWNERDRAW
    #define MFT_RADIOCHECK      0x00000200
    #define MFT_SEPARATOR       MF_SEPARATOR
    #define MFT_RIGHTORDER      0x00002000
    #define MFT_RIGHTJUSTIFY    MF_RIGHTJUSTIFY
#endif

/* Menu states */
#if (WINVER >= 0x0400)
    #define MFS_GRAYED      0x00000003L
    #define MFS_DISABLED    MFS_GRAYED
    #define MFS_CHECKED     MF_CHECKED
    #define MFS_HILITE      MF_HILITE
    #define MFS_ENABLED     MF_ENABLED
    #define MFS_UNCHECKED   MF_UNCHECKED
    #define MFS_UNHILITE    MF_UNHILITE
    #define MFS_DEFAULT     MF_DEFAULT
#endif

/* Special values used in menu resources */
#define MF_END  0x00000080

/* System command identifiers */
#define SC_SIZE             0xF000
#define SC_MOVE             0xF010
#define SC_MINIMIZE         0xF020
#define SC_MAXIMIZE         0xF030
#define SC_NEXTWINDOW       0xF040
#define SC_PREVWINDOW       0xF050
#define SC_CLOSE            0xF060
#define SC_VSCROLL          0xF070
#define SC_HSCROLL          0xF080
#define SC_MOUSEMENU        0xF090
#define SC_KEYMENU          0xF100
#define SC_ARRANGE          0xF110
#define SC_RESTORE          0xF120
#define SC_TASKLIST         0xF130
#define SC_SCREENSAVE       0xF140
#define SC_HOTKEY           0xF150
#if (WINVER >= 0x0400)
    #define SC_DEFAULT      0xF160
    #define SC_MONITORPOWER 0xF170
    #define SC_CONTEXTHELP  0xF180
    #define SC_SEPARATOR    0xF00F
#endif
#define SC_ICON             SC_MINIMIZE
#define SC_ZOOM             SC_MAXIMIZE

/* System command flags */
#if (WINVER >= 0x0600)
    #define SCF_ISSECURE    0x00000001
#endif

/* Standard cursor identifiers */
#define IDC_ARROW       MAKEINTRESOURCE( 32512 )
#define IDC_IBEAM       MAKEINTRESOURCE( 32513 )
#define IDC_WAIT        MAKEINTRESOURCE( 32514 )
#define IDC_CROSS       MAKEINTRESOURCE( 32515 )
#define IDC_UPARROW     MAKEINTRESOURCE( 32516 )
#define IDC_SIZE        MAKEINTRESOURCE( 32640 )
#define IDC_ICON        MAKEINTRESOURCE( 32641 )
#define IDC_SIZENWSE    MAKEINTRESOURCE( 32642 )
#define IDC_SIZENESW    MAKEINTRESOURCE( 32643 )
#define IDC_SIZEWE      MAKEINTRESOURCE( 32644 )
#define IDC_SIZENS      MAKEINTRESOURCE( 32645 )
#define IDC_SIZEALL     MAKEINTRESOURCE( 32646 )
#define IDC_NO          MAKEINTRESOURCE( 32648 )
#if (WINVER >= 0x0500)
    #define IDC_HAND    MAKEINTRESOURCE( 32649 )
#endif
#define IDC_APPSTARTING MAKEINTRESOURCE( 32650 )
#if (WINVER >= 0x0400)
    #define IDC_HELP    MAKEINTRESOURCE( 32651 )
#endif

/* Image types */
#define IMAGE_BITMAP            0
#define IMAGE_ICON              1
#define IMAGE_CURSOR            2
#if (WINVER >= 0x0400)
    #define IMAGE_ENHMETAFILE   3
#endif

/* LoadImage() flags */
#if (WINVER >= 0x0400)
    #define LR_DEFAULTCOLOR     0x0000
    #define LR_MONOCHROME       0x0001
    #define LR_COLOR            0x0002
    #define LR_COPYRETURNORG    0x0004
    #define LR_COPYDELETEORG    0x0008
    #define LR_LOADFROMFILE     0x0010
    #define LR_LOADTRANSPARENT  0x0020
    #define LR_DEFAULTSIZE      0x0040
    #define LR_VGACOLOR         0x0080
    #define LR_LOADMAP3DCOLORS  0x1000
    #define LR_CREATEDIBSECTION 0x2000
    #define LR_COPYFROMRESOURCE 0x4000
    #define LR_SHARED           0x8000
#endif

/* DrawIconEx() flags */
#if (WINVER >= 0x0400)
    #define DI_MASK         0x0001
    #define DI_IMAGE        0x0002
    #define DI_NORMAL       0x0003
    #define DI_COMPAT       0x0004
    #define DI_DEFAULTSIZE  0x0008
    #if (_WIN32_WINNT >= 0x0501)
        #define DI_NOMIRROR 0x0010
    #endif
#endif

/* Values used to distinguish between icon and cursor files */
#if (WINVER >= 0x0400)
    #define RES_ICON    1
    #define RES_CURSOR  2
#endif

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

/* OEM cursor resource identifiers */
#ifdef OEMRESOURCE
    #define OCR_NORMAL          32512
    #define OCR_IBEAM           32513
    #define OCR_WAIT            32514
    #define OCR_CROSS           32515
    #define OCR_UP              32516
    #define OCR_SIZE            32640
    #define OCR_ICON            32641
    #define OCR_SIZENWSE        32642
    #define OCR_SIZENESW        32643
    #define OCR_SIZEWE          32644
    #define OCR_SIZENS          32645
    #define OCR_SIZEALL         32646
    #define OCR_ICOCUR          32647
    #define OCR_NO              32648
    #if (WINVER >= 0x0500)
        #define OCR_HAND        32649
    #endif
    #if (WINVER >= 0x0400)
        #define OCR_APPSTARTING 32650
    #endif
#endif

/* OEM icon resource identifiers */
#ifdef OEMRESOURCE
    #define OIC_SAMPLE          32512
    #define OIC_HAND            32513
    #define OIC_QUES            32514
    #define OIC_BANG            32515
    #define OIC_NOTE            32516
    #if (WINVER >= 0x0400)
        #define OIC_WINLOGO     32517
        #define OIC_WARNING     OIC_BANG
        #define OIC_ERROR       OIC_HAND
        #define OIC_INFORMATION OIC_NOTE
    #endif
    #if (WINVER >= 0x0600)
        #define OIC_SHIELD      32518
    #endif
#endif

/* Entry point ordinal for language drivers */
#define ORD_LANGDRIVER  1

/* Standard icon identifiers */
#define IDI_APPLICATION     MAKEINTRESOURCE( 32512 )
#define IDI_HAND            MAKEINTRESOURCE( 32513 )
#define IDI_QUESTION        MAKEINTRESOURCE( 32514 )
#define IDI_EXCLAMATION     MAKEINTRESOURCE( 32515 )
#define IDI_ASTERISK        MAKEINTRESOURCE( 32516 )
#if (WINVER >= 0x0400)
    #define IDI_WINLOGO     MAKEINTRESOURCE( 32517 )
    #define IDI_WARNING     IDI_EXCLAMATION
    #define IDI_ERROR       IDI_HAND
    #define IDI_INFORMATION IDI_ASTERISK
#endif
#if (WINVER >= 0x0600)
    #define IDI_SHIELD      MAKEINTRESOURCE( 32518 )
#endif

/* Dialog box button identifiers */
#define IDOK            1
#define IDCANCEL        2
#define IDABORT         3
#define IDRETRY         4
#define IDIGNORE        5
#define IDYES           6
#define IDNO            7
#if (WINVER >= 0x0400)
    #define IDCLOSE     8
    #define IDHELP      9
#endif
#if (WINVER >= 0x0500)
    #define IDTRYAGAIN  10
    #define IDCONTINUE  11
#endif

/* Edit control styles */
#define ES_LEFT         0x0000L
#define ES_CENTER       0x0001L
#define ES_RIGHT        0x0002L
#define ES_MULTILINE    0x0004L
#define ES_UPPERCASE    0x0008L
#define ES_LOWERCASE    0x0010L
#define ES_PASSWORD     0x0020L
#define ES_AUTOVSCROLL  0x0040L
#define ES_AUTOHSCROLL  0x0080L
#define ES_NOHIDESEL    0x0100L
#define ES_OEMCONVERT   0x0400L
#define ES_READONLY     0x0800L
#define ES_WANTRETURN   0x1000L
#if (WINVER >= 0x0400)
    #define ES_NUMBER   0x2000L
#endif

/* Edit control notification codes */
#define EN_SETFOCUS         0x0100
#define EN_KILLFOCUS        0x0200
#define EN_CHANGE           0x0300
#define EN_UPDATE           0x0400
#define EN_ERRSPACE         0x0500
#define EN_MAXTEXT          0x0501
#define EN_HSCROLL          0x0601
#define EN_VSCROLL          0x0602
#if (_WIN32_WINNT >= 0x0500)
    #define EN_ALIGN_LTR_EC 0x0700
    #define EN_ALIGN_RTL_EC 0x0701
#endif

/* EM_SETMARGINS parameter values */
#if (WINVER >= 0x0400)
    #define EC_LEFTMARGIN   0x0001
    #define EC_RIGHTMARGIN  0x0002
    #define EC_USEFONTINFO  0xFFFF
#endif

/* EM_SETIMESTATUS types */
#if (WINVER >= 0x0500)
    #define EMSIS_COMPOSITIONSTRING 0x0001
#endif

/* EMSIS_COMPOSITIONSTRING flags */
#if (WINVER >= 0x0500)
    #define EIMES_GETCOMPSTRATONCE          0x0001
    #define EIMES_CANCELCOMPSTRINFOCUS      0x0002
    #define EIMES_COMPLETECOMPSTRKILLFOCUS  0x0004
#endif

/* Edit control messages */
#define EM_GETSEL               0x00B0
#define EM_SETSEL               0x00B1
#define EM_GETRECT              0x00B2
#define EM_SETRECT              0x00B3
#define EM_SETRECTNP            0x00B4
#define EM_SCROLL               0x00B5
#define EM_LINESCROLL           0x00B6
#define EM_SCROLLCARET          0x00B7
#define EM_GETMODIFY            0x00B8
#define EM_SETMODIFY            0x00B9
#define EM_GETLINECOUNT         0x00BA
#define EM_LINEINDEX            0x00BB
#define EM_SETHANDLE            0x00BC
#define EM_GETHANDLE            0x00BD
#define EM_GETTHUMB             0x00BE
#define EM_LINELENGTH           0x00C1
#define EM_REPLACESEL           0x00C2
#define EM_GETLINE              0x00C4
#define EM_LIMITTEXT            0x00C5
#define EM_CANUNDO              0x00C6
#define EM_UNDO                 0x00C7
#define EM_FMTLINES             0x00C8
#define EM_LINEFROMCHAR         0x00C9
#define EM_SETTABSTOPS          0x00CB
#define EM_SETPASSWORDCHAR      0x00CC
#define EM_EMPTYUNDOBUFFER      0x00CD
#define EM_GETFIRSTVISIBLELINE  0x00CE
#define EM_SETREADONLY          0x00CF
#define EM_SETWORDBREAKPROC     0x00D0
#define EM_GETWORDBREAKPROC     0x00D1
#define EM_GETPASSWORDCHAR      0x00D2
#if (WINVER >= 0x0400)
    #define EM_SETMARGINS       0x00D3
    #define EM_GETMARGINS       0x00D4
    #define EM_SETLIMITTEXT     EM_LIMITTEXT
    #define EM_GETLIMITTEXT     0x00D5
    #define EM_POSFROMCHAR      0x00D6
    #define EM_CHARFROMPOS      0x00D7
#endif
#if (WINVER >= 0x0500)
    #define EM_SETIMESTATUS     0x00D8
    #define EM_GETIMESTATUS     0x00D9
#endif

/* Word break procedure codes */
#define WB_LEFT         0
#define WB_RIGHT        1
#define WB_ISDELIMITER  2

/* Button control styles */
#define BS_PUSHBUTTON       0x0000L
#define BS_DEFPUSHBUTTON    0x0001L
#define BS_CHECKBOX         0x0002L
#define BS_AUTOCHECKBOX     0x0003L
#define BS_RADIOBUTTON      0x0004L
#define BS_3STATE           0x0005L
#define BS_AUTO3STATE       0x0006L
#define BS_GROUPBOX         0x0007L
#define BS_USERBUTTON       0x0008L
#define BS_AUTORADIOBUTTON  0x0009L
#define BS_PUSHBOX          0x000AL
#define BS_OWNERDRAW        0x000BL
#define BS_TYPEMASK         0x000FL
#define BS_LEFTTEXT         0x0020L
#if (WINVER >= 0x0400)
    #define BS_TEXT         0x0000L
    #define BS_ICON         0x0040L
    #define BS_BITMAP       0x0080L
    #define BS_LEFT         0x0100L
    #define BS_RIGHT        0x0200L
    #define BS_CENTER       0x0300L
    #define BS_TOP          0x0400L
    #define BS_BOTTOM       0x0800L
    #define BS_VCENTER      0x0C00L
    #define BS_PUSHLIKE     0x1000L
    #define BS_MULTILINE    0x2000L
    #define BS_NOTIFY       0x4000L
    #define BS_FLAT         0x8000L
    #define BS_RIGHTBUTTON  BS_LEFTTEXT
#endif

/* Button control notification codes */
#define BN_CLICKED          0
#define BN_PAINT            1
#define BN_HILITE           2
#define BN_UNHILITE         3
#define BN_DISABLE          4
#define BN_DOUBLECLICKED    5
#if (WINVER >= 0x0400)
    #define BN_PUSHED       BN_HILITE
    #define BN_UNPUSHED     BN_UNHILITE
    #define BN_DBLCLK       BN_DOUBLECLICKED
    #define BN_SETFOCUS     6
    #define BN_KILLFOCUS    7
#endif

/* Button control messages */
#define BM_GETCHECK         0x00F0
#define BM_SETCHECK         0x00F1
#define BM_GETSTATE         0x00F2
#define BM_SETSTATE         0x00F3
#define BM_SETSTYLE         0x00F4
#if (WINVER >= 0x0400)
    #define BM_CLICK        0x00F5
    #define BM_GETIMAGE     0x00F6
    #define BM_SETIMAGE     0x00F7
#endif
#if (WINVER >= 0x0600)
    #define BM_SETDONTCLICK 0x00F8
#endif

/* Button control states */
#if (WINVER >= 0x0400)
    #define BST_UNCHECKED       0x0000
    #define BST_CHECKED         0x0001
    #define BST_INDETERMINATE   0x0002
    #define BST_PUSHED          0x0004
    #define BST_FOCUS           0x0008
#endif

/* Static control styles */
#define SS_LEFT                 0x0000L
#define SS_CENTER               0x0001L
#define SS_RIGHT                0x0002L
#define SS_ICON                 0x0003L
#define SS_BLACKRECT            0x0004L
#define SS_GRAYRECT             0x0005L
#define SS_WHITERECT            0x0006L
#define SS_BLACKFRAME           0x0007L
#define SS_GRAYFRAME            0x0008L
#define SS_WHITEFRAME           0x0009L
#define SS_USERITEM             0x000AL
#define SS_SIMPLE               0x000BL
#define SS_LEFTNOWORDWRAP       0x000CL
#if (WINVER >= 0x0400)
    #define SS_OWNERDRAW        0x000DL
    #define SS_BITMAP           0x000EL
    #define SS_ENHMETAFILE      0x000FL
    #define SS_ETCHEDHORZ       0x0010L
    #define SS_ETCHEDVERT       0x0011L
    #define SS_ETCHEDFRAME      0x0012L
    #define SS_TYPEMASK         0x001FL
#endif
#if (WINVER >= 0x0501)
    #define SS_REALSIZECONTROL  0x0040L
#endif
#define SS_NOPREFIX             0x0080L
#if (WINVER >= 0x0400)
    #define SS_NOTIFY           0x0100L
    #define SS_CENTERIMAGE      0x0200L
    #define SS_RIGHTJUST        0x0400L
    #define SS_REALSIZEIMAGE    0x0800L
    #define SS_SUNKEN           0x1000L
    #define SS_EDITCONTROL      0x2000L
    #define SS_ENDELLIPSIS      0x4000L
    #define SS_PATHELLIPSIS     0x8000L
    #define SS_WORDELLIPSIS     0xC000L
    #define SS_ELLIPSISMASK     0xC000L
#endif

/* Static control messages */
#define STM_SETICON         0x0170
#define STM_GETICON         0x0171
#if (WINVER >= 0x0400)
    #define STM_SETIMAGE    0x0172
    #define STM_GETIMAGE    0x0173
#endif
#define STM_MSGMAX          0x0174

/* Static control notification codes */
#if (WINVER >= 0x0400)
    #define STN_CLICKED 0
    #define STN_DBLCLK  1
    #define STN_ENABLE  2
    #define STN_DISABLE 3
#endif

/* Window classes for dialog boxes */
#define WC_DIALOG   MAKEINTATOM( 0x8002 )

/* GetWindowLong() offsets for dialog boxes */
#define DWL_MSGRESULT   0
#define DWL_DLGPROC     4
#define DWL_USER        8

/* GetWindowLongPtr() offsets for dialog boxes */
#define DWLP_MSGRESULT  0
#define DWLP_DLGPROC    (DWLP_MSGRESULT + sizeof( LRESULT ))
#define DWLP_USER       (DWLP_DLGPROC + sizeof( FARPROC ))

/* DlgDirList() flags */
#define DDL_READWRITE   0x0000
#define DDL_READONLY    0x0001
#define DDL_HIDDEN      0x0002
#define DDL_SYSTEM      0x0004
#define DDL_DIRECTORY   0x0010
#define DDL_ARCHIVE     0x0020
#define DDL_POSTMSGS    0x2000
#define DDL_DRIVES      0x4000
#define DDL_EXCLUSIVE   0x8000

/* Dialog box styles */
#define DS_ABSALIGN         0x0001L
#define DS_SYSMODAL         0x0002L
#define DS_LOCALEDIT        0x0020L
#define DS_SETFONT          0x0040L
#define DS_MODALFRAME       0x0080L
#define DS_NOIDLEMSG        0x0100L
#define DS_SETFOREGROUND    0x0200L
#if (WINVER >= 0x0400)
    #define DS_3DLOOK       0x0004L
    #define DS_FIXEDSYS     0x0008L
    #define DS_NOFAILCREATE 0x0010L
    #define DS_CONTROL      0x0400L
    #define DS_CENTER       0x0800L
    #define DS_CENTERMOUSE  0x1000L
    #define DS_CONTEXTHELP  0x2000L
    #define DS_SHELLFONT    (DS_SETFONT | DS_FIXEDSYS)
#endif

/* Dialog box messages */
#define DM_GETDEFID         (WM_USER + 0)
#define DM_SETDEFID         (WM_USER + 1)
#if (WINVER >= 0x0400)
    #define DM_REPOSITION   (WM_USER + 2)
#endif

/* Constant returned in high word by DM_GETDEFID */
#define DC_HASDEFID 0x534B

/* Dialog codes */
#define DLGC_WANTARROWS         0x0001
#define DLGC_WANTTAB            0x0002
#define DLGC_WANTALLKEYS        0x0004
#define DLGC_WANTMESSAGE        0x0004
#define DLGC_HASSETSEL          0x0008
#define DLGC_DEFPUSHBUTTON      0x0010
#define DLGC_UNDEFPUSHBUTTON    0x0020
#define DLGC_RADIOBUTTON        0x0040
#define DLGC_WANTCHARS          0x0080
#define DLGC_STATIC             0x0100
#define DLGC_BUTTON             0x2000

/* List box control message return values */
#define LB_OKAY     0
#define LB_ERR      (-1)
#define LB_ERRSPACE (-2)

/* List box control notification codes */
#define LBN_ERRSPACE    (-2)
#define LBN_SELCHANGE   1
#define LBN_DBLCLK      2
#define LBN_SELCANCEL   3
#define LBN_SETFOCUS    4
#define LBN_KILLFOCUS   5

/* List box control messages */
#define LB_ADDSTRING            0x0180
#define LB_INSERTSTRING         0x0181
#define LB_DELETESTRING         0x0182
#define LB_SELITEMRANGEEX       0x0183
#define LB_RESETCONTENT         0x0184
#define LB_SETSEL               0x0185
#define LB_SETCURSEL            0x0186
#define LB_GETSEL               0x0187
#define LB_GETCURSEL            0x0188
#define LB_GETTEXT              0x0189
#define LB_GETTEXTLEN           0x018A
#define LB_GETCOUNT             0x018B
#define LB_SELECTSTRING         0x018C
#define LB_DIR                  0x018D
#define LB_GETTOPINDEX          0x018E
#define LB_FINDSTRING           0x018F
#define LB_GETSELCOUNT          0x0190
#define LB_GETSELITEMS          0x0191
#define LB_SETTABSTOPS          0x0192
#define LB_GETHORIZONTALEXTENT  0x0193
#define LB_SETHORIZONTALEXTENT  0x0194
#define LB_SETCOLUMNWIDTH       0x0195
#define LB_ADDFILE              0x0196
#define LB_SETTOPINDEX          0x0197
#define LB_GETITEMRECT          0x0198
#define LB_GETITEMDATA          0x0199
#define LB_SETITEMDATA          0x019A
#define LB_SELITEMRANGE         0x019B
#define LB_SETANCHORINDEX       0x019C
#define LB_GETANCHORINDEX       0x019D
#define LB_SETCARETINDEX        0x019E
#define LB_GETCARETINDEX        0x019F
#define LB_SETITEMHEIGHT        0x01A0
#define LB_GETITEMHEIGHT        0x01A1
#define LB_FINDSTRINGEXACT      0x01A2
#define LB_SETLOCALE            0x01A5
#define LB_GETLOCALE            0x01A6
#define LB_SETCOUNT             0x01A7
#if (WINVER >= 0x0400)
    #define LB_INITSTORAGE      0x01A8
    #define LB_ITEMFROMPOINT    0x01A9
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define LB_GETLISTBOXINFO   0x01B2
    #define LB_MSGMAX           0x01B3
#elif (WINVER >= 0x0400)
    #define LB_MSGMAX           0x01B0
#else
    #define LB_MSGMAX           0x01A8
#endif

/* List box control styles */
#define LBS_NOTIFY              0x0001L
#define LBS_SORT                0x0002L
#define LBS_NOREDRAW            0x0004L
#define LBS_MULTIPLESEL         0x0008L
#define LBS_OWNERDRAWFIXED      0x0010L
#define LBS_OWNERDRAWVARIABLE   0x0020L
#define LBS_HASSTRINGS          0x0040L
#define LBS_USETABSTOPS         0x0080L
#define LBS_NOINTEGRALHEIGHT    0x0100L
#define LBS_MULTICOLUMN         0x0200L
#define LBS_WANTKEYBOARDINPUT   0x0400L
#define LBS_EXTENDEDSEL         0x0800L
#define LBS_DISABLENOSCROLL     0x1000L
#define LBS_NODATA              0x2000L
#if (WINVER >= 0x0400)
    #define LBS_NOSEL           0x4000L
#endif
#define LBS_COMBOBOX            0x8000L
#define LBS_STANDARD            (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)

/* Combo box control message return values */
#define CB_OKAY     0
#define CB_ERR      (-1)
#define CB_ERRSPACE (-2)

/* Combo box control notification codes */
#define CBN_ERRSPACE        (-1)
#define CBN_SELCHANGE       1
#define CBN_DBLCLK          2
#define CBN_SETFOCUS        3
#define CBN_KILLFOCUS       4
#define CBN_EDITCHANGE      5
#define CBN_EDITUPDATE      6
#define CBN_DROPDOWN        7
#define CBN_CLOSEUP         8
#define CBN_SELENDOK        9
#define CBN_SELENDCANCEL    10

/* Combo box control styles */
#define CBS_SIMPLE              0x0001L
#define CBS_DROPDOWN            0x0002L
#define CBS_DROPDOWNLIST        0x0003L
#define CBS_OWNERDRAWFIXED      0x0010L
#define CBS_OWNERDRAWVARIABLE   0x0020L
#define CBS_AUTOHSCROLL         0x0040L
#define CBS_OEMCONVERT          0x0080L
#define CBS_SORT                0x0100L
#define CBS_HASSTRINGS          0x0200L
#define CBS_NOINTEGRALHEIGHT    0x0400L
#define CBS_DISABLENOSCROLL     0x0800L
#if (WINVER >= 0x0400)
    #define CBS_UPPERCASE       0x2000L
    #define CBS_LOWERCASE       0x4000L
#endif

/* Combo box control messages */
#define CB_GETEDITSEL               0x0140
#define CB_LIMITTEXT                0x0141
#define CB_SETEDITSEL               0x0142
#define CB_ADDSTRING                0x0143
#define CB_DELETESTRING             0x0144
#define CB_DIR                      0x0145
#define CB_GETCOUNT                 0x0146
#define CB_GETCURSEL                0x0147
#define CB_GETLBTEXT                0x0148
#define CB_GETLBTEXTLEN             0x0149
#define CB_INSERTSTRING             0x014A
#define CB_RESETCONTENT             0x014B
#define CB_FINDSTRING               0x014C
#define CB_SELECTSTRING             0x014D
#define CB_SETCURSEL                0x014E
#define CB_SHOWDROPDOWN             0x014F
#define CB_GETITEMDATA              0x0150
#define CB_SETITEMDATA              0x0151
#define CB_GETDROPPEDCONTROLRECT    0x0152
#define CB_SETITEMHEIGHT            0x0153
#define CB_GETITEMHEIGHT            0x0154
#define CB_SETEXTENDEDUI            0x0155
#define CB_GETEXTENDEDUI            0x0156
#define CB_GETDROPPEDSTATE          0x0157
#define CB_FINDSTRINGEXACT          0x0158
#define CB_SETLOCALE                0x0159
#define CB_GETLOCALE                0x015A
#if (WINVER >= 0x0400)
    #define CB_GETTOPINDEX          0x015B
    #define CB_SETTOPINDEX          0x015C
    #define CB_GETHORIZONTALEXTENT  0x015D
    #define CB_SETHORIZONTALEXTENT  0x015E
    #define CB_GETDROPPEDWIDTH      0x015F
    #define CB_SETDROPPEDWIDTH      0x0160
    #define CB_INITSTORAGE          0x0161
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define CB_GETCOMBOBOXINFO      0x0164
    #define CB_MSGMAX               0x0165
#elif (WINVER >= 0x0400)
    #define CB_MSGMAX               0x0162
#else
    #define CB_MSGMAX               0x015B
#endif

/* Scroll bar control styles */
#define SBS_HORZ                    0x0000L
#define SBS_VERT                    0x0001L
#define SBS_TOPALIGN                0x0002L
#define SBS_LEFTALIGN               0x0002L
#define SBS_BOTTOMALIGN             0x0004L
#define SBS_RIGHTALIGN              0x0004L
#define SBS_SIZEBOXTOPLEFTALIGN     0x0002L
#define SBS_SIZEBOXBOTTOMRIGHTALIGN 0x0004L
#define SBS_SIZEBOX                 0x0008L
#if (WINVER >= 0x0400)
    #define SBS_SIZEGRIP            0x0010L
#endif

/* Scroll bar control messages */
#define SBM_SETPOS                  0x00E0
#define SBM_GETPOS                  0x00E1
#define SBM_SETRANGE                0x00E2
#define SBM_SETRANGEREDRAW          0x00E6
#define SBM_GETRANGE                0x00E3
#define SBM_ENABLE_ARROWS           0x00E4
#if (WINVER >= 0x0400)
    #define SBM_SETSCROLLINFO       0x00E9
    #define SBM_GETSCROLLINFO       0x00EA
#endif
#if (_WIN32_WINNT >= 0x0501)
    #define SBM_GETSCROLLBARINFO    0x00EB
#endif

/* Scroll information mask flags */
#if (WINVER >= 0x0400)
    #define SIF_RANGE           0x0001
    #define SIF_PAGE            0x0002
    #define SIF_POS             0x0004
    #define SIF_DISABLENOSCROLL 0x0008
    #define SIF_TRACKPOS        0x0010
    #define SIF_ALL             (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)
#endif

/* MDI client styles */
#define MDIS_ALLCHILDSTYLES 0x0001L

/* WM_MDITILE/WM_MDICASCADE flags */
#define MDITILE_VERTICAL        0x0000
#define MDITILE_HORIZONTAL      0x0001
#define MDITILE_SKIPDISABLED    0x0002
#if (_WIN32_WINNT >= 0x0500)
    #define MDITILE_ZORDER      0x0004
#endif

/* WinHelp() commands */
#define HELP_CONTEXT                0x00000001L
#define HELP_QUIT                   0x00000002L
#define HELP_INDEX                  0x00000003L
#define HELP_CONTENTS               0x00000003L
#define HELP_HELPONHELP             0x00000004L
#define HELP_SETINDEX               0x00000005L
#define HELP_SETCONTENTS            0x00000005L
#define HELP_CONTEXTPOPUP           0x00000008L
#define HELP_FORCEFILE              0x00000009L
#define HELP_KEY                    0x00000101L
#define HELP_COMMAND                0x00000102L
#define HELP_PARTIALKEY             0x00000105L
#define HELP_MULTIKEY               0x00000201L
#define HELP_SETWINPOS              0x00000203L
#if (WINVER >= 0x0400)
    #define HELP_CONTEXTMENU        0x0000000AL
    #define HELP_FINDER             0x0000000BL
    #define HELP_WM_HELP            0x0000000CL
    #define HELP_SETPOPUP_POS       0x0000000DL
    #define HELP_TCARD              0x00008000L
    #define HELP_TCARD_DATA         0x00000010L
    #define HELP_TCARD_OTHER_CALLER 0x00000011L
#endif

/* Help identifiers */
#if (WINVER >= 0x0400)
    #define IDH_NO_HELP             28440
    #define IDH_MISSING_CONTEXT     28441
    #define IDH_GENERIC_HELP_BUTTON 28442
    #define IDH_OK                  28443
    #define IDH_CANCEL              28444
    #define IDH_HELP                28445
#endif

/* GetGuiResources() flags */
#if (WINVER >= 0x0500)
    #define GR_GDIOBJECTS       0L
    #define GR_USEROBJECTS      1L
#endif
#if (WINVER >= 0x0601)
    #define GR_GDIOBJECTS_PEAK  2L
    #define GR_USEROBJECTS_PEAK 4L
#endif

/* SystemParametersInfo() commands */
#define SPI_GETBEEP                             0x0001
#define SPI_SETBEEP                             0x0002
#define SPI_GETMOUSE                            0x0003
#define SPI_SETMOUSE                            0x0004
#define SPI_GETBORDER                           0x0005
#define SPI_SETBORDER                           0x0006
#define SPI_GETKEYBOARDSPEED                    0x000A
#define SPI_SETKEYBOARDSPEED                    0x000B
#define SPI_LANGDRIVER                          0x000C
#define SPI_ICONHORIZONTALSPACING               0x000D
#define SPI_GETSCREENSAVETIMEOUT                0x000E
#define SPI_SETSCREENSAVETIMEOUT                0x000F
#define SPI_GETSCREENSAVEACTIVE                 0x0010
#define SPI_SETSCREENSAVEACTIVE                 0x0011
#define SPI_GETGRIDGRANULARITY                  0x0012
#define SPI_SETGRIDGRANULARITY                  0x0013
#define SPI_SETDESKWALLPAPER                    0x0014
#define SPI_SETDESKPATTERN                      0x0015
#define SPI_GETKEYBOARDDELAY                    0x0016
#define SPI_SETKEYBOARDDELAY                    0x0017
#define SPI_ICONVERTICALSPACING                 0x0018
#define SPI_GETICONTITLEWRAP                    0x0019
#define SPI_SETICONTITLEWRAP                    0x001A
#define SPI_GETMENUDROPALIGNMENT                0x001B
#define SPI_SETMENUDROPALIGNMENT                0x001C
#define SPI_SETDOUBLECLKWIDTH                   0x001D
#define SPI_SETDOUBLECLKHEIGHT                  0x001E
#define SPI_GETICONTITLELOGFONT                 0x001F
#define SPI_SETDOUBLECLICKTIME                  0x0020
#define SPI_SETMOUSEBUTTONSWAP                  0x0021
#define SPI_SETICONTITLELOGFONT                 0x0022
#define SPI_GETFASTTASKSWITCH                   0x0023
#define SPI_SETFASTTASKSWITCH                   0x0024
#if (WINVER >= 0x0400)
    #define SPI_SETDRAGFULLWINDOWS              0x0025
    #define SPI_GETDRAGFULLWINDOWS              0x0026
    #define SPI_GETNONCLIENTMETRICS             0x0029
    #define SPI_SETNONCLIENTMETRICS             0x002A
    #define SPI_GETMINIMIZEDMETRICS             0x002B
    #define SPI_SETMINIMIZEDMETRICS             0x002C
    #define SPI_GETICONMETRICS                  0x002D
    #define SPI_SETICONMETRICS                  0x002E
    #define SPI_SETWORKAREA                     0x002F
    #define SPI_GETWORKAREA                     0x0030
    #define SPI_SETPENWINDOWS                   0x0031
    #define SPI_GETHIGHCONTRAST                 0x0042
    #define SPI_SETHIGHCONTRAST                 0x0043
    #define SPI_GETKEYBOARDPREF                 0x0044
    #define SPI_SETKEYBOARDPREF                 0x0045
    #define SPI_GETSCREENREADER                 0x0046
    #define SPI_SETSCREENREADER                 0x0047
    #define SPI_GETANIMATION                    0x0048
    #define SPI_SETANIMATION                    0x0049
    #define SPI_GETFONTSMOOTHING                0x004A
    #define SPI_SETFONTSMOOTHING                0x004B
    #define SPI_SETDRAGWIDTH                    0x004C
    #define SPI_SETDRAGHEIGHT                   0x004D
    #define SPI_SETHANDHELD                     0x004E
    #define SPI_GETLOWPOWERTIMEOUT              0x004F
    #define SPI_GETPOWEROFFTIMEOUt              0x0050
    #define SPI_SETLOWPOWERTIMEOUT              0x0051
    #define SPI_SETPOWEROFFTIMEOUT              0x0052
    #define SPI_GETLOWPOWERACTIVE               0x0053
    #define SPI_GETPOWEROFFACTIVE               0x0054
    #define SPI_SETLOWPOWERACTIVE               0x0055
    #define SPI_SETPOWEROFFACTIVE               0x0056
    #define SPI_SETCURSORS                      0x0057
    #define SPI_SETICONS                        0x0058
    #define SPI_GETDEFAULTINPUTLANG             0x0059
    #define SPI_SETDEFAULTINPUTLANG             0x005A
    #define SPI_SETLANGTOGGLE                   0x005B
    #define SPI_GETWINDOWSEXTENSION             0x005C
    #define SPI_SETMOUSETRAILS                  0x005D
    #define SPI_GETMOUSETRAILS                  0x005E
    #define SPI_SETSCREENSAVERRUNNING           0x0061
    #define SPI_SCREENSAVERRUNNING              SPI_SETSCREENSAVERRUNNING
#endif
#define SPI_GETFILTERKEYS                       0x0032
#define SPI_SETFILTERKEYS                       0x0033
#define SPI_GETTOGGLEKEYS                       0x0034
#define SPI_SETTOGGLEKEYS                       0x0035
#define SPI_GETMOUSEKEYS                        0x0036
#define SPI_SETMOUSEKEYS                        0x0037
#define SPI_GETSHOWSOUNDS                       0x0038
#define SPI_SETSHOWSOUNDS                       0x0039
#define SPI_GETSTICKYKEYS                       0x003A
#define SPI_SETSTICKYKEYS                       0x003B
#define SPI_GETACCESSTIMEOUT                    0x003C
#define SPI_SETACCESSTIMEOUT                    0x003D
#if (WINVER >= 0x0400)
    #define SPI_GETSERIALKEYS                   0x003E
    #define SPI_SETSERIALKEYS                   0x003F
#endif
#define SPI_GETSOUNDSENTRY                      0x0040
#define SPI_SETSOUNDSENTRY                      0x0041
#if (_WIN32_WINNT >= 0x0400)
    #define SPI_GETSNAPTODEFBUTTON              0x005F
    #define SPI_SETSNAPTODEFBUTTON              0x0060
#endif
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
    #define SPI_GETMOUSEHOVERWIDTH              0x0062
    #define SPI_SETMOUSEHOVERWIDTH              0x0063
    #define SPI_GETMOUSEHOVERHEIGHT             0x0064
    #define SPI_SETMOUSEHOVERHEIGHT             0x0065
    #define SPI_GETMOUSEHOVERTIME               0x0066
    #define SPI_SETMOUSEHOVERTIME               0x0067
    #define SPI_GETWHEELSCROLLLINES             0x0068
    #define SPI_SETWHEELSCROLLLINES             0x0069
    #define SPI_GETMENUSHOWDELAY                0x006A
    #define SPI_SETMENUSHOWDELAY                0x006B
#endif
#if (_WIN32_WINNT >= 0x0600)
    #define SPI_GETWHEELSCROLLCHARS             0x006C
    #define SPI_SETWHEELSCROLLCHARS             0x006D
#endif
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
    #define SPI_GETSHOWIMEUI                    0x006E
    #define SPI_SETSHOWIMEUI                    0x006F
#endif
#if (WINVER >= 0x0500)
    #define SPI_GETMOUSESPEED                   0x0070
    #define SPI_SETMOUSESPEED                   0x0071
    #define SPI_GETSCREENSAVERRUNNING           0x0072
    #define SPI_GETDESKWALLPAPER                0x0073
#endif
#if (WINVER >= 0x0600)
    #define SPI_GETAUDIODESCRIPTION             0x0074
    #define SPI_SETAUDIODESCRIPTION             0x0075
    #define SPI_GETSCREENSAVESECURE             0x0076
    #define SPI_SETSCREENSAVESECURE             0x0077
#endif
#if (_WIN32_WINNT >= 0x0601)
    #define SPI_GETHUNGAPPTIMEOUT               0x0078
    #define SPI_SETHUNGAPPTIMEOUT               0x0079
    #define SPI_GETWAITTOKILLTIMEOUT            0x007A
    #define SPI_SETWAITTOKILLTIMEOUT            0x007B
    #define SPI_GETWAITTOKILLSERVICETIMEOUT     0x007C
    #define SPI_SETWAITTOKILLSERVICETIMEOUT     0x007D
    #define SPI_GETMOUSEDOCKTHRESHOLD           0x007E
    #define SPI_SETMOUSEDOCKTHRESHOLD           0x007F
    #define SPI_GETPENDOCKTHRESHOLD             0x0080
    #define SPI_SETPENDOCKTHRESHOLD             0x0081
    #define SPI_GETWINARRANGING                 0x0082
    #define SPI_SETWINARRANGING                 0x0083
    #define SPI_GETMOUSEDRAGOUTTHRESHOLD        0x0084
    #define SPI_SETMOUSEDRAGOUTTHRESHOLD        0x0085
    #define SPI_GETPENDRAGOUTTHRESHOLD          0x0086
    #define SPI_SETPENDRAGOUTTHRESHOLD          0x0087
    #define SPI_GETMOUSESIDEMOVETHRESHOLD       0x0088
    #define SPI_SETMOUSESIDEMOVETHRESHOLD       0x0089
    #define SPI_GETPENSIDEMOVETHRESHOLD         0x008A
    #define SPI_SETPENSIDEMOVETHRESHOLD         0x008B
    #define SPI_GETDRAGFROMMAXIMIZE             0x008C
    #define SPI_SETDRAGFROMMAXIMIZE             0x008D
    #define SPI_GETSNAPSIZING                   0x008E
    #define SPI_SETSNAPSIZING                   0x008F
    #define SPI_GETDOCKMOVING                   0x0090
    #define SPI_SETDOCKMOVING                   0x0091
#endif
#if (WINVER >= 0x0500)
    #define SPI_GETACTIVEWINDOWTRACKING         0x1000
    #define SPI_SETACTIVEWINDOWTRACKING         0x1001
    #define SPI_GETMENUANIMATION                0x1002
    #define SPI_SETMENUANIMATION                0x1003
    #define SPI_GETCOMBOBOXANIMATION            0x1004
    #define SPI_SETCOMBOBOXANIMATION            0x1005
    #define SPI_GETLISTBOXSMOOTHSCROLLING       0x1006
    #define SPI_SETLISTBOXSMOOTHSCROLLING       0x1007
    #define SPI_GETGRADIENTCAPTIONS             0x1008
    #define SPI_SETGRADIENTCAPTIONS             0x1009
    #define SPI_GETKEYBOARDCUES                 0x100A
    #define SPI_SETKEYBOARDCUES                 0x100B
    #define SPI_GETMENUUNDERLINES               SPI_GETKEYBOARDCUES
    #define SPI_SETMENUUNDERLINES               SPI_SETKEYBOARDCUES
    #define SPI_GETACTIVEWNDTRKZORDER           0x100C
    #define SPI_SETACTIVEWNDTRKZORDER           0x100D
    #define SPI_GETHOTTRACKING                  0x100E
    #define SPI_SETHOTTRACKING                  0x100F
    #define SPI_GETMENUFADE                     0x1012
    #define SPI_SETMENUFADE                     0x1013
    #define SPI_GETSELECTIONFADE                0x1014
    #define SPI_SETSELECTIONFADE                0x1015
    #define SPI_GETTOOLTIPANIMATION             0x1016
    #define SPI_SETTOOLTIPANIMATION             0x1017
    #define SPI_GETTOOLTIPFADE                  0x1018
    #define SPI_SETTOOLTIPFADE                  0x1019
    #define SPI_GETCURSORSHADOW                 0x101A
    #define SPI_SETCURSORSHADOW                 0x101B
    #if (_WIN32_WINNT >= 0x0501)
        #define SPI_GETMOUSESONAR               0x101C
        #define SPI_SETMOUSESONAR               0x101D
        #define SPI_GETMOUSECLICKLOCK           0x101E
        #define SPI_SETMOUSECLICKLOCK           0x101F
        #define SPI_GETMOUSEVANISH              0x1020
        #define SPI_SETMOUSEVANISH              0x1021
        #define SPI_GETFLATMENU                 0x1022
        #define SPI_SETFLATMENU                 0x1023
        #define SPI_GETDROPSHADOW               0x1024
        #define SPI_SETDROPSHADOW               0x1025
        #define SPI_GETBLOCKSENDINPUTRESETS     0x1026
        #define SPI_SETBLOCKSENDINPUTRESETS     0x1027
    #endif
    #define SPI_GETUIEFFECTS                    0x103E
    #define SPI_SETUIEFFECTS                    0x103F
    #if (_WIN32_WINNT >= 0x0600)
        #define SPI_GETDISABLEOVERLAPPEDCONTENT 0x1040
        #define SPI_SETDISABLEOVERLAPPEDCONTENT 0x1041
        #define SPI_GETCLIENTAREANIMATION       0x1042
        #define SPI_SETCLIENTAREANIMATION       0x1043
        #define SPI_GETCLEARTYPE                0x1048
        #define SPI_SETCLEARTYPE                0x1049
        #define SPI_GETSPEECHRECOGNITION        0x104A
        #define SPI_SETSPEECHRECOGNITION        0x104B
    #endif
    #define SPI_GETFOREGROUNDLOCKTIMEOUT        0x2000
    #define SPI_SETFOREGROUNDLOCKTIMEOUT        0x2001
    #define SPI_GETACTIVEWNDTRKTIMEOUT          0x2002
    #define SPI_SETACTIVEWNDTRKTIMEOUT          0x2003
    #define SPI_GETFOREGROUNDFLASHCOUNT         0x2004
    #define SPI_SETFOREGROUNDFLASHCOUNT         0x2005
    #define SPI_GETCARETWIDTH                   0x2006
    #define SPI_SETCARETWIDTH                   0x2007
    #if (_WIN32_WINNT >= 0x0501)
        #define SPI_GETMOUSECLICKLOCKTIME       0x2008
        #define SPI_SETMOUSECLICKLOCKTIME       0x2009
        #define SPI_GETFONTSMOOTHINGTYPE        0x200A
        #define SPI_SETFONTSMOOTHINGTYPE        0x200B
        #define SPI_GETFONTSMOOTHINGCONTRAST    0x200C
        #define SPI_SETFONTSMOOTHINGCONTRAST    0x200D
        #define SPI_GETFOCUSBORDERWIDTH         0x200E
        #define SPI_SETFOCUSBORDERWIDTH         0x200F
        #define SPI_GETFOCUSBORDERHEIGHT        0x2010
        #define SPI_SETFOCUSBORDERHEIGHT        0x2011
        #define SPI_GETFONTSMOOTHINGORIENTATION 0x2012
        #define SPI_SETFONTSMOOTHINGORIENTATION 0x2013
    #endif
    #if (_WIN32_WINNT >= 0x0600)
        #define SPI_GETMINIMUMHITRADIUS         0x2014
        #define SPI_SETMINIMUMHITRADUIS         0x2015
        #define SPI_GETMESSAGEDURATION          0x2016
        #define SPI_SETMESSAGEDURATION          0x2017
    #endif
#endif

/* SystemParametersInfo() flags */
#define SPIF_UPDATEINIFILE      0x0001
#define SPIF_SENDWININICHANGE   0x0002
#define SPIF_SENDCHANGE         SPIF_SENDWININICHANGE

/* Font smoothing types */
#if (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0501)
    #define FE_FONTSMOOTHINGSTANDARD    0x0001
    #define FE_FONTSMOOTHINGCLEARTYPE   0x0002
#endif

/* Font smoothing orientations */
#if (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0501)
    #define FE_FONTSMOOTHINGORIENTATIONBGR  0x0000
    #define FE_FONTSMMOTHINGORIENTATIONRGB  0x0001
#endif

/* Minimized window arrangements */
#define ARW_BOTTOMLEFT  0x0000
#define ARW_BOTTOMRIGHT 0x0001
#define ARW_TOPLEFT     0x0002
#define ARW_TOPRIGHT    0x0003
#define ARW_STARTMASK   0x0003
#define ARW_STARTRIGHT  0x0001
#define ARW_STARTTOP    0x0002
#define ARW_LEFT        0x0000
#define ARW_RIGHT       0x0000
#define ARW_UP          0x0004
#define ARW_DOWN        0x0004
#define ARW_HIDE        0x0008

/* SerialKeys flags */
#define SERKF_SERIALKEYSON  0x00000001L
#define SERKF_AVAILABLE     0x00000002L
#define SERKF_INDICATOR     0x00000004L

/* High contrast flags */
#define HCF_HIGHCONTRASTON  0x00000001L
#define HCF_AVAILABLE       0x00000002L
#define HCF_HOTKEYACTIVE    0x00000004L
#define HCF_CONFIRMHOTKEY   0x00000008L
#define HCF_HOTKEYSOUND     0x00000010L
#define HCF_INDICATOR       0x00000020L
#define HCF_HOTKEYAVAILABLE 0x00000040L
#define HCF_LOGONDESKTOP    0x00000100L
#define HCF_DEFAULTDESKTOP  0x00000200L

/* ChangeDisplaySettings() flags */
#define CDS_UPDATEREGISTRY              0x00000001L
#define CDS_TEST                        0x00000002L
#define CDS_FULLSCREEN                  0x00000004L
#define CDS_GLOBAL                      0x00000008L
#define CDS_SETPRIMARY                  0x00000010L
#define CDS_VIDEOPARAMETERS             0x00000020L
#if (WINVER >= 0x0600)
    #define CDS_ENABLE_UNSAFE_MODES     0x00000100L
    #define CDS_DISABLE_UNSAFE_MODES    0x00000200L
#endif
#define CDS_RESET                       0x40000000L
#define CDS_RESET_EX                    0x20000000L
#define CDS_NORESET                     0x10000000L

/* ChangeDisplaySettings() return values */
#define DISP_CHANGE_SUCCESSFUL      0
#define DISP_CHANGE_RESTART         1
#define DISP_CHANGE_FAILED          (-1)
#define DISP_CHANGE_BADMODE         (-2)
#define DISP_CHANGE_NOTUPDATED      (-3)
#define DISP_CHANGE_BADFLAGS        (-4)
#define DISP_CHANGE_BADPARAM        (-5)
#if (_WIN32_WINNT >= 0x0501)
    #define DISP_CHANGE_BADDUALVIEW (-6)
#endif

/* EnumDisplaySettings() modes */
#ifdef _WINGDI_
    #define ENUM_CURRENT_SETTINGS   0xFFFFFFFFL
    #define ENUM_REGISTRY_SETTINGS  0xFFFFFFFEL
#endif

/* EnumDisplaySettingsEx() flags */
#if (WINVER >= 0x0500)
    #ifdef _WINGDI_
        #define EDS_RAWMODE     0x00000002L
        #define EDS_ROTATEDMODE 0x00000004L
    #endif
#endif

/* EnumDisplayDevices() flags */
#if (WINVER >= 0x0500)
    #ifdef _WINGDI_
        #define EDD_GET_DEVICE_INTERFACE_NAME   0x00000001L
    #endif
#endif

/* FilterKeys flags */
#define FKF_FILTERKEYSON    0x00000001L
#define FKF_AVAILABLE       0x00000002L
#define FKF_HOTKEYACTIVE    0x00000004L
#define FKF_CONFIRMHOTKEY   0x00000008L
#define FKF_HOTKEYSOUND     0x00000010L
#define FKF_INDICATOR       0x00000020L
#define FKF_CLICKON         0x00000040L

/* StickyKeys flags */
#define SKF_STICKYKEYSON        0x00000001L
#define SKF_AVAILABLE           0x00000002L
#define SKF_HOTKEYACTIVE        0x00000004L
#define SKF_CONFIRMHOTKEY       0x00000008L
#define SKF_HOTKEYSOUND         0x00000010L
#define SKF_INDICATOR           0x00000020L
#define SKF_AUDIBLEFEEDBACK     0x00000040L
#define SKF_TRISTATE            0x00000080L
#define SKF_TWOKEYSOFF          0x00000100L
#if (_WIN32_WINNT >= 0x0500)
    #define SKF_LALTLATCHED     0x10000000L
    #define SKF_LCTLLATCHED     0x04000000L
    #define SKF_LSHIFTLATCHED   0x01000000L
    #define SKF_RALTLATCHED     0x20000000L
    #define SKF_RCTLLATCHED     0x08000000L
    #define SKF_RSHIFTLATCHED   0x02000000L
    #define SKF_LWINLATCHED     0x40000000L
    #define SKF_RWINLATCHED     0x80000000L
    #define SKF_LALTLOCKED      0x00100000L
    #define SKF_LCTLLOCKED      0x00040000L
    #define SKF_LSHIFTLOCKED    0x00010000L
    #define SKF_RALTLOCKED      0x00200000L
    #define SKF_RCTLLOCKED      0x00080000L
    #define SKF_RSHIFTLOCKED    0x00020000L
    #define SKF_LWINLOCKED      0x00400000L
    #define SKF_RWINLOCKED      0x00800000L
#endif

/* MouseKeys flags */
#define MKF_MOUSEKEYSON         0x00000001L
#define MKF_AVAILABLE           0x00000002L
#define MKF_HOTKEYACTIVE        0x00000004L
#define MKF_CONFIRMHOTKEY       0x00000008L
#define MKF_HOTKEYSOUND         0x00000010L
#define MKF_INDICATOR           0x00000020L
#define MKF_MODIFIERS           0x00000040L
#define MKF_REPLACENUMBERS      0x00000080L
#if (_WIN32_WINNT >= 0x0500)
    #define MKF_LEFTBUTTONSEL   0x10000000L
    #define MKF_RIGHTBUTTONSEL  0x20000000L
    #define MKF_LEFTBUTTONDOWN  0x01000000L
    #define MKF_RIGHTBUTTONDOWN 0x02000000L
    #define MKF_MOUSEMODE       0x80000000L
#endif

/* Access timeout flags */
#define ATF_TIMEOUTON       0x00000001L
#define ATF_ONOFFFEEDBACK   0x00000002L

/* SoundSentry graphical effects */
#define SSGF_NONE       0
#define SSGF_DISPLAY    3

/* SoundSentry text effects */
#define SSTF_NONE       0
#define SSTF_CHARS      1
#define SSTF_BORDER     2
#define SSTF_DISPLAY    3

/* SoundSentry window effects */
#define SSWF_NONE       0
#define SSWF_TITLE      1
#define SSWF_WINDOW     2
#define SSWF_DISPLAY    3
#define SSWF_CUSTOM     4

/* SoundSentry flags */
#define SSF_SOUNDSENTRYON   0x00000001L
#define SSF_AVAILABLE       0x00000002L
#define SSF_INDICATOR       0x00000004L

/* ToggleKeys flags */
#define TKF_TOGGLEKEYSON    0x00000001L
#define TKF_AVAILABLE       0x00000002L
#define TKF_HOTKEYACTIVE    0x00000004L
#define TKF_CONFIRMHOTKEY   0x00000008L
#define TKF_HOTKEYSOUND     0x00000010L
#define TKF_INDICATOR       0x00000020L

/* SetLastErrorEx() error types */
#define SLE_ERROR       0x00000001L
#define SLE_MINORERROR  0x00000002L
#define SLE_WARNING     0x00000003L

/* MonitorFromPoint()/MonitorFromRect()/MonitorFromWindow() flags */
#if (WINVER >= 0x0500)
    #define MONITOR_DEFAULTTONULL       0x00000000L
    #define MONITOR_DEFAULTTOPRIMARY    0x00000001L
    #define MONITOR_DEFAULTTONEAREST    0x00000002L
#endif

/* Monitor information flags */
#if (WINVER >= 0x0500)
    #define MONITORINFOF_PRIMARY    0x00000001L
#endif

/* Maximum length of a device name */
#if (WINVER >= 0x0500)
    #ifndef CCHDEVICENAME
        #define CCHDEVICENAME   32
    #endif
#endif

/* SetWinEventHook() flags */
#if (WINVER >= 0x0500)
    #define WINEVENT_OUTOFCONTEXT   0x00000000L
    #define WINEVENT_SKIPOWNTHREAD  0x00000001L
    #define WINEVENT_SKIPOWNPROCESS 0x00000002L
    #define WINEVENT_INCONTEXT      0x00000004L
#endif

/* Common object identifiers */
#if (WINVER >= 0x0500)
    #define CHILDID_SELF        0
    #define INDEXID_OBJECT      0
    #define INDEXID_CONTAINER   0
#endif

/* System object identifiers */
#if (WINVER >= 0x0500)
    #define OBJID_WINDOW            0x00000000L
    #define OBJID_SYSMENU           0xFFFFFFFFL
    #define OBJID_TITLEBAR          0xFFFFFFFEL
    #define OBJID_MENU              0xFFFFFFFDL
    #define OBJID_CLIENT            0xFFFFFFFCL
    #define OBJID_VSCROLL           0xFFFFFFFBL
    #define OBJID_HSCROLL           0xFFFFFFFAL
    #define OBJID_SIZEGRIP          0xFFFFFFF9L
    #define OBJID_CARET             0xFFFFFFF8L
    #define OBJID_CURSOR            0xFFFFFFF7L
    #define OBJID_ALERT             0xFFFFFFF6L
    #define OBJID_SOUND             0xFFFFFFF5L
    #define OBJID_QUERYCLASSNAMEIDX 0xFFFFFFF4L
    #define OBJID_NATIVEOM          0xFFFFFFF0L
#endif

/* Accessibility events */
#if (WINVER >= 0x0500)
    #define EVENT_MIN                               0x00000001L
    #define EVENT_MAX                               0x7FFFFFFFL
    #define EVENT_SYSTEM_SOUND                      0x00000001L
    #define EVENT_SYSTEM_ALERT                      0x00000002L
    #define EVENT_SYSTEM_FOREGROUND                 0x00000003L
    #define EVENT_SYSTEM_MENUSTART                  0x00000004L
    #define EVENT_SYSTEM_MENUEND                    0x00000005L
    #define EVENT_SYSTEM_MENUPOPUPSTART             0x00000006L
    #define EVENT_SYSTEM_MENUPOPUPEND               0x00000007L
    #define EVENT_SYSTEM_CAPTURESTART               0x00000008L
    #define EVENT_SYSTEM_CAPTUREEND                 0x00000009L
    #define EVENT_SYSTEM_MOVESIZESTART              0x0000000AL
    #define EVENT_SYSTEM_MOVESIZEEND                0x0000000BL
    #define EVENT_SYSTEM_CONTEXTHELPSTART           0x0000000CL
    #define EVENT_SYSTEM_CONTEXTHELPEND             0x0000000DL
    #define EVENT_SYSTEM_DRAGDROPSTART              0x0000000EL
    #define EVENT_SYSTEM_DRAGDROPEND                0x0000000FL
    #define EVENT_SYSTEM_DIALOGSTART                0x00000010L
    #define EVENT_SYSTEM_DIALOGEND                  0x00000011L
    #define EVENT_SYSTEM_SCROLLINGSTART             0x00000012L
    #define EVENT_SYSTEM_SCROLLINGEND               0x00000013L
    #define EVENT_SYSTEM_SWITCHSTART                0x00000014L
    #define EVENT_SYSTEM_SWITCHEND                  0x00000015L
    #define EVENT_SYSTEM_MINIMIZESTART              0x00000016L
    #define EVENT_SYSTEM_MINIMIZEEND                0x00000017L
    #if (_WIN32_WINNT >= 0x0600)
        #define EVENT_SYSTEM_DESKTOPSWITCH          0x00000020L
    #endif
    #if (_WIN32_WINNT >= 0x0601)
        #define EVENT_SYSTEM_END                    0x000000FFL
        #define EVENT_OEM_DEFINED_START             0x00000101L
        #define EVENT_OEM_DEFINED_END               0x000001FFL
    #endif
    #if (_WIN32_WINNT >= 0x0501)
        #define EVENT_CONSOLE_CARET                 0x00004001L
        #define EVENT_CONSOLE_UPDATE_REGION         0x00004002L
        #define EVENT_CONSOLE_UPDATE_SIMPLE         0x00004003L
        #define EVENT_CONSOLE_UPDATE_SCROLL         0x00004004L
        #define EVENT_CONSOLE_LAYOUT                0x00004005L
        #define EVENT_CONSOLE_START_APPLICATION     0x00004006L
        #define EVENT_CONSOLE_END_APPLICATION       0x00004007L
    #endif
    #if (_WIN32_WINNT >= 0x0601)
        #define EVENT_CONSOLE_END                   0x000040FFL
        #define EVENT_UIA_EVENTID_START             0x00004E00L
        #define EVENT_UIA_EVENTID_END               0x00004EFFL
        #define EVENT_UIA_PROPID_START              0x00007500L
        #define EVENT_UIA_PROPID_END                0x000075FFL
    #endif
    #define EVENT_OBJECT_CREATE                     0x00008000L
    #define EVENT_OBJECT_DESTROY                    0x00008001L
    #define EVENT_OBJECT_SHOW                       0x00008002L
    #define EVENT_OBJECT_HIDE                       0x00008003L
    #define EVENT_OBJECT_REORDER                    0x00008004L
    #define EVENT_OBJECT_FOCUS                      0x00008005L
    #define EVENT_OBJECT_SELECTION                  0x00008006L
    #define EVENT_OBJECT_SELECTIONADD               0x00008007L
    #define EVENT_OBJECT_SELECTIONREMOVE            0x00008008L
    #define EVENT_OBJECT_SELECTIONWITHIN            0x00008009L
    #define EVENT_OBJECT_STATECHANGE                0x0000800AL
    #define EVENT_OBJECT_LOCATIONCHANGE             0x0000800BL
    #define EVENT_OBJECT_NAMECHANGE                 0x0000800CL
    #define EVENT_OBJECT_DESCRIPTIONCHANGE          0x0000800DL
    #define EVENT_OBJECT_VALUECHANGE                0x0000800EL
    #define EVENT_OBJECT_PARENTCHANGE               0x0000800FL
    #define EVENT_OBJECT_HELPCHANGE                 0x00008010L
    #define EVENT_OBJECT_DEFACTIONCHANGE            0x00008011L
    #define EVENT_OBJECT_ACCELERATORCHANGE          0x00008012L
    #if (_WIN32_WINNT >= 0x0600)
        #define EVENT_OBJECT_INVOKED                0x00008013L
        #define EVENT_OBJECT_TEXTSELECTIONCHANGED   0x00008014L
        #define EVENT_OBJECT_CONTENTSCROLLED        0x00008015L
    #endif
    #if (_WIN32_WINNT >= 0x0601)
        #define EVENT_SYSTEM_ARRANGEMENTPREVIEW     0x00008016L
        #define EVENT_OBJECT_END                    0x000080FFL
        #define EVENT_AIA_START                     0x0000A000L
        #define EVENT_AIA_END                       0x0000AFFFL
    #endif
#endif

/* Console application flags */
#if (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0501)
    #define CONSOLE_APPLICATION_16BIT   0x00000001L
#endif

/* Console caret flags */
#if (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0501)
    #define CONSOLE_CARET_SELECTION 0x00000001L
    #define CONSOLE_CARET_VISIBLE   0x00000002L
#endif

/* System sounds */
#if (WINVER >= 0x0500)
    #define SOUND_SYSTEM_STARTUP        1L
    #define SOUND_SYSTEM_SHUTDOWN       2L
    #define SOUND_SYSTEM_BEEP           3L
    #define SOUND_SYSTEM_ERROR          4L
    #define SOUND_SYSTEM_QUESTION       5L
    #define SOUND_SYSTEM_WARNING        6L
    #define SOUND_SYSTEM_INFORMATION    7L
    #define SOUND_SYSTEM_MAXIMIZE       8L
    #define SOUND_SYSTEM_MINIMIZE       9L
    #define SOUND_SYSTEM_RESTOREUP      10L
    #define SOUND_SYSTEM_RESTOREDOWN    11L
    #define SOUND_SYSTEM_APPSTART       12L
    #define SOUND_SYSTEM_FAULT          13L
    #define SOUND_SYSTEM_APPEND         14L
    #define SOUND_SYSTEM_MENUCOMMAND    15L
    #define SOUND_SYSTEM_MENUPOPUP      16L
    #define CSOUND_SYSTEM               16L
#endif

/* System alerts */
#if (WINVER >= 0x0500)
    #define ALERT_SYSTEM_INFORMATIONAL  1L
    #define ALERT_SYSTEM_WARNING        2L
    #define ALERT_SYSTEM_ERROR          3L
    #define ALERT_SYSTEM_QUERY          4L
    #define ALERT_SYSTEM_CRITICAL       5L
    #define CALERT_SYSTEM               6L
#endif

/* GUI thread information flags */
#if (WINVER >= 0x0500)
    #define GUI_CARETBLINKING   0x00000001L
    #define GUI_INMOVESIZE      0x00000002L
    #define GUI_INMENUMODE      0x00000004L
    #define GUI_SYSTEMMENUMODE  0x00000008L
    #define GUI_POPUPMENUMODE   0x00000010L
    #if (_WIN32_WINNT >= 0x0501)
        #define GUI_16BITTASK   0x00000020L
    #endif
#endif

/* Default screen DPI */
#if (_WIN32_WINNT >= 0x0600)
    #define USER_DEFAULT_SCREEN_DPI 96
#endif

/* System state flags */
#if (WINVER >= 0x0500)
    #define STATE_SYSTEM_UNAVAILABLE        0x00000001L
    #define STATE_SYSTEM_SELECTED           0x00000002L
    #define STATE_SYSTEM_FOCUSED            0x00000004L
    #define STATE_SYSTEM_PRESSED            0x00000008L
    #define STATE_SYSTEM_CHECKED            0x00000010L
    #define STATE_SYSTEM_MIXED              0x00000020L
    #define STATE_SYSTEM_INDETERMINATE      STATE_SYSTEM_MIXED
    #define STATE_SYSTEM_READONLY           0x00000040L
    #define STATE_SYSTEM_HOTTRACKED         0x00000080L
    #define STATE_SYSTEM_DEFAULT            0x00000100L
    #define STATE_SYSTEM_EXPANDED           0x00000200L
    #define STATE_SYSTEM_COLLAPSED          0x00000400L
    #define STATE_SYSTEM_BUSY               0x00000800L
    #define STATE_SYSTEM_FLOATING           0x00001000L
    #define STATE_SYSTEM_MARQUEED           0x00002000L
    #define STATE_SYSTEM_ANIMATED           0x00004000L
    #define STATE_SYSTEM_INVISIBLE          0x00008000L
    #define STATE_SYSTEM_OFFSCREEN          0x00010000L
    #define STATE_SYSTEM_SIZEABLE           0x00020000L
    #define STATE_SYSTEM_MOVEABLE           0x00040000L
    #define STATE_SYSTEM_SELFVOICING        0x00080000L
    #define STATE_SYSTEM_FOCUSABLE          0x00100000L
    #define STATE_SYSTEM_SELECTABLE         0x00200000L
    #define STATE_SYSTEM_LINKED             0x00400000L
    #define STATE_SYSTEM_TRAVERSED          0x00800000L
    #define STATE_SYSTEM_MULTISELECTABLE    0x01000000L
    #define STATE_SYSTEM_EXTSELECTABLE      0x02000000L
    #define STATE_SYSTEM_ALERT_LOW          0x04000000L
    #define STATE_SYSTEM_ALERT_MEDIUM       0x08000000L
    #define STATE_SYSTEM_ALERT_HIGH         0x10000000L
    #define STATE_SYSTEM_PROTECTED          0x20000000L
    #define STATE_SYSTEM_VALID              0x3FFFFFFFL
#endif

/* Number of children of title bars and scroll bars */
#if (WINVER >= 0x0500)
    #define CCHILDREN_TITLEBAR  5
    #define CCHILDREN_SCROLLBAR 5
#endif

/* Cursor information flags */
#if (WINVER >= 0x0500)
    #define CURSOR_SHOWING  0x00000001L
#endif

/* Window status flags */
#if (WINVER >= 0x0500)
    #define WS_ACTIVECAPTION    0x00000001L
#endif

/* GetAncestor() flags */
#if (WINVER >= 0x0500)
    #define GA_PARENT       1
    #define GA_ROOT         2
    #define GA_ROOTOWNER    3
#endif

/* Raw input codes */
#if (_WIN32_WINNT >= 0x0501)
    #define RIM_INPUT       0
    #define RIM_INPUTSINK   1
#endif

/* Raw input types */
#if (_WIN32_WINNT >= 0x0501)
    #define RIM_TYPEMOUSE       0L
    #define RIM_TYPEKEYBOARD    1L
    #define RIM_TYPEHID         2L
#endif

/* Raw input mouse button state flags */
#if (_WIN32_WINNT >= 0x0501)
    #define RI_MOUSE_LEFT_BUTTON_DOWN   0x00000001L
    #define RI_MOUSE_LEFT_BUTTON_UP     0x00000002L
    #define RI_MOUSE_RIGHT_BUTTON_DOWN  0x00000004L
    #define RI_MOUSE_RIGHT_BUTTON_UP    0x00000008L
    #define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x00000010L
    #define RI_MOUSE_MIDDLE_BUTTON_UP   0x00000020L
    #define RI_MOUSE_BUTTON_1_DOWN      RI_MOUSE_LEFT_BUTTON_DOWN
    #define RI_MOUSE_BUTTON_1_UP        RI_MOUSE_LEFT_BUTTON_UP
    #define RI_MOUSE_BUTTON_2_DOWN      RI_MOUSE_RIGHT_BUTTON_DOWN
    #define RI_MOUSE_BUTTON_2_UP        RI_MOUSE_RIGHT_BUTTON_UP
    #define RI_MOUSE_BUTTON_3_DOWN      RI_MOUSE_MIDDLE_BUTTON_DOWN
    #define RI_MOUSE_BUTTON_3_UP        RI_MOUSE_MIDDLE_BUTTON_UP
    #define RI_MOUSE_BUTTON_4_DOWN      0x00000040L
    #define RI_MOUSE_BUTTON_4_UP        0x00000080L
    #define RI_MOUSE_BUTTON_5_DOWN      0x00000100L
    #define RI_MOUSE_BUTTON_5_UP        0x00000200L
    #define RI_MOUSE_WHEEL              0x00000400L
#endif

/* Raw input mouse state flags */
#if (_WIN32_WINNT >= 0x0501)
    #define MOUSE_MOVE_RELATIVE         0x00000000L
    #define MOUSE_MOVE_ABSOLUTE         0x00000001L
    #define MOUSE_VIRTUAL_DESKTOP       0x00000002L
    #define MOUSE_ATTRIBUTES_CHANGED    0x00000004L
    #if (WINVER >= 0x0600)
        #define MOUSE_MOVE_NOCOALESCE   0x00000008L
    #endif
#endif

/* Keyboard overrun make code */
#if (_WIN32_WINNT >= 0x0501)
    #define KEYBOARD_OVERRUN_MAKE_CODE  0x00FF
#endif

/* Raw input keyboard flags */
#if (_WIN32_WINNT >= 0x0501)
    #define RI_KEY_MAKE             0x0000
    #define RI_KEY_BREAK            0x0001
    #define RI_KEY_E0               0x0002
    #define RI_KEY_E1               0x0004
    #define RI_KEY_TERMSRV_SET_LED  0x0008
    #define RI_KEY_TERMSRV_SHADOW   0x0010
#endif

/* GetRawInputData() flags */
#if (_WIN32_WINNT >= 0x0501)
    #define RID_INPUT   0x10000003L
    #define RID_HEADER  0x10000005L
#endif

/* Raw input device information flags */
#if (_WIN32_WINNT >= 0x0501)
    #define RIDI_PREPARSEDDATA  0x20000005L
    #define RIDI_DEVICENAME     0x20000007L
    #define RIDI_DEVICEINFO     0x2000000BL
#endif

/* Raw input device flags */
#if (_WIN32_WINNT >= 0x0501)
    #define RIDEV_REMOVE        0x00000001L
    #define RIDEV_EXCLUDE       0x00000010L
    #define RIDEV_PAGEONLY      0x00000020L
    #define RIDEV_NOLEGACY      0x00000030L
    #define RIDEV_INPUTSINK     0x00000100L
    #define RIDEV_CAPTUREMOUSE  0x00000200L
    #define RIDEV_NOHOTKEYS     0x00000200L
    #define RIDEV_APPKEYS       0x00000400L
    #define RIDEV_EXINPUTSINK   0x00001000L
    #define RIDEV_DEVNOTIFY     0x00002000L
    #define RIDEV_EXMODEMASK    0x000000F0L
#endif

/* WM_INPUT_DEVICE_CHANGE flags */
#if (_WIN32_WINNT >= 0x0501)
    #define GIDC_ARRIVAL    1
    #define GIDC_REMOVAL    2
#endif

/* ChangeWindowMessageFilter() flags */
#if (WINVER >= 0x0600)
    #define MSGFLT_ADD      1
    #define MSGFLT_REMOVE   2
#endif

/* ChangeWindowMessageFilterEx() extended status values */
#if (WINVER >= 0x0601)
    #define MSGFLTINFO_NONE                     0L
    #define MSGFLTINFO_ALREADYALLOWED_FORWND    1L
    #define MSGFLTINFO_ALREADYDISALLOWED_FORWND 2L
    #define MSGFLTINFO_ALLOWED_HIGHER           3L
#endif

/* ChangeWindowMessageFilterEx() actions */
#if (WINVER >= 0x0601)
    #define MSGFLT_RESET    0L
    #define MSGFLT_ALLOW    1L
    #define MSGFLT_DISALLOW 2L
#endif

/* Gesture flags */
#if (WINVER >= 0x0601)
    #define GF_BEGIN    0x00000001L
    #define GF_INERTIA  0x00000002L
    #define GF_END      0x00000004L
#endif

/* Gesture identifiers */
#if (WINVER >= 0x0601)
    #define GID_BEGIN           1L
    #define GID_END             2L
    #define GID_ZOOM            3L
    #define GID_PAN             4L
    #define GID_ROTATE          5L
    #define GID_TWOFINGERTAP    6L
    #define GID_PRESSANDTAP     7L
    #define GID_ROLLOVER        GID_PRESSANDTAP
#endif

/* Gesture configuration flags */
#if (WINVER >= 0x0601)
    #define GC_ALLGESTURES                          0x00000001L
    #define GC_ZOOM                                 0x00000001L
    #define GC_PAN                                  0x00000001L
    #define GC_PAN_WITH_SINGLE_FINGER_VERTICALLY    0x00000002L
    #define GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY  0x00000004L
    #define GC_PAN_WITH_GUTTER                      0x00000008L
    #define GC_PAN_WITH_INERTIA                     0x00000010L
    #define GC_ROTATE                               0x00000001L
    #define GC_TWOFINGERTAP                         0x00000001L
    #define GC_PRESSANDTAP                          0x00000001L
    #define GC_ROLLOVER                             GC_PRESSANDTAP
#endif

/* Gesture configuration maximum count */
#if (WINVER >= 0x0601)
    #define GESTURECONFIGMAXCOUNT   256
#endif

/* GetGestureConfig() flags */
#if (WINVER >= 0x0601)
    #define GCF_INCLUDE_ANCESTORS   0x00000001L
#endif

/* Digitizer flags */
#if (WINVER >= 0x0601)
    #define NID_INTEGRATED_TOUCH    0x00000001
    #define NID_EXTERNAL_TOUCH      0x00000002
    #define NID_INTEGRATED_PEN      0x00000004
    #define NID_EXTERNAL_PEN        0x00000008
    #define NID_MULTI_INPUT         0x00000040
    #define NID_READY               0x00000080
#endif

/* Maximum shutdown block reason length */
#define MAX_STR_BLOCKREASON 256

/* Menu template data type */
typedef VOID            MENUTEMPLATEA;
typedef VOID            MENUTEMPLATEW;
typedef PVOID           LPMENUTEMPLATEA;
typedef PVOID           LPMENUTEMPLATEW;
#ifdef UNICODE
typedef MENUTEMPLATEW   MENUTEMPLATE;
typedef LPMENUTEMPLATEW LPMENUTEMPLATE;
#else
typedef MENUTEMPLATEA   MENUTEMPLATE;
typedef LPMENUTEMPLATEA LPMENUTEMPLATE;
#endif

/* Callback functions */
typedef INT_PTR (CALLBACK *DLGPROC)( HWND, UINT, WPARAM, LPARAM );
typedef int (CALLBACK *EDITWORDBREAKPROCA)( LPSTR, int, int, int );
typedef int (CALLBACK *EDITWORDBREAKPROCW)( LPWSTR, int, int, int );
typedef BOOL (CALLBACK *GRAYSTRINGPROC)( HDC, LPARAM, int );
typedef LRESULT (CALLBACK *HOOKPROC)( int, WPARAM, LPARAM );
typedef BOOL (CALLBACK *NAMEENUMPROCA)( LPSTR, LPARAM );
typedef BOOL (CALLBACK *NAMEENUMPROCW)( LPWSTR, LPARAM );
typedef BOOL (CALLBACK *PROPENUMPROCA)( HWND, LPCSTR, HANDLE );
typedef BOOL (CALLBACK *PROPENUMPROCEXA)( HWND, LPSTR, HANDLE, ULONG_PTR );
typedef BOOL (CALLBACK *PROPENUMPROCEXW)( HWND, LPWSTR, HANDLE, ULONG_PTR );
typedef BOOL (CALLBACK *PROPENUMPROCW)( HWND, LPCWSTR, HANDLE );
typedef VOID (CALLBACK *SENDASYNCPROC)( HWND, UINT, ULONG_PTR, LRESULT );
typedef VOID (CALLBACK *TIMERPROC)( HWND, UINT, UINT_PTR, DWORD );
typedef BOOL (CALLBACK *WNDENUMPROC)( HWND, LPARAM );
typedef LRESULT (CALLBACK *WNDPROC)( HWND, UINT, WPARAM, LPARAM );
#if (WINVER >= 0x0400)
typedef BOOL (CALLBACK *DRAWSTATEPROC)( HDC, LPARAM, WPARAM, int, int );
#endif
typedef NAMEENUMPROCA   DESKTOPENUMPROCA;
typedef NAMEENUMPROCW   DESKTOPENUMPROCW;
typedef NAMEENUMPROCA   WINSTAENUMPROCA;
typedef NAMEENUMPROCW   WINSTAENUMPROCW;
#ifdef UNICODE
    #define DESKTOPENUMPROC     DESKTOPENUMPROCW
    #define EDITWORDBREAKPROC   EDITWORDBREAKPROCW
    #define PROPENUMPROC        PROPENUMPROCW
    #define PROPENUMPROCEX      PROPENUMPROCEXW
    #define WINSTAENUMPROC      WINSTAENUMPROCW
#else
    #define DESKTOPENUMPROC     DESKTOPENUMPROCA
    #define EDITWORDBREAKPROC   EDITWORDBREAKPROCA
    #define PROPENUMPROC        PROPENUMPROCA
    #define PROPENUMPROCEX      PROPENUMPROCEXA
    #define WINSTAENUMPROC      WINSTAENUMPROCA
#endif

/* Parameters to HCBT_CREATEWND */
typedef struct tagCBT_CREATEWNDA {
    struct tagCREATESTRUCTA *lpcs;
    HWND                    hwndInsertAfter;
} CBT_CREATEWNDA;
typedef CBT_CREATEWNDA      *LPCBT_CREATEWNDA;
typedef struct tagCBT_CREATEWNDW {
    struct tagCREATESTRUCTW *lpcs;
    HWND                    hwndInsertAfter;
} CBT_CREATEWNDW;
typedef CBT_CREATEWNDW      *LPCBT_CREATEWNDW;
#ifdef UNICODE
typedef CBT_CREATEWNDW      CBT_CREATEWND;
typedef LPCBT_CREATEWNDW    LPCBT_CREATEWND;
#else
typedef CBT_CREATEWNDA      CBT_CREATEWND;
typedef LPCBT_CREATEWNDA    LPCBT_CREATEWND;
#endif

/* Parameters to HCBT_ACTIVATE */
typedef struct tagCBTACTIVATESTRUCT {
    BOOL    fMouse;
    HWND    hWndActive;
} CBTACTIVATESTRUCT;
typedef CBTACTIVATESTRUCT   *LPCBTACTIVATESTRUCT;

/* Parameters to WM_WTSSESSION_CHANGE */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagWTSSESSION_NOTIFICATION {
    DWORD   cbSize;
    DWORD   dwSessionId;
} WTSSESSION_NOTIFICATION;
typedef WTSSESSION_NOTIFICATION *PWTSSESSION_NOTIFICATION;
#endif

/* Shell hook information */
typedef struct {
    HWND    hwnd;
    RECT    rc;
} SHELLHOOKINFO;
typedef SHELLHOOKINFO   *LPSHELLHOOKINFO;

/* Event message */
typedef struct tagEVENTMSG {
    UINT    message;
    UINT    paramL;
    UINT    paramH;
    DWORD   time;
    HWND    hwnd;
} EVENTMSG;
typedef EVENTMSG    *PEVENTMSG;
typedef EVENTMSG    *NPEVENTMSG;
typedef EVENTMSG    *LPEVENTMSG;

/* Parameters to WH_CALLWNDPROC */
typedef struct tagCWPSTRUCT {
    LPARAM  lParam;
    WPARAM  wParam;
    UINT    message;
    HWND    hwnd;
} CWPSTRUCT;
typedef CWPSTRUCT   *PCWPSTRUCT;
typedef CWPSTRUCT   *NPCWPSTRUCT;
typedef CWPSTRUCT   *LPCWPSTRUCT;

/* Parameters to WH_CALLWNDPROCRET */
#if (WINVER >= 0x0400)
typedef struct tagCWPRETSTRUCT {
    LRESULT lResult;
    LPARAM  lParam;
    WPARAM  wParam;
    UINT    message;
    HWND    hwnd;
} CWPRETSTRUCT;
typedef CWPRETSTRUCT    *PCWPRETSTRUCT;
typedef CWPRETSTRUCT    *NPCWPRETSTRUCT;
typedef CWPRETSTRUCT    *LPCWPRETSTRUCT;
#endif

/* Parameters to WH_KEYBOARD_LL */
#if (_WIN32_WINNT >= 0x0400)
typedef struct tagKBDLLHOOKSTRUCT {
    DWORD       vkCode;
    DWORD       scanCode;
    DWORD       flags;
    DWORD       time;
    ULONG_PTR   dwExtraInfo;
} KBDLLHOOKSTRUCT;
typedef KBDLLHOOKSTRUCT *PKBDLLHOOKSTRUCT;
typedef KBDLLHOOKSTRUCT *LPKBDLLHOOKSTRUCT;
#endif

/* Parameters to WH_MOUSE_LL */
#if (_WIN32_WINNT >= 0x0400)
typedef struct tagMSLLHOOKSTRUCT {
    POINT       pt;
    DWORD       mouseData;
    DWORD       flags;
    DWORD       time;
    ULONG_PTR   dwExtraInfo;
} MSLLHOOKSTRUCT;
typedef MSLLHOOKSTRUCT  *PMSLLHOOKSTRUCT;
typedef MSLLHOOKSTRUCT  *LPMSLLHOOKSTRUCT;
#endif

/* Parameters to WH_DEBUG */
typedef struct tagDEBUGHOOKINFO {
    DWORD   idThread;
    DWORD   idThreadInstaller;
    LPARAM  lParam;
    WPARAM  wParam;
    int     code;
} DEBUGHOOKINFO;
typedef DEBUGHOOKINFO   *PDEBUGHOOKINFO;
typedef DEBUGHOOKINFO   *NPDEBUGHOOKINFO;
typedef DEBUGHOOKINFO   *LPDEBUGHOOKINFO;

/* Parameters to WH_MOUSE */
typedef struct tagMOUSEHOOKSTRUCT {
    POINT       pt;
    HWND        hwnd;
    UINT        wHitTestCode;
    ULONG_PTR   dwExtraInfo;
} MOUSEHOOKSTRUCT;
typedef MOUSEHOOKSTRUCT *PMOUSEHOOKSTRUCT;
typedef MOUSEHOOKSTRUCT *LPMOUSEHOOKSTRUCT;

/* Parameters to WH_MOUSE (extended version) */
#if (_WIN32_WINNT >= 0x0500)
#ifdef __cplusplus
typedef struct tagMOUSEHOOKSTRUCTEX : public tagMOUSEHOOKSTRUCT {
#else
typedef struct tagMOUSEHOOKSTRUCTEX {
    MOUSEHOOKSTRUCT;
#endif
    DWORD mouseData;
} MOUSEHOOKSTRUCTEX;
typedef MOUSEHOOKSTRUCTEX   *PMOUSEHOOKSTRUCTEX;
typedef MOUSEHOOKSTRUCTEX   *LPMOUSEHOOKSTRUCTEX;
#endif

/* Parameters to WH_HARDWARE */
#if (WINVER >= 0x0400)
typedef struct tagHARDWAREHOOKSTRUCT {
    HWND    hwnd;
    UINT    message;
    WPARAM  wParam;
    LPARAM  lParam;
} HARDWAREHOOKSTRUCT;
typedef HARDWAREHOOKSTRUCT  *PHARDWAREHOOKSTRUCT;
typedef HARDWAREHOOKSTRUCT  *LPHARDWAREHOOKSTRUCT;
#endif

/* Mouse move point */
#if (WINVER >= 0x0500)
typedef struct tagMOUSEMOVEPOINT {
    int         x;
    int         y;
    DWORD       time;
    ULONG_PTR   dwExtraInfo;
} MOUSEMOVEPOINT;
typedef MOUSEMOVEPOINT  *PMOUSEMOVEPOINT;
typedef MOUSEMOVEPOINT  *LPMOUSEMOVEPOINT;
#endif

/* User object flag information */
typedef struct tagUSEROBJECTFLAGS {
    BOOL    fInherit;
    BOOL    fReserved;
    DWORD   dwFlags;
} USEROBJECTFLAGS;
typedef USEROBJECTFLAGS *PUSEROBJECTFLAGS;

/* Window class information */
typedef struct tagWNDCLASSA {
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCSTR      lpszMenuName;
    LPCSTR      lpszClassName;
} WNDCLASSA;
typedef WNDCLASSA   *PWNDCLASSA;
typedef WNDCLASSA   *NPWNDCLASSA;
typedef WNDCLASSA   *LPWNDCLASSA;
typedef struct tagWNDCLASSW {
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
} WNDCLASSW;
typedef WNDCLASSW   *PWNDCLASSW;
typedef WNDCLASSW   *NPWNDCLASSW;
typedef WNDCLASSW   *LPWNDCLASSW;
#ifdef UNICODE
typedef WNDCLASSW   WNDCLASS;
typedef PWNDCLASSW  PWNDCLASS;
typedef NPWNDCLASSW NPWNDCLASS;
typedef LPWNDCLASSW LPWNDCLASS;
#else
typedef WNDCLASSA   WNDCLASS;
typedef PWNDCLASSA  PWNDCLASS;
typedef NPWNDCLASSA NPWNDCLASS;
typedef LPWNDCLASSA LPWNDCLASS;
#endif

/* Window class information (extended version) */
#if (WINVER >= 0x0400)
typedef struct tagWNDCLASSEXA {
    UINT        cbSize;
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCSTR      lpszMenuName;
    LPCSTR      lpszClassName;
    HICON       hIconSm;
} WNDCLASSEXA;
typedef WNDCLASSEXA     *PWNDCLASSEXA;
typedef WNDCLASSEXA     *NPWNDCLASSEXA;
typedef WNDCLASSEXA     *LPWNDCLASSEXA;
typedef struct tagWNDCLASSEXW {
    UINT        cbSize;
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
    HICON       hIconSm;
} WNDCLASSEXW;
typedef WNDCLASSEXW     *PWNDCLASSEXW;
typedef WNDCLASSEXW     *NPWNDCLASSEXW;
typedef WNDCLASSEXW     *LPWNDCLASSEXW;
#ifdef UNICODE
typedef WNDCLASSEXW     WNDCLASSEX;
typedef PWNDCLASSEXW    PWNDCLASSEX;
typedef NPWNDCLASSEXW   NPWNDCLASSEX;
typedef LPWNDCLASSEXW   LPWNDCLASSEX;
#else
typedef WNDCLASSEXA     WNDCLASSEX;
typedef PWNDCLASSEXA    PWNDCLASSEX;
typedef NPWNDCLASSEXA   NPWNDCLASSEX;
typedef LPWNDCLASSEXA   LPWNDCLASSEX;
#endif
#endif

/* Message */
typedef struct tagMSG {
    HWND    hwnd;
    UINT    message;
    WPARAM  wParam;
    LPARAM  lParam;
    DWORD   time;
    POINT   pt;
} MSG;
typedef MSG *PMSG;
typedef MSG *NPMSG;
typedef MSG *LPMSG;

/* Minimum and maximum window size information */
typedef struct tagMINMAXINFO {
    POINT   ptReserved;
    POINT   ptMaxSize;
    POINT   ptMaxPosition;
    POINT   ptMinTrackSize;
    POINT   ptMaxTrackSize;
} MINMAXINFO;
typedef MINMAXINFO  *PMINMAXINFO;
typedef MINMAXINFO  *LPMINMAXINFO;

/* WM_COPYDATA parameters */
typedef struct tagCOPYDATASTRUCT {
    ULONG_PTR   dwData;
    DWORD       cbData;
    PVOID       lpData;
} COPYDATASTRUCT;
typedef COPYDATASTRUCT  *PCOPYDATASTRUCT;

/* WM_NEXTMENU parameters */
#if (WINVER >= 0x0400)
typedef struct tagMDINEXTMENU {
    HMENU   hmenuIn;
    HMENU   hmenuNext;
    HWND    hwndNext;
} MDINEXTMENU;
typedef MDINEXTMENU *PMDINEXTMENU;
typedef MDINEXTMENU *LPMDINEXTMENU;
#endif

/* Power broadcast setting */
#if (_WIN32_WINNT >= 0x0502)
typedef struct {
    GUID    PowerSetting;
    DWORD   DataLength;
    UCHAR   Data[1];
} POWERBROADCAST_SETTING;
typedef POWERBROADCAST_SETTING  *PPOWERBROADCAST_SETTING;
#endif

/* WM_WINDOWPOSCHANGING/WM_WINDOWPOSCHANGED parameters */
typedef struct tagWINDOWPOS {
    HWND    hwnd;
    HWND    hwndInsertAfter;
    int     x;
    int     y;
    int     cx;
    int     cy;
    UINT    flags;
} WINDOWPOS;
typedef WINDOWPOS   *PWINDOWPOS;
typedef WINDOWPOS   *LPWINDOWPOS;

/* WM_NCCALCSIZE parameters */
typedef struct tagNCCALCSIZE_PARAMS {
    RECT        rgrc[3];
    PWINDOWPOS  lppos;
} NCCALCSIZE_PARAMS;
typedef NCCALCSIZE_PARAMS   *LPNCCALCSIZE_PARAMS;

/* TrackMouseEvent() parameters */
#if (_WIN32_WINNT >= 0x0400)
typedef struct tagTRACKMOUSEEVENT {
    DWORD   cbSize;
    DWORD   dwFlags;
    HWND    hwndTrack;
    DWORD   dwHoverTime;
} TRACKMOUSEEVENT;
typedef TRACKMOUSEEVENT *LPTRACKMOUSEEVENT;
#endif

/* Accelerator information */
typedef struct tagACCEL {
    BYTE    fVirt;
    WORD    key;
    WORD    cmd;
} ACCEL;
typedef ACCEL   *LPACCEL;

/* Painting information */
typedef struct tagPAINTSTRUCT {
    HDC     hdc;
    BOOL    fErase;
    RECT    rcPaint;
    BOOL    fRestore;
    BOOL    fIncUpdate;
    BYTE    rgbReserved[32];
} PAINTSTRUCT;
typedef PAINTSTRUCT *PPAINTSTRUCT;
typedef PAINTSTRUCT *NPPAINTSTRUCT;
typedef PAINTSTRUCT *LPPAINTSTRUCT;

/* WM_CREATE parameters */
typedef struct tagCREATESTRUCTA {
    LPVOID      lpCreateParams;
    HINSTANCE   hInstance;
    HMENU       hMenu;
    HWND        hwndParent;
    int         cy;
    int         cx;
    int         y;
    int         x;
    LONG        style;
    LPCSTR      lpszName;
    LPCSTR      lpszClass;
    DWORD       dwExStyle;
} CREATESTRUCTA;
typedef CREATESTRUCTA   *LPCREATESTRUCTA;
typedef struct tagCREATESTRUCTW {
    LPVOID      lpCreateParams;
    HINSTANCE   hInstance;
    HMENU       hMenu;
    HWND        hwndParent;
    int         cy;
    int         cx;
    int         y;
    int         x;
    LONG        style;
    LPCWSTR     lpszName;
    LPCWSTR     lpszClass;
    DWORD       dwExStyle;
} CREATESTRUCTW;
typedef CREATESTRUCTW   *LPCREATESTRUCTW;
#ifdef UNICODE
typedef CREATESTRUCTW   CREATESTRUCT;
typedef LPCREATESTRUCTW LPCREATESTRUCT;
#else
typedef CREATESTRUCTA   CREATESTRUCT;
typedef LPCREATESTRUCTA LPCREATESTRUCT;
#endif

/* Window placement */
typedef struct tagWINDOWPLACEMENT {
    UINT    length;
    UINT    flags;
    UINT    showCmd;
    POINT   ptMinPosition;
    POINT   ptMaxPosition;
    RECT    rcNormalPosition;
} WINDOWPLACEMENT;
typedef WINDOWPLACEMENT *PWINDOWPLACEMENT;
typedef WINDOWPLACEMENT *LPWINDOWPLACEMENT;

/* Notification header */
#if (WINVER >= 0x0400)
typedef struct tagNMHDR {
    HWND        hwndFrom;
    UINT_PTR    idFrom;
    UINT        code;
} NMHDR;
typedef NMHDR   *LPNMHDR;
#endif

/* WM_STYLECHANGED/WM_STYLECHANGING parameters */
#if (WINVER >= 0x0400)
typedef struct tagSTYLESTRUCT {
    DWORD   styleOld;
    DWORD   styleNew;
} STYLESTRUCT;
typedef STYLESTRUCT *LPSTYLESTRUCT;
#endif

/* WM_MEASUREITEM parameters */
typedef struct tagMEASUREITEMSTRUCT {
    UINT        CtlType;
    UINT        CtlID;
    UINT        itemID;
    UINT        itemWidth;
    UINT        itemHeight;
    ULONG_PTR   itemData;
} MEASUREITEMSTRUCT;
typedef MEASUREITEMSTRUCT   *PMEASUREITEMSTRUCT;
typedef MEASUREITEMSTRUCT   *LPMEASUREITEMSTRUCT;

/* WM_DRAWITEM parameters */
typedef struct tagDRAWITEMSTRUCT {
    UINT        CtlType;
    UINT        CtlID;
    UINT        itemID;
    UINT        itemAction;
    UINT        itemState;
    HWND        hwndItem;
    HDC         hDC;
    RECT        rcItem;
    ULONG_PTR   itemData;
} DRAWITEMSTRUCT;
typedef DRAWITEMSTRUCT  *PDRAWITEMSTRUCT;
typedef DRAWITEMSTRUCT  *LPDRAWITEMSTRUCT;

/* WM_DELETEITEM parameters */
typedef struct tagDELETEITEMSTRUCT {
    UINT        CtlType;
    UINT        CtlID;
    UINT        itemID;
    HWND        hwndItem;
    ULONG_PTR   itemData;
} DELETEITEMSTRUCT;
typedef DELETEITEMSTRUCT    *PDELETEITEMSTRUCT;
typedef DELETEITEMSTRUCT    *LPDELETEITEMSTRUCT;

/* WM_COMPAREITEM parameters */
typedef struct tagCOMPAREITEMSTRUCT {
    UINT        CtlType;
    UINT        CtlID;
    HWND        hwndItem;
    UINT        itemID1;
    ULONG_PTR   itemData1;
    UINT        itemID2;
    ULONG_PTR   itemData2;
    DWORD       dwLocaleId;
} COMPAREITEMSTRUCT;
typedef COMPAREITEMSTRUCT   *PCOMPAREITEMSTRUCT;
typedef COMPAREITEMSTRUCT   *LPCOMPAREITEMSTRUCT;

/* BroadcastSystemMessageEx() information */
#if (_WIN32_WINNT >= 0x0501)
typedef struct {
    UINT    cbSize;
    HDESK   hdesk;
    HWND    hwnd;
    LUID    luid;
} BSMINFO;
typedef BSMINFO *PBSMINFO;
#endif

/* UpdateLayeredWindowIndirect() parameters */
#if (_WIN32_WINNT >= 0x0500)
#ifdef _WINGDI_
typedef struct tagUPDATELAYEREDWINDOWINFO {
    DWORD               cbSize;
    HDC                 hdcDst;
    const POINT         *pptDst;
    const SIZE          *psize;
    HDC                 hdcSrc;
    const POINT         *pptSrc;
    COLORREF            crKey;
    const BLENDFUNCTION *pblend;
    DWORD               dwFlags;
    const RECT          *prcDirty;
} UPDATELAYEREDWINDOWINFO;
typedef UPDATELAYEREDWINDOWINFO *PUPDATELAYEREDWINDOWINFO;
#endif
#endif

/* FlashWindowEx() parameters */
#if (WINVER >= 0x0500)
typedef struct {
    UINT    cbSize;
    HWND    hwnd;
    DWORD   dwFlags;
    UINT    uCount;
    DWORD   dwTimeout;
} FLASHWINFO;
typedef FLASHWINFO  *PFLASHWINFO;
#endif

/* Dialog structures use 2-byte packing. */
#pragma pack( __push, 2 )

/* Dialog box template */
typedef struct {
    DWORD   style;
    DWORD   dwExtendedStyle;
    WORD    cdit;
    short   x;
    short   y;
    short   cx;
    short   cy;
} DLGTEMPLATE;
typedef DLGTEMPLATE         *LPDLGTEMPLATEA;
typedef DLGTEMPLATE         *LPDLGTEMPLATEW;
typedef CONST DLGTEMPLATE   *LPCDLGTEMPLATEA;
typedef CONST DLGTEMPLATE   *LPCDLGTEMPLATEW;
#ifdef UNICODE
typedef LPDLGTEMPLATEW      LPDLGTEMPLATE;
typedef LPCDLGTEMPLATEW     LPCDLGTEMPLATE;
#else
typedef LPDLGTEMPLATEA      LPDLGTEMPLATE;
typedef LPCDLGTEMPLATEA     LPCDLGTEMPLATE;
#endif

/* Dialog item template */
typedef struct {
    DWORD   style;
    DWORD   dwExtendedStyle;
    short   x;
    short   y;
    short   cx;
    short   cy;
    WORD    id;
} DLGITEMTEMPLATE;
typedef DLGITEMTEMPLATE     *PDLGITEMTEMPLATEA;
typedef DLGITEMTEMPLATE     *PDLGITEMTEMPLATEW;
typedef DLGITEMTEMPLATE     *LPDLGITEMTEMPLATEA;
typedef DLGITEMTEMPLATE     *LPDLGITEMTEMPLATEW;
#ifdef UNICODE
typedef PDLGITEMTEMPLATEW   PDLGITEMTEMPLATE;
typedef LPDLGITEMTEMPLATEW  LPDLGITEMTEMPLATE;
#else
typedef PDLGITEMTEMPLATEA   PDLGITEMTEMPLATE;
typedef LPDLGITEMTEMPLATEA  LPDLGITEMTEMPLATE;
#endif

/* Revert to default packing. */
#pragma pack( __pop )

/* Mouse input information */
#if (_WIN32_WINNT > 0x0400)
typedef struct tagMOUSEINPUT {
    LONG        dx;
    LONG        dy;
    DWORD       mouseData;
    DWORD       dwFlags;
    DWORD       time;
    ULONG_PTR   dwExtraInfo;
} MOUSEINPUT;
typedef MOUSEINPUT  *PMOUSEINPUT;
typedef MOUSEINPUT  *LPMOUSEINPUT;
#endif

/* Keyboard input information */
#if (_WIN32_WINNT > 0x0400)
typedef struct tagKEYBDINPUT {
    WORD        wVk;
    WORD        wScan;
    DWORD       dwFlags;
    DWORD       time;
    ULONG_PTR   dwExtraInfo;
} KEYBDINPUT;
typedef KEYBDINPUT  *PKEYBDINPUT;
typedef KEYBDINPUT  *LPKEYBDINPUT;
#endif

/* Hardware input information */
#if (_WIN32_WINNT > 0x0400)
typedef struct tagHARDWAREINPUT {
    DWORD   uMsg;
    WORD    wParamL;
    WORD    wParamH;
} HARDWAREINPUT;
typedef HARDWAREINPUT   *PHARDWAREINPUT;
typedef HARDWAREINPUT   *LPHARDWAREINPUT;
#endif

/* Input information */
#if (_WIN32_WINNT > 0x0400)
typedef struct tagINPUT {
    DWORD   type;
    union {
        MOUSEINPUT      mi;
        KEYBDINPUT      ki;
        HARDWAREINPUT   hi;
    };
} INPUT;
typedef INPUT   *PINPUT;
typedef INPUT   *LPINPUT;
#endif

/* Touch input information */
#if (WINVER >= 0x0601)
typedef struct tagTOUCHINPUT {
    LONG        x;
    LONG        y;
    HANDLE      hSource;
    DWORD       dwID;
    DWORD       dwFlags;
    DWORD       dwMask;
    DWORD       dwTime;
    ULONG_PTR   dwExtraInfo;
    DWORD       cxContact;
    DWORD       cyContact;
} TOUCHINPUT;
typedef TOUCHINPUT          *PTOUCHINPUT;
typedef const TOUCHINPUT    *PCTOUCHINPUT;
#endif

/* Last input information */
#if (_WIN32_WINNT >= 0x0500)
typedef struct tagLASTINPUTINFO {
    UINT    cbSize;
    DWORD   dwTime;
} LASTINPUTINFO;
typedef LASTINPUTINFO   *PLASTINPUTINFO;
#endif

/* TrackPopupMenuEx() parameters */
#if (WINVER >= 0x0400)
typedef struct tagTPMPARAMS {
    UINT    cbSize;
    RECT    rcExclude;
} TPMPARAMS;
typedef TPMPARAMS   *LPTPMPARAMS;
#endif

/* Menu information */
#if (WINVER >= 0x0500)
typedef struct tagMENUINFO {
    DWORD       cbSize;
    DWORD       fMask;
    DWORD       dwStyle;
    UINT        cyMax;
    HBRUSH      hbrBack;
    DWORD       dwContextHelpID;
    ULONG_PTR   dwMenuData;
} MENUINFO;
typedef MENUINFO        *LPMENUINFO;
typedef CONST MENUINFO  *LPCMENUINFO;
#endif

/* WM_MENUGETOBJECT parameters */
#if (WINVER >= 0x0500)
typedef struct tagMENUGETOBJECTINFO {
    DWORD   dwFlags;
    UINT    uPos;
    HMENU   hmenu;
    PVOID   riid;
    PVOID   pvObj;
} MENUGETOBJECTINFO;
typedef MENUGETOBJECTINFO   *PMENUGETOBJECTINFO;
#endif

/* Menu item information */
#if (WINVER >= 0x0400)
typedef struct tagMENUITEMINFOA {
    UINT        cbSize;
    UINT        fMask;
    UINT        fType;
    UINT        fState;
    UINT        wID;
    HMENU       hSubMenu;
    HBITMAP     hbmpChecked;
    HBITMAP     hbmpUnchecked;
    ULONG_PTR   dwItemData;
    LPSTR       dwTypeData;
    UINT        cch;
#if (WINVER >= 0x0500)
    HBITMAP     hbmpItem;
#endif
} MENUITEMINFOA;
typedef MENUITEMINFOA       *LPMENUITEMINFOA;
typedef CONST MENUITEMINFOA *LPCMENUITEMINFOA;
typedef struct tagMENUITEMINFOW {
    UINT        cbSize;
    UINT        fMask;
    UINT        fType;
    UINT        fState;
    UINT        wID;
    HMENU       hSubMenu;
    HBITMAP     hbmpChecked;
    HBITMAP     hbmpUnchecked;
    ULONG_PTR   dwItemData;
    LPWSTR      dwTypeData;
    UINT        cch;
#if (WINVER >= 0x0500)
    HBITMAP     hbmpItem;
#endif
} MENUITEMINFOW;
typedef MENUITEMINFOW       *LPMENUITEMINFOW;
typedef MENUITEMINFOW       *LPCMENUITEMINFOW;
#ifdef UNICODE
typedef MENUITEMINFOW       MENUITEMINFO;
typedef LPMENUITEMINFOW     LPMENUITEMINFO;
typedef LPCMENUITEMINFOW    LPCMENUITEMINFO;
#else
typedef MENUITEMINFOA       MENUITEMINFO;
typedef LPMENUITEMINFOA     LPMENUITEMINFO;
typedef LPCMENUITEMINFOA    LPCMENUITEMINFO;
#endif
#endif

/* Drop information */
#if (WINVER >= 0x0400)
typedef struct tagDROPSTRUCT {
    HWND        hwndSource;
    HWND        hwndSink;
    DWORD       wFmt;
    ULONG_PTR   dwData;
    POINT       ptDrop;
    DWORD       dwControlData;
} DROPSTRUCT;
typedef DROPSTRUCT  *PDROPSTRUCT;
typedef DROPSTRUCT  *LPDROPSTRUCT;
#endif

/* DrawTextEx() parameters */
#if (WINVER >= 0x0400)
typedef struct tagDRAWTEXTPARAMS {
    UINT    cbSize;
    int     iTabLength;
    int     iLeftMargin;
    int     iRightMargin;
    UINT    uiLengthDrawn;
} DRAWTEXTPARAMS;
typedef DRAWTEXTPARAMS  *LPDRAWTEXTPARAMS;
#endif

/* Help information */
#if (WINVER >= 0x0400)
typedef struct tagHELPINFO {
    UINT        cbSize;
    int         iContextType;
    int         iCtrlId;
    int         hItemHandle;
    DWORD_PTR   dwContextId;
    POINT       MousePos;
} HELPINFO;
typedef HELPINFO    *LPHELPINFO;
#endif

/* Callback for MessageBoxIndirect() */
#if (WINVER >= 0x0400)
typedef VOID (CALLBACK *MSGBOXCALLBACK)( LPHELPINFO );
#endif

/* MessageBoxIndirect() parameters */
#if (WINVER >= 0x0400)
typedef struct tagMSGBOXPARAMSA {
    UINT            cbSize;
    HWND            hwndOwner;
    HINSTANCE       hInstance;
    LPCSTR          lpszText;
    LPCSTR          lpszCaption;
    DWORD           dwStyle;
    LPCSTR          lpszIcon;
    DWORD_PTR       dwContextHelpId;
    MSGBOXCALLBACK  lpfnMsgBoxCallback;
    DWORD           dwLanguageId;
} MSGBOXPARAMSA;
typedef MSGBOXPARAMSA   *PMSGBOXPARAMSA;
typedef MSGBOXPARAMSA   *LPMSGBOXPARAMSA;
typedef struct tagMSGBOXPARAMSW {
    UINT            cbSize;
    HWND            hwndOwner;
    HINSTANCE       hInstance;
    LPCWSTR         lpszText;
    LPCWSTR         lpszCaption;
    DWORD           dwStyle;
    LPCWSTR         lpszIcon;
    DWORD_PTR       dwContextHelpId;
    MSGBOXCALLBACK  lpfnMsgBoxCallback;
    DWORD           dwLanguageId;
} MSGBOXPARAMSW;
typedef MSGBOXPARAMSW   *PMSGBOXPARAMSW;
typedef MSGBOXPARAMSW   *LPMSGBOXPARAMSW;
#ifdef UNICODE
typedef MSGBOXPARAMSW   MSGBOXPARAMS;
typedef PMSGBOXPARAMSW  PMSGBOXPARAMS;
typedef LPMSGBOXPARAMSW LPMSGBOXPARAMS;
#else
typedef MSGBOXPARAMSA   MSGBOXPARAMS;
typedef PMSGBOXPARAMSA  PMSGBOXPARAMS;
typedef LPMSGBOXPARAMSA LPMSGBOXPARAMS;
#endif
#endif

/* Menu item template header */
typedef struct {
    WORD    versionNumber;
    WORD    offset;
} MENUITEMTEMPLATEHEADER;
typedef MENUITEMTEMPLATEHEADER  *PMENUITEMTEMPLATEHEADER;

/* Menu item template */
typedef struct {
    WORD    mtOption;
    WORD    mtID;
    WCHAR   mtString[1];
} MENUITEMTEMPLATE;
typedef MENUITEMTEMPLATE    *PMENUITEMTEMPLATE;

/* Icon information */
typedef struct _ICONINFO {
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
} ICONINFO;
typedef ICONINFO    *PICONINFO;

/* Icon information (extended version) */
#if (_WIN32_WINNT >= 0x0600)
typedef struct _ICONINFOEXA {
    DWORD   cbSize;
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
    WORD    wResID;
    CHAR    szModName[MAX_PATH];
    CHAR    szResName[MAX_PATH];
} ICONINFOEXA;
typedef ICONINFOEXA     *PICONINFOEXA;
typedef struct _ICONINFOEXW {
    DWORD   cbSize;
    BOOL    fIcon;
    DWORD   xHotspot;
    DWORD   yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
    WORD    wResID;
    WCHAR   szModName[MAX_PATH];
    WCHAR   szResName[MAX_PATH];
} ICONINFOEXW;
typedef ICONINFOEXW     *PICONINFOEXW;
#ifdef UNICODE
typedef ICONINFOEXW     ICONINFOEX;
typedef PICONINFOEXW    PICONINFOEX;
#else
typedef ICONINFOEXA     ICONINFOEX;
typedef PICONINFOEXA    PICONINFOEX;
#endif
#endif

/* Cursor shape */
typedef struct tagCURSORSHAPE {
    int     xHotspot;
    int     yHotspot;
    int     cx;
    int     cy;
    int     cbWidth;
    BYTE    Planes;
    BYTE    BitsPixel;
} CURSORSHAPE;
typedef CURSORSHAPE *LPCURSORSHAPE;

/* Scrolling information */
#if (WINVER >= 0x0400)
typedef struct tagSCROLLINFO {
    UINT    cbSize;
    UINT    fMask;
    int     nMin;
    int     nMax;
    UINT    nPage;
    int     nPos;
    int     nTrackPos;
} SCROLLINFO;
typedef SCROLLINFO          *LPSCROLLINFO;
typedef CONST SCROLLINFO    *LPCSCROLLINFO;
#endif

/* WM_MDICREATE parameters */
typedef struct tagMDICREATESTRUCTA {
    LPCSTR  szClass;
    LPCSTR  szTitle;
    HANDLE  hOwner;
    int     x;
    int     y;
    int     cx;
    int     cy;
    DWORD   style;
    LPARAM  lParam;
} MDICREATESTRUCTA;
typedef MDICREATESTRUCTA    *LPMDICREATESTRUCTA;
typedef struct tagMDICREATESTRUCTW {
    LPCWSTR szClass;
    LPCWSTR szTitle;
    HANDLE  hOwner;
    int     x;
    int     y;
    int     cx;
    int     cy;
    DWORD   style;
    LPARAM  lParam;
} MDICREATESTRUCTW;
typedef MDICREATESTRUCTW    *LPMDICREATESTRUCTW;
#ifdef UNICODE
typedef MDICREATESTRUCTW    MDICREATESTRUCT;
typedef LPMDICREATESTRUCTW  LPMDICREATESTRUCT;
#else
typedef MDICREATESTRUCTA    MDICREATESTRUCT;
typedef LPMDICREATESTRUCTA  LPMDICREATESTRUCT;
#endif

/* MDICLIENT creation parameters */
typedef struct tagCLIENTCREATESTRUCT {
    HANDLE  hWindowMenu;
    UINT    idFirstChild;
} CLIENTCREATESTRUCT;
typedef CLIENTCREATESTRUCT  *LPCLIENTCREATESTRUCT;

/* Help keyword information */
typedef struct tagMULTIKEYHELPA {
    DWORD   mkSize;
    CHAR    mkKeylist;
    CHAR    mkKeyphrase[1];
} MULTIKEYHELPA;
typedef MULTIKEYHELPA   *PMULTIKEYHELPA;
typedef MULTIKEYHELPA   *LPMULTIKEYHELPA;
typedef struct tagMULTIKEYHELPW {
    DWORD   mkSize;
    WCHAR   mkKeylist;
    WCHAR   mkKeyphrase[1];
} MULTIKEYHELPW;
typedef MULTIKEYHELPW   *PMULTIKEYHELPW;
typedef MULTIKEYHELPW   *LPMULTIKEYHELPW;
#ifdef UNICODE
typedef MULTIKEYHELPW   MULTIKEYHELP;
typedef PMULTIKEYHELPW  PMULTIKEYHELP;
typedef LPMULTIKEYHELPW LPMULTIKEYHELP;
#else
typedef MULTIKEYHELPA   MULTIKEYHELP;
typedef PMULTIKEYHELPA  PMULTIKEYHELP;
typedef LPMULTIKEYHELPA LPMULTIKEYHELP;
#endif

/* Help window information */
typedef struct tagHELPWININFOA {
    int     wStructSize;
    int     x;
    int     y;
    int     dx;
    int     dy;
    int     wMax;
    CHAR    rgchMember[2];
} HELPWININFOA;
typedef HELPWININFOA    *PHELPWININFOA;
typedef HELPWININFOA    *LPHELPWININFOA;
typedef struct tagHELPWININFOW {
    int     wStructSize;
    int     x;
    int     y;
    int     dx;
    int     dy;
    int     wMax;
    WCHAR   rgchMember[2];
} HELPWININFOW;
typedef HELPWININFOW    *PHELPWININFOW;
typedef HELPWININFOW    *LPHELPWININFOW;
#ifdef UNICODE
typedef HELPWININFOW    HELPWININFO;
typedef PHELPWININFOW   PHELPWININFO;
typedef LPHELPWININFOW  LPHELPWININFO;
#else
typedef HELPWININFOA    HELPWININFO;
typedef PHELPWININFOA   PHELPWININFO;
typedef LPHELPWININFOA  LPHELPWININFO;
#endif

/* Nonclient metrics */
#ifdef _WINGDI_
typedef struct tagNONCLIENTMETRICSA {
    UINT        cbSize;
    int         iBorderWidth;
    int         iScrollWidth;
    int         iScrollHeight;
    int         iCaptionWidth;
    int         iCaptionHeight;
    LOGFONTA    lfCaptionFont;
    int         iSmCaptionWidth;
    int         iSmCaptionHeight;
    LOGFONTA    lfSmCaptionFont;
    int         iMenuWidth;
    int         iMenuHeight;
    LOGFONTA    lfMenuFont;
    LOGFONTA    lfStatusFont;
    LOGFONTA    lfMessageFont;
#if (WINVER >= 0x0600)
    int         iPaddedBorderWidth;
#endif
} NONCLIENTMETRICSA;
typedef NONCLIENTMETRICSA   *PNONCLIENTMETRICSA;
typedef NONCLIENTMETRICSA   *LPNONCLIENTMETRICSA;
typedef struct tagNONCLIENTMETRICSW {
    UINT        cbSize;
    int         iBorderWidth;
    int         iScrollWidth;
    int         iScrollHeight;
    int         iCaptionWidth;
    int         iCaptionHeight;
    LOGFONTW    lfCaptionFont;
    int         iSmCaptionWidth;
    int         iSmCaptionHeight;
    LOGFONTW    lfSmCaptionFont;
    int         iMenuWidth;
    int         iMenuHeight;
    LOGFONTW    lfMenuFont;
    LOGFONTW    lfStatusFont;
    LOGFONTW    lfMessageFont;
#if (WINVER >= 0x0600)
    int         iPaddedBorderWidth;
#endif
} NONCLIENTMETRICSW;
typedef NONCLIENTMETRICSW   *PNONCLIENTMETRICSW;
typedef NONCLIENTMETRICSW   *LPNONCLIENTMETRICSW;
#ifdef UNICODE
typedef NONCLIENTMETRICSW   NONCLIENTMETRICS;
typedef PNONCLIENTMETRICSW  PNONCLIENTMETRICS;
typedef LPNONCLIENTMETRICSW LPNONCLIENTMETRICS;
#else
typedef NONCLIENTMETRICSA   NONCLIENTMETRICS;
typedef PNONCLIENTMETRICSA  PNONCLIENTMETRICS;
typedef LPNONCLIENTMETRICSA LPNONCLIENTMETRICS;
#endif
#endif

/* Minimized metrics */
typedef struct tagMINIMIZEDMETRICS {
    UINT    cbSize;
    int     iWidth;
    int     iHorzGap;
    int     iVertGap;
    int     iArrange;
} MINIMIZEDMETRICS;
typedef MINIMIZEDMETRICS    *PMINIMIZEDMETRICS;
typedef MINIMIZEDMETRICS    *LPMINIMIZEDMETRICS;

/* Icon metrics */
#ifdef _WINGDI_
typedef struct tagICONMETRICSA {
    UINT        cbSize;
    int         iHorzSpacing;
    int         iVertSpacing;
    int         iTitleWrap;
    LOGFONTA    lfFont;
} ICONMETRICSA;
typedef ICONMETRICSA    *PICONMETRICSA;
typedef ICONMETRICSA    *LPICONMETRICSA;
typedef struct tagICONMETRICSW {
    UINT        cbSize;
    int         iHorzSpacing;
    int         iVertSpacing;
    int         iTitleWrap;
    LOGFONTW    lfFont;
} ICONMETRICSW;
typedef ICONMETRICSW    *PICONMETRICSW;
typedef ICONMETRICSW    *LPICONMETRICSW;
#ifdef UNICODE
typedef ICONMETRICSW    ICONMETRICS;
typedef PICONMETRICSW   PICONMETRICS;
typedef LPICONMETRICSW  LPICONMETRICS;
#else
typedef ICONMETRICSA    ICONMETRICS;
typedef PICONMETRICSA   PICONMETRICS;
typedef LPICONMETRICSA  LPICONMETRICS;
#endif
#endif

/* Animation information */
typedef struct tagANIMATIONINFO {
    UINT    cbSize;
    int     iMinAnimate;
} ANIMATIONINFO;
typedef ANIMATIONINFO   *LPANIMATIONINFO;

/* SerialKeys information */
typedef struct tagSERIALKEYSA {
    UINT    cbSize;
    DWORD   dwFlags;
    LPSTR   lpszActivePort;
    LPSTR   lpszPort;
    UINT    iBaudRate;
    UINT    iPortState;
    UINT    iActive;
} SERIALKEYSA;
typedef SERIALKEYSA     *LPSERIALKEYSA;
typedef struct tagSERIALKEYSW {
    UINT    cbSize;
    DWORD   dwFlags;
    LPWSTR  lpszActivePort;
    LPWSTR  lpszPort;
    UINT    iBaudRate;
    UINT    iPortState;
    UINT    iActive;
} SERIALKEYSW;
typedef SERIALKEYSW     *LPSERIALKEYSW;
#ifdef UNICODE
typedef SERIALKEYSW     SERIALKEYS;
typedef LPSERIALKEYSW   LPSERIALKEYS;
#else
typedef SERIALKEYSA     SERIALKEYS;
typedef LPSERIALKEYSA   LPSERIALKEYS;
#endif

/* High contrast information */
typedef struct tagHIGHCONTRASTA {
    UINT    cbSize;
    DWORD   dwFlags;
    LPSTR   lpszDefaultScheme;
} HIGHCONTRASTA;
typedef HIGHCONTRASTA   *LPHIGHCONTRASTA;
typedef struct tagHIGHCONTRASTW {
    UINT    cbSize;
    DWORD   dwFlags;
    LPWSTR  lpszDefaultScheme;
} HIGHCONTRASTW;
typedef HIGHCONTRASTW   *LPHIGHCONTRASTW;
#ifdef UNICODE
typedef HIGHCONTRASTW   HIGHCONTRAST;
typedef LPHIGHCONTRASTW LPHIGHCONTRAST;
#else
typedef HIGHCONTRASTA   HIGHCONTRAST;
typedef LPHIGHCONTRASTA LPHIGHCONTRAST;
#endif

/* FilterKeys information */
typedef struct tagFILTERKEYS {
    UINT    cbSize;
    DWORD   dwFlags;
    DWORD   iWaitMSec;
    DWORD   iDelayMSec;
    DWORD   iRepeatMSec;
    DWORD   iBounceMSec;
} FILTERKEYS;
typedef FILTERKEYS  *LPFILTERKEYS;

/* StickyKeys information */
typedef struct tagSTICKYKEYS {
    UINT    cbSize;
    DWORD   dwFlags;
} STICKYKEYS;
typedef STICKYKEYS  *LPSTICKYKEYS;

/* MouseKeys information */
typedef struct tagMOUSEKEYS {
    UINT    cbSize;
    DWORD   dwFlags;
    DWORD   iMaxSpeed;
    DWORD   iTimeToMaxSpeed;
    DWORD   iCtrlSpeed;
    DWORD   dwReserved1;
    DWORD   dwReserved2;
} MOUSEKEYS;
typedef MOUSEKEYS   *LPMOUSEKEYS;

/* Access timeout information */
typedef struct tagACCESSTIMEOUT {
    UINT    cbSize;
    DWORD   dwFlags;
    DWORD   iTimeOutMSec;
} ACCESSTIMEOUT;
typedef ACCESSTIMEOUT   *LPACCESSTIMEOUT;

/* SoundSentry information */
typedef struct tagSOUNDSENTRYA {
    UINT    cbSize;
    DWORD   dwFlags;
    DWORD   iFSTextEffect;
    DWORD   iFSTextEffectMSec;
    DWORD   iFSTextEffectColorBits;
    DWORD   iFSGrafEffect;
    DWORD   iFSGrafEffectMSec;
    DWORD   iFSGrafEffectColor;
    DWORD   iWindowsEffect;
    DWORD   iWindowsEffectMSec;
    LPSTR   lpszWindowsEffectDLL;
    DWORD   iWindowsEffectOrdinal;
} SOUNDSENTRYA;
typedef SOUNDSENTRYA    *LPSOUNDSENTRYA;
typedef struct tagSOUNDSENTRYW {
    UINT    cbSize;
    DWORD   dwFlags;
    DWORD   iFSTextEffect;
    DWORD   iFSTextEffectMSec;
    DWORD   iFSTextEffectColorBits;
    DWORD   iFSGrafEffect;
    DWORD   iFSGrafEffectMSec;
    DWORD   iFSGrafEffectColor;
    DWORD   iWindowsEffect;
    DWORD   iWindowsEffectMSec;
    LPWSTR  lpszWindowsEffectDLL;
    DWORD   iWindowsEffectOrdinal;
} SOUNDSENTRYW;
typedef SOUNDSENTRYW    *LPSOUNDSENTRYW;
#ifdef UNICODE
typedef SOUNDSENTRYW    SOUNDSENTRY;
typedef LPSOUNDSENTRYW  LPSOUNDSENTRY;
#else
typedef SOUNDSENTRYA    SOUNDSENTRY;
typedef LPSOUNDSENTRYA  LPSOUNDSENTRY;
#endif

/* ToggleKeys information */
typedef struct tagTOGGLEKEYS {
    UINT    cbSize;
    DWORD   dwFlags;
} TOGGLEKEYS;
typedef TOGGLEKEYS  *LPTOGGLEKEYS;

/* Audio description */
#if (_WIN32_WINNT >= 0x0600)
typedef struct tagAUDIODESCRIPTION {
    UINT    cbSize;
    BOOL    Enabled;
    LCID    Locale;
} AUDIODESCRIPTION;
typedef AUDIODESCRIPTION    *LPAUDIODESCRIPTION;
#endif

/* Monitor information */
#if (WINVER >= 0x0500)
typedef struct tagMONITORINFO {
    DWORD   cbSize;
    RECT    rcMonitor;
    RECT    rcWork;
    DWORD   dwFlags;
} MONITORINFO;
typedef MONITORINFO *LPMONITORINFO;
#endif

/* Monitor information (extended version) */
#if (WINVER >= 0x0500)
#ifdef __cplusplus
typedef struct tagMONITORINFOEXA : public tagMONITORINFO {
#else
typedef struct tagMONITORINFOEXA {
    MONITORINFO;
#endif
    CHAR            szDevice[CCHDEVICENAME];
} MONITORINFOEXA;
typedef MONITORINFOEXA      *LPMONITORINFOEXA;
#ifdef __cplusplus
typedef struct tagMONITORINFOEXW : public tagMONITORINFO {
#else
typedef struct tagMONITORINFOEXW {
    MONITORINFO;
#endif
    WCHAR           szDevice[CCHDEVICENAME];
} MONITORINFOEXW;
typedef MONITORINFOEXW      *LPMONITORINFOEXW;
#ifdef UNICODE
typedef MONITORINFOEXW      MONITORINFOEX;
typedef LPMONITORINFOEXW    LPMONITORINFOEX;
#else
typedef MONITORINFOEXA      MONITORINFOEX;
typedef LPMONITORINFOEXA    LPMONITORINFOEX;
#endif
#endif

/* Monitor enumeration callback */
#if (WINVER >= 0x0500)
typedef BOOL (CALLBACK *MONITORENUMPROC)( HMONITOR, HDC, LPRECT, LPARAM );
#endif

/* WinEvent hook callback */
#if (WINVER >= 0x0500)
typedef VOID (CALLBACK *WINEVENTPROC)( HWINEVENTHOOK, DWORD, HWND, LONG, LONG, DWORD, DWORD );
#endif

/* GUI thread information */
#if (WINVER >= 0x0500)
typedef struct tagGUITHREADINFO {
    DWORD   cbSize;
    DWORD   flags;
    HWND    hwndActive;
    HWND    hwndFocus;
    HWND    hwndCapture;
    HWND    hwndMenuOwner;
    HWND    hwndMoveSize;
    HWND    hwndCaret;
    RECT    rcCaret;
} GUITHREADINFO;
typedef GUITHREADINFO   *PGUITHREADINFO;
typedef GUITHREADINFO   *LPGUITHREADINFO;
#endif

/* Cursor information */
#if (WINVER >= 0x0500)
typedef struct tagCURSORINFO {
    DWORD   cbSize;
    DWORD   flags;
    HCURSOR hCursor;
    POINT   ptScreenPos;
} CURSORINFO;
typedef CURSORINFO  *PCURSORINFO;
typedef CURSORINFO  *LPCURSORINFO;
#endif

/* Window information */
#if (WINVER >= 0x0500)
typedef struct tagWINDOWINFO {
    DWORD   cbSize;
    RECT    rcWindow;
    RECT    rcClient;
    DWORD   dwStyle;
    DWORD   dwExStyle;
    DWORD   dwWindowStatus;
    UINT    cxWindowBorders;
    UINT    cyWindowBorders;
    ATOM    atomWindowType;
    WORD    wCreatorVersion;
} WINDOWINFO;
typedef WINDOWINFO  *PWINDOWINFO;
typedef WINDOWINFO  *LPWINDOWINFO;
#endif

/* Title bar information */
#if (WINVER >= 0x0500)
typedef struct tagTITLEBARINFO {
    DWORD   cbSize;
    RECT    rcTitleBar;
    DWORD   rgstate[CCHILDREN_TITLEBAR + 1];
} TITLEBARINFO;
typedef TITLEBARINFO    *PTITLEBARINFO;
typedef TITLEBARINFO    *LPTITLEBARINFO;
#endif

/* Title bar information (extended version) */
#if (WINVER >= 0x0600)
typedef struct tagTITLEBARINFOEX {
    DWORD   cbSize;
    RECT    rcTitleBar;
    DWORD   rgstate[CCHILDREN_TITLEBAR + 1];
    RECT    rgrect[CCHILDREN_TITLEBAR + 1];
} TITLEBARINFOEX;
typedef TITLEBARINFOEX  *PTITLEBARINFOEX;
typedef TITLEBARINFOEX  *LPTITLEBARINFOEX;
#endif

/* Menu bar information */
#if (WINVER >= 0x0500)
typedef struct tagMENUBARINFO {
    DWORD   cbSize;
    RECT    rcBar;
    HMENU   hMenu;
    HWND    hwndMenu;
    BOOL    fBarFocused : 1;
    BOOL    fFocused    : 1;
} MENUBARINFO;
typedef MENUBARINFO *PMENUBARINFO;
typedef MENUBARINFO *LPMENUBARINFO;
#endif

/* Scroll bar information */
#if (WINVER >= 0x0500)
typedef struct tagSCROLLBARINFO {
    DWORD   cbSize;
    RECT    rcScrollBar;
    int     dxyLineButton;
    int     xyThumbTop;
    int     xyThumbBottom;
    int     reserved;
    DWORD   rgstate[CCHILDREN_SCROLLBAR + 1];
} SCROLLBARINFO;
typedef SCROLLBARINFO   *PSCROLLBARINFO;
typedef SCROLLBARINFO   *LPSCROLLBARINFO;
#endif

/* Combo box information */
#if (WINVER >= 0x0500)
typedef struct tagCOMBOBOXINFO {
    DWORD   cbSize;
    RECT    rcItem;
    RECT    rcButton;
    DWORD   stateButton;
    HWND    hwndCombo;
    HWND    hwndItem;
    HWND    hwndList;
} COMBOBOXINFO;
typedef COMBOBOXINFO    *PCOMBOBOXINFO;
typedef COMBOBOXINFO    *LPCOMBOBOXINFO;
#endif

/* ALT+TAB information */
#if (WINVER >= 0x0500)
typedef struct tagALTTABINFO {
    DWORD   cbSize;
    int     cItems;
    int     cColumns;
    int     cRows;
    int     iColFocus;
    int     iRowFocus;
    int     cxItem;
    int     cyItem;
    POINT   ptStart;
} ALTTABINFO;
typedef ALTTABINFO  *PALTTABINFO;
typedef ALTTABINFO  *LPALTTABINFO;
#endif

/* Raw input header */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWINPUTHEADER {
    DWORD   dwType;
    DWORD   dwSize;
    HANDLE  hDevice;
    WPARAM  wParam;
} RAWINPUTHEADER;
typedef RAWINPUTHEADER  *PRAWINPUTHEADER;
typedef RAWINPUTHEADER  *LPRAWINPUTHEADER;
#endif

/* Raw mouse input */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWMOUSE {
    USHORT  usFlags;
    union {
        ULONG   ulButtons;
        struct {
            USHORT  usButtonFlags;
            USHORT  usButtonData;
        };
    };
    ULONG   ulRawButtons;
    LONG    lLastX;
    LONG    lLastY;
    ULONG   ulExtraInformation;
} RAWMOUSE;
typedef RAWMOUSE    *PRAWMOUSE;
typedef RAWMOUSE    *LPRAWMOUSE;
#endif

/* Raw keyboard input */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWKEYBOARD {
    USHORT  MakeCode;
    USHORT  Flags;
    USHORT  Reserved;
    USHORT  VKey;
    UINT    Message;
    ULONG   ExtraInformation;
} RAWKEYBOARD;
typedef RAWKEYBOARD *PRAWKEYBOARD;
typedef RAWKEYBOARD *LPRAWKEYBOARD;
#endif

/* Raw Human Interface Device (HID) input */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWHID {
    DWORD   dwSizeHid;
    DWORD   dwCount;
    BYTE    bRawData[1];
} RAWHID;
typedef RAWHID  *PRAWHID;
typedef RAWHID  *LPRAWHID;
#endif

/* Raw input */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWINPUT {
    RAWINPUTHEADER  header;
    union {
        RAWMOUSE    mouse;
        RAWKEYBOARD keyboard;
        RAWHID      hid;
    } data;
} RAWINPUT;
typedef RAWINPUT    *PRAWINPUT;
typedef RAWINPUT    *LPRAWINPUT;
#endif

/* Raw input device information for a mouse */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRID_DEVICE_INFO_MOUSE {
    DWORD   dwId;
    DWORD   dwNumberOfButtons;
    DWORD   dwSampleRate;
    BOOL    fHasHorizontalWheel;
} RID_DEVICE_INFO_MOUSE;
typedef RID_DEVICE_INFO_MOUSE   *PRID_DEVICE_INFO_MOUSE;
#endif

/* Raw input device information for a keyboard */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRID_DEVICE_INFO_KEYBOARD {
    DWORD   dwType;
    DWORD   dwSubType;
    DWORD   dwKeyboardMode;
    DWORD   dwNumberOfFunctionKeys;
    DWORD   dwNumberOfIndicators;
    DWORD   dwNumberOfKeysTotal;
} RID_DEVICE_INFO_KEYBOARD;
typedef RID_DEVICE_INFO_KEYBOARD    *PRID_DEVICE_INFO_KEYBOARD;
#endif

/* Raw input device information for a Human Interface Device */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRID_DEVICE_INFO_HID {
    DWORD   dwVendorId;
    DWORD   dwProductId;
    DWORD   dwVersionNumber;
    USHORT  usUsagePage;
    USHORT  usUsage;
} RID_DEVICE_INFO_HID;
typedef RID_DEVICE_INFO_HID *PRID_DEVICE_INFO_HID;
#endif

/* Raw input device information */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRID_DEVICE_INFO {
    DWORD   cbSize;
    DWORD   dwType;
    union {
        RID_DEVICE_INFO_MOUSE       mouse;
        RID_DEVICE_INFO_KEYBOARD    keyboard;
        RID_DEVICE_INFO_HID         hid;
    };
} RID_DEVICE_INFO;
typedef RID_DEVICE_INFO *PRID_DEVICE_INFO;
typedef RID_DEVICE_INFO *LPRID_DEVICE_INFO;
#endif

/* Raw input device */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWINPUTDEVICE {
    USHORT  usUsagePage;
    USHORT  usUsage;
    DWORD   dwFlags;
    HWND    hwndTarget;
} RAWINPUTDEVICE;
typedef RAWINPUTDEVICE          *PRAWINPUTDEVICE;
typedef RAWINPUTDEVICE          *LPRAWINPUTDEVICE;
typedef CONST RAWINPUTDEVICE    *PCRAWINPUTDEVICE;
#endif

/* Raw input device list */
#if (_WIN32_WINNT >= 0x0501)
typedef struct tagRAWINPUTDEVICELIST {
    HANDLE  hDevice;
    DWORD   dwType;
} RAWINPUTDEVICELIST;
typedef RAWINPUTDEVICELIST  *PRAWINPUTDEVICELIST;
#endif

/* ChangeWindowMessageFilterEx() parameters */
#if (WINVER >= 0x0601)
typedef struct tagCHANGEFILTERSTRUCT {
    DWORD   cbSize;
    DWORD   ExtStatus;
} CHANGEFILTERSTRUCT;
typedef CHANGEFILTERSTRUCT  *PCHANGEFILTERSTRUCT;
#endif

/* Gesture information */
#if (WINVER >= 0x0601)
typedef struct tagGESTUREINFO {
    UINT        cbSize;
    DWORD       dwFlags;
    DWORD       dwID;
    HWND        hwndTarget;
    POINTS      ptsLocation;
    DWORD       dwInstanceID;
    DWORD       dwSequenceID;
    ULONGLONG   ullArguments;
    UINT        cbExtraArgs;
} GESTUREINFO;
typedef GESTUREINFO         *PGESTUREINFO;
typedef const GESTUREINFO   *PCGESTUREINFO;
#endif

/* WM_GESTURENOTIFY parameters */
#if (WINVER >= 0x0601)
typedef struct tagGESTURENOTIFYSTRUCT {
    UINT    cbSize;
    DWORD   dwFlags;
    HWND    hwndTarget;
    POINTS  ptsLocation;
    DWORD   dwInstanceID;
} GESTURENOTIFYSTRUCT;
typedef GESTURENOTIFYSTRUCT *PGESTURENOTIFYSTRUCT;
#endif

/* Gesture configuration */
#if (WINVER >= 0x0601)
typedef struct tagGESTURECONFIG {
    DWORD   dwID;
    DWORD   dwWant;
    DWORD   dwBlock;
} GESTURECONFIG;
typedef GESTURECONFIG   *PGESTURECONFIG;
#endif

/* Functions in USER32.DLL */
WINUSERAPI BOOL WINAPI          AdjustWindowRect( LPRECT, DWORD, BOOL );
WINUSERAPI BOOL WINAPI          AdjustWindowRectEx( LPRECT, DWORD, BOOL, DWORD );
WINUSERAPI BOOL WINAPI          AnyPopup( VOID );
WINUSERAPI BOOL WINAPI          AppendMenuA( HMENU, UINT, UINT_PTR, LPCSTR );
WINUSERAPI BOOL WINAPI          AppendMenuW( HMENU, UINT, UINT_PTR, LPCWSTR );
WINUSERAPI UINT WINAPI          ArrangeIconicWindows( HWND );
WINUSERAPI BOOL WINAPI          AttachThreadInput( DWORD, DWORD, BOOL );
WINUSERAPI HDWP WINAPI          BeginDeferWindowPos( int );
WINUSERAPI HDC WINAPI           BeginPaint( HWND, LPPAINTSTRUCT );
WINUSERAPI BOOL WINAPI          BlockInput( BOOL );
WINUSERAPI BOOL WINAPI          BringWindowToTop( HWND );
WINUSERAPI BOOL WINAPI          CallMsgFilterA( LPMSG, int );
WINUSERAPI BOOL WINAPI          CallMsgFilterW( LPMSG, int );
WINUSERAPI LRESULT WINAPI       CallNextHookEx( HHOOK, int, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       CallWindowProcA( WNDPROC, HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       CallWindowProcW( WNDPROC, HWND, UINT, WPARAM, LPARAM );
WINUSERAPI BOOL WINAPI          CancelShutdown( VOID );
WINUSERAPI BOOL WINAPI          ChangeClipboardChain( HWND, HWND );
WINUSERAPI BOOL WINAPI          ChangeMenuA( HMENU, UINT, LPCSTR, UINT, UINT );
WINUSERAPI BOOL WINAPI          ChangeMenuW( HMENU, UINT, LPCWSTR, UINT, UINT );
WINUSERAPI LPSTR WINAPI         CharLowerA( LPSTR );
WINUSERAPI DWORD WINAPI         CharLowerBuffA( LPSTR, DWORD );
WINUSERAPI DWORD WINAPI         CharLowerBuffW( LPWSTR, DWORD );
WINUSERAPI LPWSTR WINAPI        CharLowerW( LPWSTR );
WINUSERAPI LPSTR WINAPI         CharNextA( LPCSTR );
WINUSERAPI LPWSTR WINAPI        CharNextW( LPCWSTR );
WINUSERAPI LPSTR WINAPI         CharPrevA( LPCSTR, LPCSTR );
WINUSERAPI LPWSTR WINAPI        CharPrevW( LPCWSTR, LPCWSTR );
WINUSERAPI BOOL WINAPI          CharToOemA( LPCSTR, LPSTR );
WINUSERAPI BOOL WINAPI          CharToOemBuffA( LPCSTR, LPSTR, DWORD );
WINUSERAPI BOOL WINAPI          CharToOemBuffW( LPCWSTR, LPSTR, DWORD );
WINUSERAPI BOOL WINAPI          CharToOemW( LPCWSTR, LPSTR );
WINUSERAPI LPSTR WINAPI         CharUpperA( LPSTR );
WINUSERAPI DWORD WINAPI         CharUpperBuffA( LPSTR, DWORD );
WINUSERAPI DWORD WINAPI         CharUpperBuffW( LPWSTR, DWORD );
WINUSERAPI LPWSTR WINAPI        CharUpperW( LPWSTR );
WINUSERAPI BOOL WINAPI          CheckDlgButton( HWND, int, UINT );
WINUSERAPI DWORD WINAPI         CheckMenuItem( HMENU, UINT, UINT );
WINUSERAPI BOOL WINAPI          CheckRadioButton( HWND, int, int, int );
WINUSERAPI HWND WINAPI          ChildWindowFromPoint( HWND, POINT );
WINUSERAPI BOOL WINAPI          ClientToScreen( HWND, LPPOINT );
WINUSERAPI BOOL WINAPI          ClipCursor( CONST RECT * );
WINUSERAPI BOOL WINAPI          CloseClipboard( VOID );
WINUSERAPI BOOL WINAPI          CloseDesktop( HDESK );
WINUSERAPI BOOL WINAPI          CloseWindow( HWND );
WINUSERAPI BOOL WINAPI          CloseWindowStation( HWINSTA );
WINUSERAPI int WINAPI           CopyAcceleratorTableA( HACCEL, LPACCEL, int );
WINUSERAPI int WINAPI           CopyAcceleratorTableW( HACCEL, LPACCEL, int );
WINUSERAPI HICON WINAPI         CopyIcon( HICON );
WINUSERAPI BOOL WINAPI          CopyRect( LPRECT, CONST RECT * );
WINUSERAPI int WINAPI           CountClipboardFormats( VOID );
WINUSERAPI HACCEL WINAPI        CreateAcceleratorTableA( LPACCEL, int );
WINUSERAPI HACCEL WINAPI        CreateAcceleratorTableW( LPACCEL, int );
WINUSERAPI BOOL WINAPI          CreateCaret( HWND, HBITMAP, int, int );
WINUSERAPI HCURSOR WINAPI       CreateCursor( HINSTANCE, int, int, int, int, CONST VOID *, CONST VOID * );
WINUSERAPI HWND WINAPI          CreateDialogIndirectParamA( HINSTANCE, LPCDLGTEMPLATEA, HWND, DLGPROC, LPARAM );
WINUSERAPI HWND WINAPI          CreateDialogIndirectParamW( HINSTANCE, LPCDLGTEMPLATEW, HWND, DLGPROC, LPARAM );
WINUSERAPI HWND WINAPI          CreateDialogParamA( HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM );
WINUSERAPI HWND WINAPI          CreateDialogParamW( HINSTANCE, LPCWSTR, HWND, DLGPROC, LPARAM );
WINUSERAPI HICON WINAPI         CreateIcon( HINSTANCE, int, int, BYTE, BYTE, CONST BYTE *, CONST BYTE * );
WINUSERAPI HICON WINAPI         CreateIconFromResource( PBYTE, DWORD, BOOL, DWORD );
WINUSERAPI HICON WINAPI         CreateIconIndirect( PICONINFO );
WINUSERAPI HWND WINAPI          CreateMDIWindowA( LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HINSTANCE, LPARAM );
WINUSERAPI HWND WINAPI          CreateMDIWindowW( LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HINSTANCE, LPARAM );
WINUSERAPI HMENU WINAPI         CreateMenu( VOID );
WINUSERAPI HMENU WINAPI         CreatePopupMenu( VOID );
WINUSERAPI HWND WINAPI          CreateWindowExA( DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID );
WINUSERAPI HWND WINAPI          CreateWindowExW( DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID );
WINUSERAPI HWINSTA WINAPI       CreateWindowStationA( LPCSTR, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES );
WINUSERAPI HWINSTA WINAPI       CreateWindowStationW( LPCWSTR, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES );
WINUSERAPI LRESULT WINAPI       DefDlgProcA( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefDlgProcW( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefFrameProcA( HWND, HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefFrameProcW( HWND, HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefMDIChildProcA( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefMDIChildProcW( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefWindowProcA( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       DefWindowProcW( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI HDWP WINAPI          DeferWindowPos( HDWP, HWND, HWND, int, int, int, int, UINT );
WINUSERAPI BOOL WINAPI          DeleteMenu( HMENU, UINT, UINT );
WINUSERAPI BOOL WINAPI          DeregisterShellHookWindow( HWND );
WINUSERAPI BOOL WINAPI          DestroyAcceleratorTable( HACCEL );
WINUSERAPI BOOL WINAPI          DestroyCaret( VOID );
WINUSERAPI BOOL WINAPI          DestroyCursor( HCURSOR );
WINUSERAPI BOOL WINAPI          DestroyIcon( HICON );
WINUSERAPI BOOL WINAPI          DestroyMenu( HMENU );
WINUSERAPI BOOL WINAPI          DestroyWindow( HWND );
WINUSERAPI INT_PTR WINAPI       DialogBoxIndirectParamA( HINSTANCE, LPCDLGTEMPLATEA, HWND, DLGPROC, LPARAM );
WINUSERAPI INT_PTR WINAPI       DialogBoxIndirectParamW( HINSTANCE, LPCDLGTEMPLATEW, HWND, DLGPROC, LPARAM );
WINUSERAPI INT_PTR WINAPI       DialogBoxParamA( HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM );
WINUSERAPI INT_PTR WINAPI       DialogBoxParamW( HINSTANCE, LPCWSTR, HWND, DLGPROC, LPARAM );
WINUSERAPI LRESULT WINAPI       DispatchMessageA( CONST MSG * );
WINUSERAPI LRESULT WINAPI       DispatchMessageW( CONST MSG * );
WINUSERAPI int WINAPI           DlgDirListA( HWND, LPSTR, int, int, UINT );
WINUSERAPI int WINAPI           DlgDirListComboBoxA( HWND, LPSTR, int, int, UINT );
WINUSERAPI int WINAPI           DlgDirListComboBoxW( HWND, LPWSTR, int, int, UINT );
WINUSERAPI int WINAPI           DlgDirListW( HWND, LPWSTR, int, int, UINT );
WINUSERAPI BOOL WINAPI          DlgDirSelectComboBoxExA( HWND, LPSTR, int, int );
WINUSERAPI BOOL WINAPI          DlgDirSelectComboBoxExW( HWND, LPWSTR, int, int );
WINUSERAPI BOOL WINAPI          DlgDirSelectExA( HWND, LPSTR, int, int );
WINUSERAPI BOOL WINAPI          DlgDirSelectExW( HWND, LPWSTR, int, int );
WINUSERAPI BOOL WINAPI          DrawFocusRect( HDC, CONST RECT * );
WINUSERAPI BOOL WINAPI          DrawIcon( HDC, int, int, HICON );
WINUSERAPI BOOL WINAPI          DrawMenuBar( HWND );
WINUSERAPI int WINAPI           DrawTextA( HDC, LPCSTR, int, LPRECT, UINT );
WINUSERAPI int WINAPI           DrawTextW( HDC, LPCWSTR, int, LPRECT, UINT );
WINUSERAPI BOOL WINAPI          EmptyClipboard( VOID );
WINUSERAPI BOOL WINAPI          EnableMenuItem( HMENU, UINT, UINT );
WINUSERAPI BOOL WINAPI          EnableScrollBar( HWND, UINT, UINT );
WINUSERAPI BOOL WINAPI          EnableWindow( HWND, BOOL );
WINUSERAPI BOOL WINAPI          EndDeferWindowPos( HDWP );
WINUSERAPI BOOL WINAPI          EndDialog( HWND, INT_PTR );
WINUSERAPI BOOL WINAPI          EndPaint( HWND, CONST PAINTSTRUCT * );
WINUSERAPI BOOL WINAPI          EndTask( HWND, BOOL, BOOL );
WINUSERAPI BOOL WINAPI          EnumChildWindows( HWND, WNDENUMPROC, LPARAM );
WINUSERAPI UINT WINAPI          EnumClipboardFormats( UINT );
WINUSERAPI BOOL WINAPI          EnumDesktopWindows( HDESK, WNDENUMPROC, LPARAM );
WINUSERAPI BOOL WINAPI          EnumDesktopsA( HWINSTA, DESKTOPENUMPROCA, LPARAM );
WINUSERAPI BOOL WINAPI          EnumDesktopsW( HWINSTA, DESKTOPENUMPROCW, LPARAM );
WINUSERAPI int WINAPI           EnumPropsA( HWND, PROPENUMPROCA );
WINUSERAPI int WINAPI           EnumPropsExA( HWND, PROPENUMPROCEXA, LPARAM );
WINUSERAPI int WINAPI           EnumPropsExW( HWND, PROPENUMPROCEXW, LPARAM );
WINUSERAPI int WINAPI           EnumPropsW( HWND, PROPENUMPROCW );
WINUSERAPI BOOL WINAPI          EnumThreadWindows( DWORD, WNDENUMPROC, LPARAM );
WINUSERAPI BOOL WINAPI          EnumWindowStationsA( WINSTAENUMPROCA, LPARAM );
WINUSERAPI BOOL WINAPI          EnumWindowStationsW( WINSTAENUMPROCW, LPARAM );
WINUSERAPI BOOL WINAPI          EnumWindows( WNDENUMPROC, LPARAM );
WINUSERAPI BOOL WINAPI          EqualRect( CONST RECT *, CONST RECT * );
WINUSERAPI int WINAPI           ExcludeUpdateRgn( HDC, HWND );
WINUSERAPI BOOL WINAPI          ExitWindowsEx( UINT, DWORD );
WINUSERAPI int WINAPI           FillRect( HDC, CONST RECT *, HBRUSH );
WINUSERAPI HWND WINAPI          FindWindowA( LPCSTR, LPCSTR );
WINUSERAPI HWND WINAPI          FindWindowW( LPCWSTR, LPCWSTR );
WINUSERAPI BOOL WINAPI          FlashWindow( HWND, BOOL );
WINUSERAPI int WINAPI           FrameRect( HDC, CONST RECT *, HBRUSH );
WINUSERAPI HWND WINAPI          GetActiveWindow( VOID );
WINUSERAPI SHORT WINAPI         GetAsyncKeyState( int );
WINUSERAPI HWND WINAPI          GetCapture( VOID );
WINUSERAPI UINT WINAPI          GetCaretBlinkTime( VOID );
WINUSERAPI BOOL WINAPI          GetCaretPos( LPPOINT );
WINUSERAPI BOOL WINAPI          GetClassInfoA( HINSTANCE, LPCSTR, LPWNDCLASSA );
WINUSERAPI BOOL WINAPI          GetClassInfoW( HINSTANCE, LPCWSTR, LPWNDCLASSW );
WINUSERAPI DWORD WINAPI         GetClassLongA( HWND, int );
WINUSERAPI DWORD WINAPI         GetClassLongW( HWND, int );
WINUSERAPI int WINAPI           GetClassNameA( HWND, LPSTR, int );
WINUSERAPI int WINAPI           GetClassNameW( HWND, LPWSTR, int );
WINUSERAPI WORD WINAPI          GetClassWord( HWND, int );
WINUSERAPI BOOL WINAPI          GetClientRect( HWND, LPRECT );
WINUSERAPI BOOL WINAPI          GetClipCursor( LPRECT );
WINUSERAPI HANDLE WINAPI        GetClipboardData( UINT );
WINUSERAPI int WINAPI           GetClipboardFormatNameA( UINT, LPSTR, int );
WINUSERAPI int WINAPI           GetClipboardFormatNameW( UINT, LPWSTR, int );
WINUSERAPI HWND WINAPI          GetClipboardOwner( VOID );
WINUSERAPI HWND WINAPI          GetClipboardViewer( VOID );
WINUSERAPI HCURSOR WINAPI       GetCursor( VOID );
WINUSERAPI BOOL WINAPI          GetCursorPos( LPPOINT );
WINUSERAPI HDC WINAPI           GetDC( HWND );
WINUSERAPI HDC WINAPI           GetDCEx( HWND, HRGN, DWORD );
WINUSERAPI HWND WINAPI          GetDesktopWindow( VOID );
WINUSERAPI long WINAPI          GetDialogBaseUnits( VOID );
WINUSERAPI int WINAPI           GetDlgCtrlID( HWND );
WINUSERAPI HWND WINAPI          GetDlgItem( HWND, int );
WINUSERAPI UINT WINAPI          GetDlgItemInt( HWND, int, BOOL *, BOOL );
WINUSERAPI UINT WINAPI          GetDlgItemTextA( HWND, int, LPSTR, int );
WINUSERAPI UINT WINAPI          GetDlgItemTextW( HWND, int, LPWSTR, int );
WINUSERAPI UINT WINAPI          GetDoubleClickTime( VOID );
WINUSERAPI HWND WINAPI          GetFocus( VOID );
WINUSERAPI HWND WINAPI          GetForegroundWindow( VOID );
WINUSERAPI BOOL WINAPI          GetIconInfo( HICON, PICONINFO );
WINUSERAPI BOOL WINAPI          GetInputState( VOID );
WINUSERAPI UINT WINAPI          GetKBCodePage( VOID );
WINUSERAPI int WINAPI           GetKeyNameTextA( LONG, LPSTR, int );
WINUSERAPI int WINAPI           GetKeyNameTextW( LONG, LPWSTR, int );
WINUSERAPI SHORT WINAPI         GetKeyState( int );
WINUSERAPI BOOL WINAPI          GetKeyboardLayoutNameA( LPSTR );
WINUSERAPI BOOL WINAPI          GetKeyboardLayoutNameW( LPWSTR );
WINUSERAPI BOOL WINAPI          GetKeyboardState( PBYTE );
WINUSERAPI int WINAPI           GetKeyboardType( int );
WINUSERAPI HWND WINAPI          GetLastActivePopup( HWND );
WINUSERAPI HMENU WINAPI         GetMenu( HWND );
WINUSERAPI LONG WINAPI          GetMenuCheckMarkDimensions( VOID );
WINUSERAPI int WINAPI           GetMenuItemCount( HMENU );
WINUSERAPI UINT WINAPI          GetMenuItemID( HMENU, int );
WINUSERAPI UINT WINAPI          GetMenuState( HMENU, UINT, UINT );
WINUSERAPI int WINAPI           GetMenuStringA( HMENU, UINT, LPSTR, int, UINT );
WINUSERAPI int WINAPI           GetMenuStringW( HMENU, UINT, LPWSTR, int, UINT );
WINUSERAPI BOOL WINAPI          GetMessageA( LPMSG, HWND, UINT, UINT );
WINUSERAPI LPARAM WINAPI        GetMessageExtraInfo( VOID );
WINUSERAPI DWORD WINAPI         GetMessagePos( VOID );
WINUSERAPI LONG WINAPI          GetMessageTime( VOID );
WINUSERAPI BOOL WINAPI          GetMessageW( LPMSG, HWND, UINT, UINT );
WINUSERAPI HWND WINAPI          GetNextDlgGroupItem( HWND, HWND, BOOL );
WINUSERAPI HWND WINAPI          GetNextDlgTabItem( HWND, HWND, BOOL );
WINUSERAPI HWND WINAPI          GetOpenClipboardWindow( VOID );
WINUSERAPI HWND WINAPI          GetParent( HWND );
WINUSERAPI int WINAPI           GetPriorityClipboardFormat( UINT *, int );
WINUSERAPI HWINSTA WINAPI       GetProcessWindowStation( VOID );
WINUSERAPI HANDLE WINAPI        GetPropA( HWND, LPCSTR );
WINUSERAPI HANDLE WINAPI        GetPropW( HWND, LPCWSTR );
WINUSERAPI DWORD WINAPI         GetQueueStatus( UINT );
WINUSERAPI int WINAPI           GetScrollPos( HWND, int );
WINUSERAPI BOOL WINAPI          GetScrollRange( HWND, int, LPINT, LPINT );
WINUSERAPI HMENU WINAPI         GetSubMenu( HMENU, int );
WINUSERAPI DWORD WINAPI         GetSysColor( int );
WINUSERAPI HMENU WINAPI         GetSystemMenu( HWND, BOOL );
WINUSERAPI int WINAPI           GetSystemMetrics( int );
WINUSERAPI DWORD WINAPI         GetTabbedTextExtentA( HDC, LPCSTR, int, int, CONST INT * );
WINUSERAPI DWORD WINAPI         GetTabbedTextExtentW( HDC, LPCWSTR, int, int, CONST INT * );
WINUSERAPI HDESK WINAPI         GetThreadDesktop( DWORD );
WINUSERAPI HWND WINAPI          GetTopWindow( HWND );
WINUSERAPI BOOL WINAPI          GetUpdateRect( HWND, LPRECT, BOOL );
WINUSERAPI int WINAPI           GetUpdateRgn( HWND, HRGN, BOOL );
WINUSERAPI BOOL WINAPI          GetUserObjectInformationA( HANDLE, int, PVOID, DWORD, LPDWORD );
WINUSERAPI BOOL WINAPI          GetUserObjectInformationW( HANDLE, int, PVOID, DWORD, LPDWORD );
WINUSERAPI BOOL WINAPI          GetUserObjectSecurity( HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD );
WINUSERAPI HWND WINAPI          GetWindow( HWND, UINT );
WINUSERAPI HDC WINAPI           GetWindowDC( HWND );
WINUSERAPI LONG WINAPI          GetWindowLongA( HWND, int );
WINUSERAPI LONG WINAPI          GetWindowLongW( HWND, int );
WINUSERAPI BOOL WINAPI          GetWindowPlacement( HWND, WINDOWPLACEMENT * );
WINUSERAPI BOOL WINAPI          GetWindowRect( HWND, LPRECT );
WINUSERAPI int WINAPI           GetWindowRgn( HWND, HRGN );
WINUSERAPI int WINAPI           GetWindowTextA( HWND, LPSTR, int );
WINUSERAPI int WINAPI           GetWindowTextLengthA( HWND );
WINUSERAPI int WINAPI           GetWindowTextLengthW( HWND );
WINUSERAPI int WINAPI           GetWindowTextW( HWND, LPWSTR, int );
WINUSERAPI DWORD WINAPI         GetWindowThreadProcessId( HWND, LPDWORD );
WINUSERAPI WORD WINAPI          GetWindowWord( HWND, int );
WINUSERAPI BOOL WINAPI          GrayStringA( HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int );
WINUSERAPI BOOL WINAPI          GrayStringW( HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int );
WINUSERAPI BOOL WINAPI          HideCaret( HWND );
WINUSERAPI BOOL WINAPI          HiliteMenuItem( HWND, HMENU, UINT, UINT );
WINUSERAPI BOOL WINAPI          InSendMessage( VOID );
WINUSERAPI BOOL WINAPI          InflateRect( LPRECT, int, int );
WINUSERAPI BOOL WINAPI          InsertMenuA( HMENU, UINT, UINT, UINT_PTR, LPCSTR );
WINUSERAPI BOOL WINAPI          InsertMenuW( HMENU, UINT, UINT, UINT_PTR, LPCWSTR );
WINUSERAPI int WINAPI           InternalGetWindowText( HWND, LPWSTR, int );
WINUSERAPI BOOL WINAPI          IntersectRect( LPRECT, CONST RECT *, CONST RECT * );
WINUSERAPI BOOL WINAPI          InvalidateRect( HWND, CONST RECT *, BOOL );
WINUSERAPI BOOL WINAPI          InvalidateRgn( HWND, HRGN, BOOL );
WINUSERAPI BOOL WINAPI          InvertRect( HDC, CONST RECT * );
WINUSERAPI BOOL WINAPI          IsCharAlphaA( CHAR );
WINUSERAPI BOOL WINAPI          IsCharAlphaNumericA( CHAR );
WINUSERAPI BOOL WINAPI          IsCharAlphaNumericW( WCHAR );
WINUSERAPI BOOL WINAPI          IsCharAlphaW( WCHAR );
WINUSERAPI BOOL WINAPI          IsCharLowerA( CHAR );
WINUSERAPI BOOL WINAPI          IsCharLowerW( WCHAR );
WINUSERAPI BOOL WINAPI          IsCharUpperA( CHAR );
WINUSERAPI BOOL WINAPI          IsCharUpperW( WCHAR );
WINUSERAPI BOOL WINAPI          IsChild( HWND, HWND );
WINUSERAPI BOOL WINAPI          IsClipboardFormatAvailable( UINT );
WINUSERAPI BOOL WINAPI          IsDialogMessageA( HWND, LPMSG );
WINUSERAPI BOOL WINAPI          IsDialogMessageW( HWND, LPMSG );
WINUSERAPI UINT WINAPI          IsDlgButtonChecked( HWND, int );
WINUSERAPI BOOL WINAPI          IsHungAppWindow( HWND );
WINUSERAPI BOOL WINAPI          IsIconic( HWND );
WINUSERAPI BOOL WINAPI          IsMenu( HMENU );
WINUSERAPI BOOL WINAPI          IsRectEmpty( CONST RECT * );
WINUSERAPI BOOL WINAPI          IsWindow( HWND );
WINUSERAPI BOOL WINAPI          IsWindowEnabled( HWND );
WINUSERAPI BOOL WINAPI          IsWindowUnicode( HWND );
WINUSERAPI BOOL WINAPI          IsWindowVisible( HWND );
WINUSERAPI BOOL WINAPI          IsZoomed( HWND );
WINUSERAPI BOOL WINAPI          KillTimer( HWND, UINT_PTR );
WINUSERAPI HACCEL WINAPI        LoadAcceleratorsA( HINSTANCE, LPCSTR );
WINUSERAPI HACCEL WINAPI        LoadAcceleratorsW( HINSTANCE, LPCWSTR );
WINUSERAPI HBITMAP WINAPI       LoadBitmapA( HINSTANCE, LPCSTR );
WINUSERAPI HBITMAP WINAPI       LoadBitmapW( HINSTANCE, LPCWSTR );
WINUSERAPI HCURSOR WINAPI       LoadCursorA( HINSTANCE, LPCSTR );
WINUSERAPI HCURSOR WINAPI       LoadCursorFromFileA( LPCSTR );
WINUSERAPI HCURSOR WINAPI       LoadCursorFromFileW( LPCWSTR );
WINUSERAPI HCURSOR WINAPI       LoadCursorW( HINSTANCE, LPCWSTR );
WINUSERAPI HICON WINAPI         LoadIconA( HINSTANCE, LPCSTR );
WINUSERAPI HICON WINAPI         LoadIconW( HINSTANCE, LPCWSTR );
WINUSERAPI HKL WINAPI           LoadKeyboardLayoutA( LPCSTR, UINT );
WINUSERAPI HKL WINAPI           LoadKeyboardLayoutW( LPCWSTR, UINT );
WINUSERAPI HMENU WINAPI         LoadMenuA( HINSTANCE, LPCSTR );
WINUSERAPI HMENU WINAPI         LoadMenuIndirectA( CONST MENUTEMPLATEA * );
WINUSERAPI HMENU WINAPI         LoadMenuIndirectW( CONST MENUTEMPLATEW * );
WINUSERAPI HMENU WINAPI         LoadMenuW( HINSTANCE, LPCWSTR );
WINUSERAPI int WINAPI           LoadStringA( HINSTANCE, UINT, LPSTR, int );
WINUSERAPI int WINAPI           LoadStringW( HINSTANCE, UINT, LPWSTR, int );
WINUSERAPI BOOL WINAPI          LockWindowUpdate( HWND );
WINUSERAPI int WINAPI           LookupIconIdFromDirectory( PBYTE, BOOL );
WINUSERAPI BOOL WINAPI          MapDialogRect( HWND, LPRECT );
WINUSERAPI UINT WINAPI          MapVirtualKeyA( UINT, UINT );
WINUSERAPI UINT WINAPI          MapVirtualKeyW( UINT, UINT );
WINUSERAPI int WINAPI           MapWindowPoints( HWND, HWND, LPPOINT, UINT );
WINUSERAPI BOOL WINAPI          MessageBeep( UINT );
WINUSERAPI int WINAPI           MessageBoxA( HWND, LPCSTR, LPCSTR, UINT );
WINUSERAPI int WINAPI           MessageBoxExA( HWND, LPCSTR, LPCSTR, UINT, WORD );
WINUSERAPI int WINAPI           MessageBoxExW( HWND, LPCWSTR, LPCWSTR, UINT, WORD );
WINUSERAPI int WINAPI           MessageBoxW( HWND, LPCWSTR, LPCWSTR, UINT );
WINUSERAPI BOOL WINAPI          ModifyMenuA( HMENU, UINT, UINT, UINT_PTR, LPCSTR );
WINUSERAPI BOOL WINAPI          ModifyMenuW( HMENU, UINT, UINT, UINT_PTR, LPCWSTR );
WINUSERAPI BOOL WINAPI          MoveWindow( HWND, int, int, int, int, BOOL );
WINUSERAPI DWORD WINAPI         MsgWaitForMultipleObjects( DWORD, CONST HANDLE *, BOOL, DWORD, DWORD );
WINUSERAPI DWORD WINAPI         MsgWaitForMultipleObjectsEx( DWORD, CONST HANDLE *, DWORD, DWORD, DWORD );
WINUSERAPI DWORD WINAPI         OemKeyScan( WORD );
WINUSERAPI BOOL WINAPI          OemToCharA( LPCSTR, LPSTR );
WINUSERAPI BOOL WINAPI          OemToCharBuffA( LPCSTR, LPSTR, DWORD );
WINUSERAPI BOOL WINAPI          OemToCharBuffW( LPCWSTR, LPWSTR, DWORD );
WINUSERAPI BOOL WINAPI          OemToCharW( LPCSTR, LPWSTR );
WINUSERAPI BOOL WINAPI          OffsetRect( LPRECT, int, int );
WINUSERAPI BOOL WINAPI          OpenClipboard( HWND );
WINUSERAPI HDESK WINAPI         OpenDesktopA( LPCSTR, DWORD, BOOL, ACCESS_MASK );
WINUSERAPI HDESK WINAPI         OpenDesktopW( LPCWSTR, DWORD, BOOL, ACCESS_MASK );
WINUSERAPI BOOL WINAPI          OpenIcon( HWND );
WINUSERAPI HDESK WINAPI         OpenInputDesktop( DWORD, BOOL, ACCESS_MASK );
WINUSERAPI HWINSTA WINAPI       OpenWindowStationA( LPCSTR, BOOL, ACCESS_MASK );
WINUSERAPI HWINSTA WINAPI       OpenWindowStationW( LPCWSTR, BOOL, ACCESS_MASK );
WINUSERAPI BOOL WINAPI          PeekMessageA( LPMSG, HWND, UINT, UINT, UINT );
WINUSERAPI BOOL WINAPI          PeekMessageW( LPMSG, HWND, UINT, UINT, UINT );
WINUSERAPI BOOL WINAPI          PostMessageA( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI BOOL WINAPI          PostMessageW( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI VOID WINAPI          PostQuitMessage( int );
WINUSERAPI BOOL WINAPI          PostThreadMessageA( DWORD, UINT, WPARAM, LPARAM );
WINUSERAPI BOOL WINAPI          PostThreadMessageW( DWORD, UINT, WPARAM, LPARAM );
WINUSERAPI UINT WINAPI          PrivateExtractIconsA( LPCSTR, int, int, int, HICON *, UINT *, UINT, UINT );
WINUSERAPI UINT WINAPI          PrivateExtractIconsW( LPCWSTR, int, int, int, HICON *, UINT *, UINT, UINT );
WINUSERAPI BOOL WINAPI          PtInRect( CONST RECT *, POINT );
WINUSERAPI BOOL WINAPI          RedrawWindow( HWND, CONST RECT *, HRGN, UINT );
WINUSERAPI ATOM WINAPI          RegisterClassA( CONST WNDCLASSA * );
WINUSERAPI ATOM WINAPI          RegisterClassW( CONST WNDCLASSW * );
WINUSERAPI UINT WINAPI          RegisterClipboardFormatA( LPCSTR );
WINUSERAPI UINT WINAPI          RegisterClipboardFormatW( LPCWSTR );
WINUSERAPI BOOL WINAPI          RegisterHotKey( HWND, int, UINT, UINT );
WINUSERAPI BOOL WINAPI          RegisterShellHookWindow( HWND );
WINUSERAPI UINT WINAPI          RegisterWindowMessageA( LPCSTR );
WINUSERAPI UINT WINAPI          RegisterWindowMessageW( LPCWSTR );
WINUSERAPI BOOL WINAPI          ReleaseCapture( VOID );
WINUSERAPI int WINAPI           ReleaseDC( HWND, HDC );
WINUSERAPI BOOL WINAPI          RemoveMenu( HMENU, UINT, UINT );
WINUSERAPI HANDLE WINAPI        RemovePropA( HWND, LPCSTR );
WINUSERAPI HANDLE WINAPI        RemovePropW( HWND, LPCWSTR );
WINUSERAPI BOOL WINAPI          ReplyMessage( LRESULT );
WINUSERAPI BOOL WINAPI          ScreenToClient( HWND, LPPOINT );
WINUSERAPI BOOL WINAPI          ScrollDC( HDC, int, int, CONST RECT *, CONST RECT *, HRGN, LPRECT );
WINUSERAPI BOOL WINAPI          ScrollWindow( HWND, int, int, CONST RECT *, CONST RECT * );
WINUSERAPI int WINAPI           ScrollWindowEx( HWND, int, int, CONST RECT *, CONST RECT *, HRGN, LPRECT, UINT );
WINUSERAPI LRESULT WINAPI       SendDlgItemMessageA( HWND, int, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       SendDlgItemMessageW( HWND, int, UINT, WPARAM, LPARAM );
WINUSERAPI LRESULT WINAPI       SendMessageA( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI BOOL WINAPI          SendMessageCallbackA( HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, ULONG_PTR );
WINUSERAPI BOOL WINAPI          SendMessageCallbackW( HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, ULONG_PTR );
WINUSERAPI LRESULT WINAPI       SendMessageTimeoutA( HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR );
WINUSERAPI LRESULT WINAPI       SendMessageTimeoutW( HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR );
WINUSERAPI LRESULT WINAPI       SendMessageW( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI BOOL WINAPI          SendNotifyMessageA( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI BOOL WINAPI          SendNotifyMessageW( HWND, UINT, WPARAM, LPARAM );
WINUSERAPI HWND WINAPI          SetActiveWindow( HWND );
WINUSERAPI HWND WINAPI          SetCapture( HWND );
WINUSERAPI BOOL WINAPI          SetCaretBlinkTime( UINT );
WINUSERAPI BOOL WINAPI          SetCaretPos( int, int );
WINUSERAPI DWORD WINAPI         SetClassLongA( HWND, int, LONG );
WINUSERAPI DWORD WINAPI         SetClassLongW( HWND, int, LONG );
WINUSERAPI WORD WINAPI          SetClassWord( HWND, int, WORD );
WINUSERAPI HANDLE WINAPI        SetClipboardData( UINT, HANDLE );
WINUSERAPI HWND WINAPI          SetClipboardViewer( HWND );
WINUSERAPI HCURSOR WINAPI       SetCursor( HCURSOR );
WINUSERAPI BOOL WINAPI          SetCursorPos( int, int );
WINUSERAPI VOID WINAPI          SetDebugErrorLevel( DWORD );
WINUSERAPI BOOL WINAPI          SetDlgItemInt( HWND, int, UINT, BOOL );
WINUSERAPI BOOL WINAPI          SetDlgItemTextA( HWND, int, LPCSTR );
WINUSERAPI BOOL WINAPI          SetDlgItemTextW( HWND, int, LPCWSTR );
WINUSERAPI BOOL WINAPI          SetDoubleClickTime( UINT );
WINUSERAPI HWND WINAPI          SetFocus( HWND );
WINUSERAPI BOOL WINAPI          SetForegroundWindow( HWND );
WINUSERAPI BOOL WINAPI          SetKeyboardState( LPBYTE );
WINUSERAPI VOID WINAPI          SetLastErrorEx( DWORD, DWORD );
WINUSERAPI BOOL WINAPI          SetMenu( HWND, HMENU );
WINUSERAPI BOOL WINAPI          SetMenuItemBitmaps( HMENU, UINT, UINT, HBITMAP, HBITMAP );
WINUSERAPI BOOL WINAPI          SetMessageQueue( int );
WINUSERAPI HWND WINAPI          SetParent( HWND, HWND );
WINUSERAPI BOOL WINAPI          SetProcessWindowStation( HWINSTA );
WINUSERAPI BOOL WINAPI          SetPropA( HWND, LPCSTR, HANDLE );
WINUSERAPI BOOL WINAPI          SetPropW( HWND, LPCWSTR, HANDLE );
WINUSERAPI BOOL WINAPI          SetRect( LPRECT, int, int, int, int );
WINUSERAPI BOOL WINAPI          SetRectEmpty( LPRECT );
WINUSERAPI int WINAPI           SetScrollPos( HWND, int, int, BOOL );
WINUSERAPI int WINAPI           SetScrollRange( HWND, int, int, int, BOOL );
WINUSERAPI BOOL WINAPI          SetSysColors( int, CONST INT *, CONST COLORREF * );
WINUSERAPI BOOL WINAPI          SetSystemCursor( HCURSOR, DWORD );
WINUSERAPI BOOL WINAPI          SetThreadDesktop( HDESK );
WINUSERAPI UINT_PTR WINAPI      SetTimer( HWND, UINT_PTR, UINT, TIMERPROC );
WINUSERAPI BOOL WINAPI          SetUserObjectInformationA( HANDLE, int, PVOID, DWORD );
WINUSERAPI BOOL WINAPI          SetUserObjectInformationW( HANDLE, int, PVOID, DWORD );
WINUSERAPI BOOL WINAPI          SetUserObjectSecurity( HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR );
WINUSERAPI LONG WINAPI          SetWindowLongA( HWND, int, LONG );
WINUSERAPI LONG WINAPI          SetWindowLongW( HWND, int, LONG );
WINUSERAPI BOOL WINAPI          SetWindowPlacement( HWND, CONST WINDOWPLACEMENT * );
WINUSERAPI BOOL WINAPI          SetWindowPos( HWND, HWND, int, int, int, int, UINT );
WINUSERAPI int WINAPI           SetWindowRgn( HWND, HRGN, BOOL );
WINUSERAPI BOOL WINAPI          SetWindowTextA( HWND, LPCSTR );
WINUSERAPI BOOL WINAPI          SetWindowTextW( HWND, LPCWSTR );
WINUSERAPI WORD WINAPI          SetWindowWord( HWND, int, WORD );
WINUSERAPI HHOOK WINAPI         SetWindowsHookA( int, HOOKPROC );
WINUSERAPI HHOOK WINAPI         SetWindowsHookExA( int, HOOKPROC, HINSTANCE, DWORD );
WINUSERAPI HHOOK WINAPI         SetWindowsHookExW( int, HOOKPROC, HINSTANCE, DWORD );
WINUSERAPI HHOOK WINAPI         SetWindowsHookW( int, HOOKPROC );
WINUSERAPI BOOL WINAPI          ShowCaret( HWND );
WINUSERAPI int WINAPI           ShowCursor( BOOL );
WINUSERAPI BOOL WINAPI          ShowScrollBar( HWND, int, BOOL );
WINUSERAPI BOOL WINAPI          ShowOwnedPopups( HWND, BOOL );
WINUSERAPI BOOL WINAPI          ShowWindow( HWND, int );
WINUSERAPI BOOL WINAPI          ShutdownBlockReasonCreate( HWND, LPCWSTR );
WINUSERAPI BOOL WINAPI          ShutdownBlockReasonDestroy( HWND );
WINUSERAPI BOOL WINAPI          ShutdownBlockReasonQuery( HWND, LPWSTR, DWORD * );
WINUSERAPI BOOL WINAPI          SubtractRect( LPRECT, CONST RECT *, CONST RECT * );
WINUSERAPI BOOL WINAPI          SwapMouseButton( BOOL );
WINUSERAPI BOOL WINAPI          SwitchDesktop( HDESK );
WINUSERAPI BOOL WINAPI          SystemParametersInfoA( UINT, UINT, PVOID, UINT );
WINUSERAPI BOOL WINAPI          SystemParametersInfoW( UINT, UINT, PVOID, UINT );
WINUSERAPI LONG WINAPI          TabbedTextOutA( HDC, int, int, LPCSTR, int, int, CONST INT *, int );
WINUSERAPI LONG WINAPI          TabbedTextOutW( HDC, int, int, LPCWSTR, int, int, CONST INT *, int );
WINUSERAPI int WINAPI           ToAscii( UINT, UINT, CONST BYTE *, LPWORD, UINT );
WINUSERAPI int WINAPI           ToUnicode( UINT, UINT, CONST BYTE *, LPWSTR, int, UINT );
WINUSERAPI BOOL WINAPI          TrackPopupMenu( HMENU, UINT, int, int, int, HWND, CONST RECT * );
WINUSERAPI int WINAPI           TranslateAcceleratorA( HWND, HACCEL, LPMSG );
WINUSERAPI int WINAPI           TranslateAcceleratorW( HWND, HACCEL, LPMSG );
WINUSERAPI BOOL WINAPI          TranslateMDISysAccel( HWND, LPMSG );
WINUSERAPI BOOL WINAPI          TranslateMessage( CONST MSG * );
WINUSERAPI BOOL WINAPI          UnhookWindowsHook( int, HOOKPROC );
WINUSERAPI BOOL WINAPI          UnhookWindowsHookEx( HHOOK );
WINUSERAPI BOOL WINAPI          UnionRect( LPRECT, CONST RECT *, CONST RECT * );
WINUSERAPI BOOL WINAPI          UnloadKeyboardLayout( HKL );
WINUSERAPI BOOL WINAPI          UnregisterClassA( LPCSTR, HINSTANCE );
WINUSERAPI BOOL WINAPI          UnregisterClassW( LPCWSTR, HINSTANCE );
WINUSERAPI BOOL WINAPI          UnregisterHotKey( HWND, int );
WINUSERAPI BOOL WINAPI          UpdateWindow( HWND );
WINUSERAPI BOOL WINAPI          ValidateRect( HWND, CONST RECT * );
WINUSERAPI BOOL WINAPI          ValidateRgn( HWND, HRGN );
WINUSERAPI SHORT WINAPI         VkKeyScanA( CHAR );
WINUSERAPI SHORT WINAPI         VkKeyScanW( WCHAR );
WINUSERAPI DWORD WINAPI         WaitForInputIdle( HANDLE, DWORD );
WINUSERAPI BOOL WINAPI          WaitMessage( VOID );
WINUSERAPI BOOL WINAPI          WinHelpA( HWND, LPCSTR, UINT, ULONG_PTR );
WINUSERAPI BOOL WINAPI          WinHelpW( HWND, LPCWSTR, UINT, ULONG_PTR );
WINUSERAPI HWND WINAPI          WindowFromDC( HDC );
WINUSERAPI HWND WINAPI          WindowFromPoint( POINT );
WINUSERAPI VOID WINAPI          keybd_event( BYTE, BYTE, DWORD, ULONG_PTR );
WINUSERAPI VOID WINAPI          mouse_event( DWORD, DWORD, DWORD, DWORD, ULONG_PTR );
WINUSERAPI int WINAPIV          wsprintfA( LPSTR, LPCSTR, ... );
WINUSERAPI int WINAPIV          wsprintfW( LPWSTR, LPCWSTR, ... );
WINUSERAPI int WINAPI           wvsprintfA( LPSTR, LPCSTR, va_list );
WINUSERAPI int WINAPI           wvsprintfW( LPWSTR, LPCWSTR, va_list );
#ifdef _WINGDI_
WINUSERAPI LONG WINAPI          ChangeDisplaySettingsA( DEVMODEA *, DWORD );
WINUSERAPI LONG WINAPI          ChangeDisplaySettingsExA( LPCSTR, DEVMODEA *, HWND, DWORD, LPVOID );
WINUSERAPI LONG WINAPI          ChangeDisplaySettingsExW( LPCWSTR, DEVMODEW *, HWND, DWORD, LPVOID );
WINUSERAPI LONG WINAPI          ChangeDisplaySettingsW( DEVMODEW *, DWORD );
WINUSERAPI HDESK WINAPI         CreateDesktopA( LPCSTR, LPCSTR, DEVMODEA *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES );
WINUSERAPI HDESK WINAPI         CreateDesktopExA( LPCSTR, LPCSTR, DEVMODEA *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES, ULONG, PVOID );
WINUSERAPI HDESK WINAPI         CreateDesktopExW( LPCWSTR, LPCWSTR, DEVMODEW *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES, ULONG, PVOID );
WINUSERAPI HDESK WINAPI         CreateDesktopW( LPCWSTR, LPCWSTR, DEVMODEW *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES );
WINUSERAPI BOOL WINAPI          EnumDisplaySettingsA( LPCSTR, DWORD, DEVMODEA * );
WINUSERAPI BOOL WINAPI          EnumDisplaySettingsW( LPCWSTR, DWORD, DEVMODEW * );
#endif
#if (WINVER >= 0x0400)
WINUSERAPI WORD WINAPI          CascadeWindows( HWND, UINT, CONST RECT *, UINT, const HWND * );
WINUSERAPI LPSTR WINAPI         CharNextExA( WORD, LPCSTR, DWORD );
WINUSERAPI LPSTR WINAPI         CharPrevExA( WORD, LPCSTR, LPCSTR, DWORD );
WINUSERAPI BOOL WINAPI          CheckMenuRadioItem( HMENU, UINT, UINT, UINT, UINT );
WINUSERAPI HWND WINAPI          ChildWindowFromPointEx( HWND, POINT, UINT );
WINUSERAPI HANDLE WINAPI        CopyImage( HANDLE, UINT, int, int, UINT );
WINUSERAPI HICON WINAPI         CreateIconFromResourceEx( PBYTE, DWORD, BOOL, DWORD, int, int, UINT );
WINUSERAPI BOOL WINAPI          DragDetect( HWND, POINT );
WINUSERAPI DWORD WINAPI         DragObject( HWND, HWND, UINT, ULONG_PTR, HCURSOR );
WINUSERAPI BOOL WINAPI          DrawAnimatedRects( HWND, int, CONST RECT *, CONST RECT * );
WINUSERAPI BOOL WINAPI          DrawCaption( HWND, HDC, CONST RECT *, UINT );
WINUSERAPI BOOL WINAPI          DrawEdge( HDC, LPRECT, UINT, UINT );
WINUSERAPI BOOL WINAPI          DrawFrameControl( HDC, LPRECT, UINT, UINT );
WINUSERAPI BOOL WINAPI          DrawIconEx( HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT );
WINUSERAPI BOOL WINAPI          DrawStateA( HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT );
WINUSERAPI BOOL WINAPI          DrawStateW( HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT );
WINUSERAPI int WINAPI           DrawTextExA( HDC, LPSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS );
WINUSERAPI int WINAPI           DrawTextExW( HDC, LPWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS );
WINUSERAPI HWND WINAPI          FindWindowExA( HWND, HWND, LPCSTR, LPCSTR );
WINUSERAPI HWND WINAPI          FindWindowExW( HWND, HWND, LPCWSTR, LPCWSTR );
WINUSERAPI BOOL WINAPI          GetClassInfoExA( HINSTANCE, LPCSTR, LPWNDCLASSEXA );
WINUSERAPI BOOL WINAPI          GetClassInfoExW( HINSTANCE, LPCWSTR, LPWNDCLASSEXW );
WINUSERAPI HKL WINAPI           GetKeyboardLayout( DWORD );
WINUSERAPI int WINAPI           GetKeyboardLayoutList( int, HKL * );
WINUSERAPI DWORD WINAPI         GetMenuContextHelpId( HMENU );
WINUSERAPI UINT WINAPI          GetMenuDefaultItem( HMENU, UINT, UINT );
WINUSERAPI BOOL WINAPI          GetMenuItemInfoA( HMENU, UINT, BOOL, LPMENUITEMINFOA );
WINUSERAPI BOOL WINAPI          GetMenuItemInfoW( HMENU, UINT, BOOL, LPMENUITEMINFOW );
WINUSERAPI BOOL WINAPI          GetMenuItemRect( HWND, HMENU, UINT, LPRECT );
WINUSERAPI BOOL WINAPI          GetScrollInfo( HWND, int, LPSCROLLINFO );
WINUSERAPI HWND WINAPI          GetShellWindow( VOID );
WINUSERAPI HBRUSH WINAPI        GetSysColorBrush( int );
WINUSERAPI DWORD WINAPI         GetWindowContextHelpId( HWND );
WINUSERAPI BOOL WINAPI          InsertMenuItemA( HMENU, UINT, BOOL, LPCMENUITEMINFOA );
WINUSERAPI BOOL WINAPI          InsertMenuItemW( HMENU, UINT, BOOL, LPCMENUITEMINFOW );
WINUSERAPI HANDLE WINAPI        LoadImageA( HINSTANCE, LPCSTR, UINT, int, int, UINT );
WINUSERAPI HANDLE WINAPI        LoadImageW( HINSTANCE, LPCWSTR, UINT, int, int, UINT );
WINUSERAPI int WINAPI           LookupIconIdFromDirectoryEx( PBYTE, BOOL, int, int, UINT );
WINUSERAPI UINT WINAPI          MapVirtualKeyExA( UINT, UINT, HKL );
WINUSERAPI UINT WINAPI          MapVirtualKeyExW( UINT, UINT, HKL );
WINUSERAPI int WINAPI           MenuItemFromPoint( HWND, HMENU, POINT );
WINUSERAPI int WINAPI           MessageBoxIndirectA( CONST MSGBOXPARAMSA * );
WINUSERAPI int WINAPI           MessageBoxIndirectW( CONST MSGBOXPARAMSW * );
WINUSERAPI BOOL WINAPI          PaintDesktop( HDC );
WINUSERAPI ATOM WINAPI          RegisterClassExA( CONST WNDCLASSEXA * );
WINUSERAPI ATOM WINAPI          RegisterClassExW( CONST WNDCLASSEXW * );
WINUSERAPI BOOL WINAPI          SetMenuContextHelpId( HMENU, DWORD );
WINUSERAPI BOOL WINAPI          SetMenuDefaultItem( HMENU, UINT, UINT );
WINUSERAPI BOOL WINAPI          SetMenuItemInfoA( HMENU, UINT, BOOL, LPCMENUITEMINFOA );
WINUSERAPI BOOL WINAPI          SetMenuItemInfoW( HMENU, UINT, BOOL, LPCMENUITEMINFOW );
WINUSERAPI LPARAM WINAPI        SetMessageExtraInfo( LPARAM );
WINUSERAPI int WINAPI           SetScrollInfo( HWND, int, LPCSCROLLINFO, BOOL );
WINUSERAPI BOOL WINAPI          SetWindowContextHelpId( HWND, DWORD );
WINUSERAPI BOOL WINAPI          ShowWindowAsync( HWND, int );
WINUSERAPI VOID WINAPI          SwitchToThisWindow( HWND, BOOL );
WINUSERAPI WORD WINAPI          TileWindows( HWND, UINT, CONST RECT *, UINT, const HWND * );
WINUSERAPI int WINAPI           ToAsciiEx( UINT, UINT, CONST BYTE *, LPWORD, UINT, HKL );
WINUSERAPI int WINAPI           ToUnicodeEx( UINT, UINT, CONST BYTE *, LPWSTR, int, UINT, HKL );
WINUSERAPI BOOL WINAPI          TrackPopupMenuEx( HMENU, UINT, int, int, HWND, LPTPMPARAMS );
WINUSERAPI SHORT WINAPI         VkKeyScanExA( CHAR, HKL );
WINUSERAPI SHORT WINAPI         VkKeyScanExW( WCHAR, HKL );
#endif
#if (WINVER >= 0x0500)
WINUSERAPI BOOL WINAPI          AnimateWindow( HWND, DWORD, DWORD );
WINUSERAPI BOOL WINAPI          EndMenu( VOID );
WINUSERAPI BOOL WINAPI          EnumDisplayMonitors( HDC, LPCRECT, MONITORENUMPROC, LPARAM );
WINUSERAPI BOOL WINAPI          FlashWindowEx( PFLASHWINFO );
WINUSERAPI BOOL WINAPI          GetAltTabInfoA( HWND, int, PALTTABINFO, LPSTR, UINT );
WINUSERAPI BOOL WINAPI          GetAltTabInfoW( HWND, int, PALTTABINFO, LPWSTR, UINT );
WINUSERAPI HWND WINAPI          GetAncestor( HWND, UINT );
WINUSERAPI DWORD WINAPI         GetClipboardSequenceNumber( VOID );
WINUSERAPI BOOL WINAPI          GetComboBoxInfo( HWND, PCOMBOBOXINFO );
WINUSERAPI BOOL WINAPI          GetCursorInfo( PCURSORINFO );
WINUSERAPI BOOL WINAPI          GetGUIThreadInfo( DWORD, PGUITHREADINFO );
WINUSERAPI DWORD WINAPI         GetGuiResources( HANDLE, DWORD );
WINUSERAPI DWORD WINAPI         GetListBoxInfo( HWND );
WINUSERAPI BOOL WINAPI          GetMenuBarInfo( HWND, LONG, LONG, PMENUBARINFO );
WINUSERAPI BOOL WINAPI          GetMenuInfo( HMENU, LPMENUINFO );
WINUSERAPI BOOL WINAPI          GetMonitorInfoA( HMONITOR, LPMONITORINFO );
WINUSERAPI BOOL WINAPI          GetMonitorInfoW( HMONITOR, LPMONITORINFO );
WINUSERAPI int WINAPI           GetMouseMovePointsEx( UINT, LPMOUSEMOVEPOINT, LPMOUSEMOVEPOINT, int, DWORD );
WINUSERAPI BOOL WINAPI          GetProcessDefaultLayout( DWORD * );
WINUSERAPI BOOL WINAPI          GetScrollBarInfo( HWND, LONG, PSCROLLBARINFO );
WINUSERAPI BOOL WINAPI          GetTitleBarInfo( HWND, PTITLEBARINFO );
WINUSERAPI BOOL WINAPI          GetWindowInfo( HWND, PWINDOWINFO );
WINUSERAPI UINT WINAPI          GetWindowModuleFileNameA( HWND, LPSTR, UINT );
WINUSERAPI UINT WINAPI          GetWindowModuleFileNameW( HWND, LPWSTR, UINT );
WINUSERAPI DWORD WINAPI         InSendMessageEx( LPVOID );
WINUSERAPI HMONITOR WINAPI      MonitorFromPoint( POINT, DWORD );
WINUSERAPI HMONITOR WINAPI      MonitorFromRect( LPCRECT, DWORD );
WINUSERAPI HMONITOR WINAPI      MonitorFromWindow( HWND, DWORD );
WINUSERAPI VOID WINAPI          NotifyWinEvent( DWORD, HWND, LONG, LONG );
WINUSERAPI HWND WINAPI          RealChildWindowFromPoint( HWND, POINT );
WINUSERAPI UINT WINAPI          RealGetWindowClassA( HWND, LPSTR, UINT );
WINUSERAPI UINT WINAPI          RealGetWindowClassW( HWND, LPWSTR, UINT );
WINUSERAPI HDEVNOTIFY WINAPI    RegisterDeviceNotificationA( HANDLE, LPVOID, DWORD );
WINUSERAPI HDEVNOTIFY WINAPI    RegisterDeviceNotificationW( HANDLE, LPVOID, DWORD );
WINUSERAPI BOOL WINAPI          SetMenuInfo( HMENU, LPCMENUINFO );
WINUSERAPI BOOL WINAPI          SetProcessDefaultLayout( DWORD );
WINUSERAPI HWINEVENTHOOK WINAPI SetWinEventHook( DWORD, DWORD, HMODULE, WINEVENTPROC, DWORD, DWORD, DWORD );
WINUSERAPI BOOL WINAPI          UnhookWinEvent( HWINEVENTHOOK );
WINUSERAPI BOOL WINAPI          UnregisterDeviceNotification( HDEVNOTIFY );
#ifdef _WINGDI_
WINUSERAPI BOOL WINAPI          EnumDisplayDevicesA( LPCSTR, DWORD, PDISPLAY_DEVICEA, DWORD );
WINUSERAPI BOOL WINAPI          EnumDisplayDevicesW( LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD );
WINUSERAPI BOOL WINAPI          EnumDisplaySettingsExA( LPCSTR, DWORD, DEVMODEA *, DWORD );
WINUSERAPI BOOL WINAPI          EnumDisplaySettingsExW( LPCWSTR, DWORD, DEVMODEW *, DWORD );
#endif
#endif
#if (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0501)
WINUSERAPI BOOL WINAPI          IsWinEventHookInstalled( DWORD );
#endif
#if (WINVER >= 0x0501)
WINUSERAPI VOID WINAPI          DisableProcessWindowsGhosting( VOID );
#endif
#if (WINVER >= 0x0600)
WINUSERAPI BOOL WINAPI          AddClipboardFormatListener( HWND );
WINUSERAPI BOOL WINAPI          ChangeWindowMessageFilter( UINT, DWORD );
WINUSERAPI BOOL WINAPI          GetPhysicalCursorPos( LPPOINT );
WINUSERAPI BOOL WINAPI          GetUpdatedClipboardFormats( PUINT, UINT, PUINT );
WINUSERAPI BOOL WINAPI          LogicalToPhysicalPoint( HWND, LPPOINT );
WINUSERAPI BOOL WINAPI          PhysicalToLogicalPoint( HWND, LPPOINT );
WINUSERAPI BOOL WINAPI          RemoveClipboardFormatListener( HWND );
WINUSERAPI BOOL WINAPI          SetPhysicalCursorPos( int, int );
WINUSERAPI HWND WINAPI          WindowFromPhysicalPoint( POINT );
#endif
#if (WINVER >= 0x0601)
WINUSERAPI BOOL WINAPI          ChangeWindowMessageFilterEx( HWND, UINT, DWORD, PCHANGEFILTERSTRUCT );
WINUSERAPI BOOL WINAPI          CloseGestureInfoHandle( HGESTUREINFO );
WINUSERAPI BOOL WINAPI          CloseTouchInputHandle( HTOUCHINPUT );
WINUSERAPI LONG WINAPI          DisplayConfigGetDeviceInfo( DISPLAYCONFIG_DEVICE_INFO_HEADER * );
WINUSERAPI LONG WINAPI          DisplayConfigSetDeviceInfo( DISPLAYCONFIG_DEVICE_INFO_HEADER * );
WINUSERAPI LONG WINAPI          GetDisplayConfigBufferSizes( UINT32, UINT32 *, UINT32 * );
WINUSERAPI BOOL WINAPI          GetGestureConfig( HWND, DWORD, DWORD, PUINT, PGESTURECONFIG, UINT );
WINUSERAPI BOOL WINAPI          GetGestureExtraArgs( HGESTUREINFO, UINT, PBYTE );
WINUSERAPI BOOL WINAPI          GetGestureInfo( HGESTUREINFO, PGESTUREINFO );
WINUSERAPI BOOL WINAPI          GetTouchInputInfo( HTOUCHINPUT, UINT, PTOUCHINPUT, int );
WINUSERAPI BOOL WINAPI          IsTouchWindow( HWND, PULONG );
WINUSERAPI LONG WINAPI          QueryDisplayConfig( UINT32, UINT32 *, DISPLAYCONFIG_PATH_INFO *, UINT32 *, DISPLAYCONFIG_MODE_INFO *, DISPLAYCONFIG_TOPOLOGY_ID * );
WINUSERAPI BOOL WINAPI          RegisterTouchWindow( HWND, ULONG );
WINUSERAPI LONG WINAPI          SetDisplayConfig( UINT32, DISPLAYCONFIG_PATH_INFO *, UINT32, DISPLAYCONFIG_MODE_INFO *, UINT32 );
WINUSERAPI BOOL WINAPI          SetGestureConfig( HWND, DWORD, UINT, PGESTURECONFIG, UINT );
WINUSERAPI BOOL WINAPI          UnregisterTouchWindow( HWND );
#endif
#if (_WIN32_WINNT >= 0x0400)
WINUSERAPI BOOL WINAPI          TrackMouseEvent( LPTRACKMOUSEEVENT );
#endif
#if (_WIN32_WINNT > 0x0400)
WINUSERAPI UINT WINAPI          SendInput( UINT, LPINPUT, int );
#endif
#if (_WIN32_WINNT >= 0x0500)
WINUSERAPI BOOL WINAPI          AllowSetForegroundWindow( DWORD );
WINUSERAPI BOOL WINAPI          GetLastInputInfo( PLASTINPUTINFO );
WINUSERAPI BOOL WINAPI          LockSetForegroundWindow( UINT );
WINUSERAPI BOOL WINAPI          LockWorkStation( VOID );
WINUSERAPI BOOL WINAPI          SetLayeredWindowAttributes( HWND, COLORREF, BYTE, DWORD );
WINUSERAPI BOOL WINAPI          UserHandleGrantAccess( HANDLE, HANDLE, BOOL );
#ifdef _WINGDI_
WINUSERAPI BOOL WINAPI          UpdateLayeredWindow( HWND, HDC, POINT *, SIZE *, HDC, POINT *, COLORREF, BLENDFUNCTION *, DWORD );
#endif
#endif
#if (_WIN32_WINNT >= 0x0501)
WINUSERAPI long WINAPI          BroadcastSystemMessageExA( DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO );
WINUSERAPI long WINAPI          BroadcastSystemMessageExW( DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO );
WINUSERAPI LRESULT WINAPI       DefRawInputProc( PRAWINPUT *, INT, UINT );
WINUSERAPI BOOL WINAPI          GetLayeredWindowAttributes( HWND, COLORREF *, BYTE *, DWORD * );
WINUSERAPI UINT WINAPI          GetRawInputBuffer( PRAWINPUT, PUINT, UINT );
WINUSERAPI UINT WINAPI          GetRawInputData( HRAWINPUT, UINT, LPVOID, PUINT, UINT );
WINUSERAPI UINT WINAPI          GetRawInputDeviceInfoA( HANDLE, UINT, LPVOID, PUINT );
WINUSERAPI UINT WINAPI          GetRawInputDeviceInfoW( HANDLE, UINT, LPVOID, PUINT );
WINUSERAPI UINT WINAPI          GetRawInputDeviceList( PRAWINPUTDEVICELIST, PUINT, UINT );
WINUSERAPI UINT WINAPI          GetRegisteredRawInputDevices( PRAWINPUTDEVICE, PUINT, UINT );
WINUSERAPI int WINAPI           GetWindowRgnBox( HWND, LPRECT );
WINUSERAPI BOOL WINAPI          IsGUIThread( BOOL );
WINUSERAPI BOOL WINAPI          IsWow64Message( VOID );
WINUSERAPI BOOL WINAPI          PrintWindow( HWND, HDC, UINT );
WINUSERAPI BOOL WINAPI          RegisterRawInputDevices( PCRAWINPUTDEVICE, UINT, UINT );
#endif
#if (_WIN32_WINNT >= 0x0502)
WINUSERAPI HPOWERNOTIFY WINAPI  RegisterPowerSettingNotification( HANDLE, LPCGUID, DWORD );
WINUSERAPI BOOL WINAPI          UnregisterPowerSettingNotification( HPOWERNOTIFY );
#ifdef _WINGDI_
WINUSERAPI BOOL WINAPI          UpdateLayeredWindowIndirect( HWND, const UPDATELAYEREDWINDOWINFO * );
#endif
#endif
#if (_WIN32_WINNT >= 0x0600)
WINUSERAPI BOOL WINAPI          GetIconInfoExA( HICON, PICONINFOEXA );
WINUSERAPI BOOL WINAPI          GetIconInfoExW( HICON, PICONINFOEXW );
WINUSERAPI BOOL WINAPI          IsProcessDPIAware( VOID );
WINUSERAPI BOOL WINAPI          SetProcessDPIAware( VOID );
WINUSERAPI BOOL WINAPI          SoundSentry( VOID );
#endif
#if (_WIN32_WINNT >= 0x0601)
WINUSERAPI BOOL WINAPI          CalculatePopupWindowPosition( const POINT *, const SIZE *, UINT, RECT *, RECT * );
WINUSERAPI BOOL WINAPI          GetWindowDisplayAffinity( HWND, DWORD * );
WINUSERAPI BOOL WINAPI          SetWindowDisplayAffinity( HWND, DWORD );
#endif

/* Functions in USER32.DLL that are defined differently on different versions
 * of Windows.
 */
#if (WINVER >= 0x0400)
WINUSERAPI HKL WINAPI   ActivateKeyboardLayout( HKL, UINT );
#if defined(_WIN32_WINNT)
WINUSERAPI long WINAPI  BroadcastSystemMessageA( DWORD, LPDWORD, UINT, WPARAM, LPARAM );
WINUSERAPI long WINAPI  BroadcastSystemMessageW( DWORD, LPDWORD, UINT, WPARAM, LPARAM );
#elif defined (_WIN32_WINDOWS)
WINUSERAPI long WINAPI  BroadcastSystemMessage( DWORD, LPDWORD, UINT, WPARAM, LPARAM );
#endif
#else
WINUSERAPI BOOL WINAPI  ActivateKeyboardLayout( HKL, UINT );
#endif

/* Functions implemented as macros */
#define CopyCursor( x )                     ((HCURSOR)CopyIcon( (HICON)(x) ))
#define CreateDialogA( p1, p2, p3, p4 ) \
    CreateDialogParamA( p1, p2, p3, p4, 0L )
#define CreateDialogIndirectA( p1, p2, p3, p4 ) \
    CreateDialogIndirectParamA( p1, p2, p3, p4, 0L )
#define CreateDialogIndirectW( p1, p2, p3, p4 ) \
    CreateDialogIndirectParamW( p1, p2, p3, p4, 0L )
#define CreateDialogW( p1, p2, p3, p4 ) \
    CreateDialogParamW( p1, p2, p3, p4, 0L )
#define CreateWindowA( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) \
    CreateWindowExA( 0L, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 )
#define CreateWindowW( p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) \
    CreateWindowExW( 0L, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 )
#define DefHookProc( p1, p2, p3, p4 )       CallNextHookEx( *p4, p1, p2, p3 )
#define DialogBoxA( p1, p2, p3, p4 )        DialogBoxParamA( p1, p2, p3, p4, 0L )
#define DialogBoxIndirectA( p1, p2, p3, p4 ) \
    DialogBoxIndirectParamA( p1, p2, p3, p4, 0L )
#define DialogBoxIndirectW( p1, p2, p3, p4 ) \
    DialogBoxIndirectParamW( p1, p2, p3, p4, 0L )
#define DialogBoxW( p1, p2, p3, p4 )        DialogBoxParamW( p1, p2, p3, p4, 0L )
#define EnumTaskWindows( p1, p2, p3 ) \
    EnumThreadWindows( HandleToUlong( p1 ), p2, p3 )
#define ExitWindows( p1, p2 )               ExitWindowsEx( EWX_LOGOFF, 0xFFFFFFFFL )
#define GetClassLongPtrA( p1, p2 )          GetClassLongA( p1, p2 )
#define GetClassLongPtrW( p1, p2 )          GetClassLongW( p1, p2 )
#define GetNextWindow( p1, p2 )             GetWindow( p1, p2 )
#define GetSysModalWindow()                 NULL
#define GetWindowLongPtrA( p1, p2 )         GetWindowLongA( p1, p2 )
#define GetWindowLongPtrW( p1, p2 )         GetWindowLongW( p1, p2 )
#define GetWindowTask( x ) \
    ((HANDLE)(DWORD_PTR)GetWindowThreadProcessId( x, NULL ))
#define PostAppMessageA( p1, p2, p3, p4 )   PostThreadMessageA( (DWORD)(p1), p2, p3, p4 )
#define PostAppMessageW( p1, p2, p3, p4 )   PostThreadMessageW( (DWORD)(p1), p2, p3, p4 )
#define SetClassLongPtrA( p1, p2, p3 )      SetClassLongA( p1, p2, p3 )
#define SetClassLongPtrW( p1, p2, p3 )      SetClassLongW( p1, p2, p3 )
#define SetSysModalWindow( x )              NULL
#define SetWindowLongPtrA( p1, p2, p3 )     SetWindowLongA( p1, p2, p3 )
#define SetWindowLongPtrW( p1, p2, p3 )     SetWindowLongW( p1, p2, p3 )

/* Aliases for compatibility with Win16 */
#define AnsiLower       CharLowerA
#define AnsiLowerBuff   CharLowerBuffA
#define AnsiNext        CharNextA
#define AnsiPrev        CharPrevA
#define AnsiToOem       CharToOemA
#define AnsiToOemBuff   CharToOemBuffA
#define AnsiUpper       CharUpperA
#define AnsiUpperBuff   CharUpperBuffA
#define OemToAnsi       OemToCharA
#define OemToAnsiBuff   OemToCharBuffA

/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
    #define AppendMenu                      AppendMenuW
    #define CallMsgFilter                   CallMsgFilterW
    #define CallWindowProc                  CallWindowProcW
    #define ChangeMenu                      ChangeMenuW
    #define CharLower                       CharLowerW
    #define CharLowerBuff                   CharLowerBuffW
    #define CharNext                        CharNextW
    #define CharPrev                        CharPrevW
    #define CharToOem                       CharToOemW
    #define CharToOemBuff                   CharToOemBuffW
    #define CharUpper                       CharUpperW
    #define CharUpperBuff                   CharUpperBuffW
    #define CopyAcceleratorTable            CopyAcceleratorTableW
    #define CreateAcceleratorTable          CreateAcceleratorTableW
    #define CreateDialog                    CreateDialogW
    #define CreateDialogIndirect            CreateDialogIndirectW
    #define CreateDialogIndirectParam       CreateDialogIndirectParamW
    #define CreateDialogParam               CreateDialogParamW
    #define CreateMDIWindow                 CreateMDIWindowW
    #define CreateWindow                    CreateWindowW
    #define CreateWindowEx                  CreateWindowExW
    #define CreateWindowStation             CreateWindowStationW
    #define DefDlgProc                      DefDlgProcW
    #define DefFrameProc                    DefFrameProcW
    #define DefMDIChildProc                 DefMDIChildProcW
    #define DefWindowProc                   DefWindowProcW
    #define DialogBox                       DialogBoxW
    #define DialogBoxIndirect               DialogBoxIndirectW
    #define DialogBoxIndirectParam          DialogBoxIndirectParamW
    #define DialogBoxParam                  DialogBoxParamW
    #define DispatchMessage                 DispatchMessageW
    #define DlgDirList                      DlgDirListW
    #define DlgDirListComboBox              DlgDirListComboBoxW
    #define DlgDirSelectComboBoxEx          DlgDirSelectComboBoxExW
    #define DlgDirSelectEx                  DlgDirSelectExW
    #define DrawText                        DrawTextW
    #define EnumDesktops                    EnumDesktopsW
    #define EnumProps                       EnumPropsW
    #define EnumPropsEx                     EnumPropsExW
    #define EnumWindowStations              EnumWindowStationsW
    #define FindWindow                      FindWindowW
    #define GetClassInfo                    GetClassInfoW
    #define GetClassLong                    GetClassLongW
    #define GetClassLongPtr                 GetClassLongPtrW
    #define GetClassName                    GetClassNameW
    #define GetClipboardFormatName          GetClipboardFormatNameW
    #define GetDlgItemText                  GetDlgItemTextW
    #define GetKeyNameText                  GetKeyNameTextW
    #define GetKeyboardLayoutName           GetKeyboardLayoutNameW
    #define GetMenuString                   GetMenuStringW
    #define GetMessage                      GetMessageW
    #define GetProp                         GetPropW
    #define GetTabbedTextExtent             GetTabbedTextExtentW
    #define GetUserObjectInformation        GetUserObjectInformationW
    #define GetWindowLong                   GetWindowLongW
    #define GetWindowLongPtr                GetWindowLongPtrW
    #define GetWindowText                   GetWindowTextW
    #define GetWindowTextLength             GetWindowTextLengthW
    #define GrayString                      GrayStringW
    #define InsertMenu                      InsertMenuW
    #define IsCharAlpha                     IsCharAlphaW
    #define IsCharAlphaNumeric              IsCharAlphaNumericW
    #define IsCharLower                     IsCharLowerW
    #define IsCharUpper                     IsCharUpperW
    #define IsDialogMessage                 IsDialogMessageW
    #define LoadAccelerators                LoadAcceleratorsW
    #define LoadBitmap                      LoadBitmapW
    #define LoadCursor                      LoadCursorW
    #define LoadCursorFromFile              LoadCursorFromFileW
    #define LoadIcon                        LoadIconW
    #define LoadKeyboardLayout              LoadKeyboardLayoutW
    #define LoadMenu                        LoadMenuW
    #define LoadMenuIndirect                LoadMenuIndirectW
    #define LoadString                      LoadStringW
    #define MapVirtualKey                   MapVirtualKeyW
    #define MessageBox                      MessageBoxW
    #define MessageBoxEx                    MessageBoxExW
    #define ModifyMenu                      ModifyMenuW
    #define OemToChar                       OemToCharW
    #define OemToCharBuff                   OemToCharBuffW
    #define OpenDesktop                     OpenDesktopW
    #define OpenWindowStation               OpenWindowStationW
    #define PeekMessage                     PeekMessageW
    #define PostAppMessage                  PostAppMessageW
    #define PostMessage                     PostMessageW
    #define PostThreadMessage               PostThreadMessageW
    #define PrivateExtractIcons             PrivateExtractIconsW
    #define RegisterClass                   RegisterClassW
    #define RegisterClipboardFormat         RegisterClipboardFormatW
    #define RegisterWindowMessage           RegisterWindowMessageW
    #define RemoveProp                      RemovePropW
    #define SendDlgItemMessage              SendDlgItemMessageW
    #define SendMessage                     SendMessageW
    #define SendMessageCallback             SendMessageCallbackW
    #define SendMessageTimeout              SendMessageTimeoutW
    #define SendNotifyMessage               SendNotifyMessageW
    #define SetClassLong                    SetClassLongW
    #define SetClassLongPtr                 SetClassLongPtrW
    #define SetDlgItemText                  SetDlgItemTextW
    #define SetProp                         SetPropW
    #define SetUserObjectInformation        SetUserObjectInformationW
    #define SetWindowLong                   SetWindowLongW
    #define SetWindowLongPtr                SetWindowLongPtrW
    #define SetWindowText                   SetWindowTextW
    #define SetWindowsHook                  SetWindowsHookW
    #define SetWindowsHookEx                SetWindowsHookExW
    #define SystemParametersInfo            SystemParametersInfoW
    #define TabbedTextOut                   TabbedTextOutW
    #define TranslateAccelerator            TranslateAcceleratorW
    #define UnregisterClass                 UnregisterClassW
    #define VkKeyScan                       VkKeyScanW
    #define WinHelp                         WinHelpW
    #define wsprintf                        wsprintfW
    #define wvsprintf                       wvsprintfW
    #ifdef _WINGDI_
        #define ChangeDisplaySettings       ChangeDisplaySettingsW
        #define ChangeDisplaySettingsEx     ChangeDisplaySettingsExW
        #define CreateDesktop               CreateDesktopW
        #define CreateDesktopEx             CreateDesktopExW
        #define EnumDisplaySettings         EnumDisplaySettingsW
    #endif
    #if (WINVER >= 0x0400)
        #define DrawState                   DrawStateW
        #define DrawTextEx                  DrawTextExW
        #define FindWindowEx                FindWindowExW
        #define GetClassInfoEx              GetClassInfoExW
        #define GetMenuItemInfo             GetMenuItemInfoW
        #define InsertMenuItem              InsertMenuItemW
        #define LoadImage                   LoadImageW
        #define MapVirtualKeyEx             MapVirtualKeyExW
        #define MessageBoxIndirect          MessageBoxIndirectW
        #define RegisterClassEx             RegisterClassExW
        #define SetMenuItemInfo             SetMenuItemInfoW
        #define VkKeyScanEx                 VkKeyScanExW
    #endif
    #if (WINVER >= 0x0400) && defined(_WIN32_WINNT)
        #define BroadcastSystemMessage      BroadcastSystemMessageW
    #endif
    #if (WINVER >= 0x0500)
        #define GetAltTabInfo               GetAltTabInfoW
        #define GetMonitorInfo              GetMonitorInfoW
        #define GetWindowModuleFileName     GetWindowModuleFileNameW
        #define RealGetWindowClass          RealGetWindowClassW
        #define RegisterDeviceNotification  RegisterDeviceNotificationW
        #ifdef _WINGDI_
            #define EnumDisplayDevices      EnumDisplayDevicesW
            #define EnumDisplaySettingsEx   EnumDisplaySettingsExW
        #endif
    #endif
    #if (_WIN32_WINNT >= 0x0501)
        #define BroadcastSystemMessageEx    BroadcastSystemMessageExW
        #define GetRawInputDeviceInfo       GetRawInputDeviceInfoW
    #endif
    #if (_WIN32_WINNT >= 0x0600)
        #define GetIconInfoEx               GetIconInfoExW
    #endif
#else
    #define AppendMenu                      AppendMenuA
    #define CallMsgFilter                   CallMsgFilterA
    #define CallWindowProc                  CallWindowProcA
    #define ChangeMenu                      ChangeMenuA
    #define CharLower                       CharLowerA
    #define CharLowerBuff                   CharLowerBuffA
    #define CharNext                        CharNextA
    #define CharPrev                        CharPrevA
    #define CharToOem                       CharToOemA
    #define CharToOemBuff                   CharToOemBuffA
    #define CharUpper                       CharUpperA
    #define CharUpperBuff                   CharUpperBuffA
    #define CopyAcceleratorTable            CopyAcceleratorTableA
    #define CreateAcceleratorTable          CreateAcceleratorTableA
    #define CreateDialog                    CreateDialogA
    #define CreateDialogIndirect            CreateDialogIndirectA
    #define CreateDialogIndirectParam       CreateDialogIndirectParamA
    #define CreateDialogParam               CreateDialogParamA
    #define CreateMDIWindow                 CreateMDIWindowA
    #define CreateWindow                    CreateWindowA
    #define CreateWindowEx                  CreateWindowExA
    #define CreateWindowStation             CreateWindowStationA
    #define DefDlgProc                      DefDlgProcA
    #define DefFrameProc                    DefFrameProcA
    #define DefMDIChildProc                 DefMDIChildProcA
    #define DefWindowProc                   DefWindowProcA
    #define DialogBox                       DialogBoxA
    #define DialogBoxIndirect               DialogBoxIndirectA
    #define DialogBoxIndirectParam          DialogBoxIndirectParamA
    #define DialogBoxParam                  DialogBoxParamA
    #define DlgDirList                      DlgDirListA
    #define DlgDirListComboBox              DlgDirListComboBoxA
    #define DlgDirSelectComboBoxEx          DlgDirSelectComboBoxExA
    #define DlgDirSelectEx                  DlgDirSelectExA
    #define DispatchMessage                 DispatchMessageA
    #define DrawText                        DrawTextA
    #define EnumDesktops                    EnumDesktopsA
    #define EnumProps                       EnumPropsA
    #define EnumPropsEx                     EnumPropsExA
    #define EnumWindowStations              EnumWindowStationsA
    #define FindWindow                      FindWindowA
    #define GetClassInfo                    GetClassInfoA
    #define GetClassLong                    GetClassLongA
    #define GetClassLongPtr                 GetClassLongPtrA
    #define GetClassName                    GetClassNameA
    #define GetClipboardFormatName          GetClipboardFormatNameA
    #define GetDlgItemText                  GetDlgItemTextA
    #define GetKeyNameText                  GetKeyNameTextA
    #define GetKeyboardLayoutName           GetKeyboardLayoutNameA
    #define GetMenuString                   GetMenuStringA
    #define GetMessage                      GetMessageA
    #define GetProp                         GetPropA
    #define GetTabbedTextExtent             GetTabbedTextExtentA
    #define GetUserObjectInformation        GetUserObjectInformationA
    #define GetWindowLong                   GetWindowLongA
    #define GetWindowLongPtr                GetWindowLongPtrA
    #define GetWindowText                   GetWindowTextA
    #define GetWindowTextLength             GetWindowTextLengthA
    #define GrayString                      GrayStringA
    #define InsertMenu                      InsertMenuA
    #define IsCharAlpha                     IsCharAlphaA
    #define IsCharAlphaNumeric              IsCharAlphaNumericA
    #define IsCharLower                     IsCharLowerA
    #define IsCharUpper                     IsCharUpperA
    #define IsDialogMessage                 IsDialogMessageA
    #define LoadAccelerators                LoadAcceleratorsA
    #define LoadBitmap                      LoadBitmapA
    #define LoadCursor                      LoadCursorA
    #define LoadCursorFromFile              LoadCursorFromFileA
    #define LoadIcon                        LoadIconA
    #define LoadImage                       LoadImageA
    #define LoadKeyboardLayout              LoadKeyboardLayoutA
    #define LoadMenu                        LoadMenuA
    #define LoadMenuIndirect                LoadMenuIndirectA
    #define LoadString                      LoadStringA
    #define MapVirtualKey                   MapVirtualKeyA
    #define MessageBox                      MessageBoxA
    #define MessageBoxEx                    MessageBoxExA
    #define ModifyMenu                      ModifyMenuA
    #define OemToChar                       OemToCharA
    #define OemToCharBuff                   OemToCharBuffA
    #define OpenDesktop                     OpenDesktopA
    #define OpenWindowStation               OpenWindowStationA
    #define PeekMessage                     PeekMessageA
    #define PostAppMessage                  PostAppMessageA
    #define PostMessage                     PostMessageA
    #define PostThreadMessage               PostThreadMessageA
    #define PrivateExtractIcons             PrivateExtractIconsA
    #define RegisterClass                   RegisterClassA
    #define RegisterClipboardFormat         RegisterClipboardFormatA
    #define RegisterWindowMessage           RegisterWindowMessageA
    #define RemoveProp                      RemovePropA
    #define SendDlgItemMessage              SendDlgItemMessageA
    #define SendMessage                     SendMessageA
    #define SendMessageCallback             SendMessageCallbackA
    #define SendMessageTimeout              SendMessageTimeoutA
    #define SendNotifyMessage               SendNotifyMessageA
    #define SetClassLong                    SetClassLongA
    #define SetClassLongPtr                 SetClassLongPtrA
    #define SetDlgItemText                  SetDlgItemTextA
    #define SetProp                         SetPropA
    #define SetUserObjectInformation        SetUserObjectInformationA
    #define SetWindowLong                   SetWindowLongA
    #define SetWindowLongPtr                SetWindowLongPtrA
    #define SetWindowText                   SetWindowTextA
    #define SetWindowsHook                  SetWindowsHookA
    #define SetWindowsHookEx                SetWindowsHookExA
    #define SystemParametersInfo            SystemParametersInfoA
    #define TabbedTextOut                   TabbedTextOutA
    #define TranslateAccelerator            TranslateAcceleratorA
    #define UnregisterClass                 UnregisterClassA
    #define VkKeyScan                       VkKeyScanA
    #define WinHelp                         WinHelpA
    #define wsprintf                        wsprintfA
    #define wvsprintf                       wvsprintfA
    #ifdef _WINGDI_
        #define ChangeDisplaySettings       ChangeDisplaySettingsA
        #define ChangeDisplaySettingsEx     ChangeDisplaySettingsExA
        #define CreateDesktop               CreateDesktopA
        #define CreateDesktopEx             CreateDesktopExA
        #define EnumDisplaySettings         EnumDisplaySettingsA
    #endif
    #if (WINVER >= 0x0400)
        #define DrawState                   DrawStateA
        #define DrawTextEx                  DrawTextExA
        #define FindWindowEx                FindWindowExA
        #define GetClassInfoEx              GetClassInfoExA
        #define GetMenuItemInfo             GetMenuItemInfoA
        #define InsertMenuItem              InsertMenuItemA
        #define RegisterClassEx             RegisterClassExA
        #define MapVirtualKeyEx             MapVirtualKeyExA
        #define MessageBoxIndirect          MessageBoxIndirectA
        #define SetMenuItemInfo             SetMenuItemInfoA
        #define VkKeyScanEx                 VkKeyScanExA
    #endif
    #if (WINVER >= 0x0400) && defined(_WIN32_WINNT)
        #define BroadcastSystemMessage      BroadcastSystemMessageA
    #endif
    #if (WINVER >= 0x0500)
        #define GetAltTabInfo               GetAltTabInfoA
        #define GetMonitorInfo              GetMonitorInfoA
        #define GetWindowModuleFileName     GetWindowModuleFileNameA
        #define RealGetWindowClass          RealGetWindowClassA
        #define RegisterDeviceNotification  RegisterDeviceNotificationA
        #ifdef _WINGDI_
            #define EnumDisplayDevices      EnumDisplayDevicesA
            #define EnumDisplaySettingsEx   EnumDisplaySettingsExA
        #endif
    #endif
    #if (_WIN32_WINNT >= 0x0501)
        #define BroadcastSystemMessageEx    BroadcastSystemMessageExA
        #define GetRawInputDeviceInfo       GetRawInputDeviceInfoA
    #endif
    #if (_WIN32_WINNT >= 0x0600)
        #define GetIconInfoEx               GetIconInfoExA
    #endif
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* _WINUSER_ */
