' ------------------------------------------------------------------------
'
'    WINCEAPI.TXT -- WinCE API Declarations for Visual Basic
' 
'              Copyright (C) 1994-98 Microsoft Corporation
'
'  This file is required for the Visual Basic for Windows CE version of the APILoader.
'
'
'  This file contains only the Const and Declare statements for  WinCE APIs.
'
'  You have a royalty-free right to use, modify, reproduce and distribute
'  this file (and/or any modified version) in any way you find useful,
'  provided that you agree that Microsoft has no warranty, obligation or
'  liability for its contents.  Refer to the Microsoft Windows Programmer's
'  Reference for further information.
'
' ------------------------------------------------------------------------

' Type definitions for Windows' basic types.
Const ANYSIZE_ARRAY = 1


Const DELETE = &H10000
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000


Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_ALL = &H1F0000

Const SPECIFIC_RIGHTS_ALL = &HFFFF



Const SID_REVISION = (1)                         '  Current revision level
Const SID_MAX_SUB_AUTHORITIES = (15)
Const SID_RECOMMENDED_SUB_AUTHORITIES = (1)    ' Will change to around 6 in a future release.

Const SidTypeUser = 1
Const SidTypeGroup = 2
Const SidTypeDomain = 3
Const SidTypeAlias = 4
Const SidTypeWellKnownGroup = 5
Const SidTypeDeletedAccount = 6
Const SidTypeInvalid = 7
Const SidTypeUnknown = 8



' ///////////////////////////////////////////////////////////////////////////
'                                                                          //
'  Universal well-known SIDs                                               //
'                                                                          //
'      Null SID              S-1-0-0                                       //
'      World                 S-1-1-0                                       //
'      Local                 S-1-2-0                                       //
'      Creator Owner ID      S-1-3-0                                       //
'      Creator Group ID      S-1-3-1                                       //
'                                                                          //
'      (Non-unique IDs)      S-1-4                                         //
'                                                                          //
' ///////////////////////////////////////////////////////////////////////////
Const SECURITY_NULL_RID = &H0
Const SECURITY_WORLD_RID = &H0
Const SECURITY_LOCAL_RID = &H0

Const SECURITY_CREATOR_OWNER_RID = &H0
Const SECURITY_CREATOR_GROUP_RID = &H1


' ///////////////////////////////////////////////////////////////////////////
'                                                                          //
'  NT well-known SIDs                                                      //
'                                                                          //
'      NT Authority          S-1-5                                         //
'      Dialup                S-1-5-1                                       //
'                                                                          //
'      Network               S-1-5-2                                       //
'      Batch                 S-1-5-3                                       //
'      Interactive           S-1-5-4                                       //
'      Service               S-1-5-6                                       //
'      AnonymousLogon        S-1-5-7       (aka null logon session)        //
'                                                                          //
'      (Logon IDs)           S-1-5-5-X-Y                                   //
'                                                                          //
'      (NT non-unique IDs)   S-1-5-0x15-...                                //
'                                                                          //
'      (Built-in domain)     s-1-5-0x20                                    //
'                                                                          //
' ///////////////////////////////////////////////////////////////////////////

Const SECURITY_DIALUP_RID = &H1
Const SECURITY_NETWORK_RID = &H2
Const SECURITY_BATCH_RID = &H3
Const SECURITY_INTERACTIVE_RID = &H4
Const SECURITY_SERVICE_RID = &H6
Const SECURITY_ANONYMOUS_LOGON_RID = &H7
Const SECURITY_LOGON_IDS_RID = &H5
Const SECURITY_LOCAL_SYSTEM_RID = &H12
Const SECURITY_NT_NON_UNIQUE = &H15
Const SECURITY_BUILTIN_DOMAIN_RID = &H20


' ///////////////////////////////////////////////////////////////////////////
'                                                                          //
'  well-known domain relative sub-authority values (RIDs)...               //
'                                                                          //
' ///////////////////////////////////////////////////////////////////////////

Const DOMAIN_USER_RID_ADMIN = &H1F4
Const DOMAIN_USER_RID_GUEST = &H1F5

Const DOMAIN_GROUP_RID_ADMINS = &H200
Const DOMAIN_GROUP_RID_USERS = &H201
Const DOMAIN_GROUP_RID_GUESTS = &H202


Const DOMAIN_ALIAS_RID_ADMINS = &H220
Const DOMAIN_ALIAS_RID_USERS = &H221
Const DOMAIN_ALIAS_RID_GUESTS = &H222
Const DOMAIN_ALIAS_RID_POWER_USERS = &H223
Const DOMAIN_ALIAS_RID_ACCOUNT_OPS = &H224
Const DOMAIN_ALIAS_RID_SYSTEM_OPS = &H225
Const DOMAIN_ALIAS_RID_PRINT_OPS = &H226
Const DOMAIN_ALIAS_RID_BACKUP_OPS = &H227
Const DOMAIN_ALIAS_RID_REPLICATOR = &H228


'  Allocate the System Luid.  The first 1000 LUIDs are reserved.
'  Use #999 here0x3E7 = 999)

'  end_ntifs

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                           User and Group related SID attributes     //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

'  Group attributes

Const SE_GROUP_MANDATORY = &H1
Const SE_GROUP_ENABLED_BY_DEFAULT = &H2
Const SE_GROUP_ENABLED = &H4
Const SE_GROUP_OWNER = &H8
Const SE_GROUP_LOGON_ID = &HC0000000

'  User attributes

'  (None yet defined.)

' ----------------
'  Kernel Section
' ----------------

Const FILE_BEGIN = 0
Const FILE_CURRENT = 1
Const FILE_END = 2

Const FILE_FLAG_WRITE_THROUGH = &H80000000
Const FILE_FLAG_OVERLAPPED = &H40000000
Const FILE_FLAG_NO_BUFFERING = &H20000000
Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
Const FILE_FLAG_DELETE_ON_CLOSE = &H4000000
Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Const FILE_FLAG_POSIX_SEMANTICS = &H1000000

Const CREATE_NEW = 1
Const CREATE_ALWAYS = 2
Const OPEN_EXISTING = 3
Const OPEN_ALWAYS = 4
Const TRUNCATE_EXISTING = 5

' Define the dwOpenMode values for CreateNamedPipe
Const PIPE_ACCESS_INBOUND = &H1
Const PIPE_ACCESS_OUTBOUND = &H2
Const PIPE_ACCESS_DUPLEX = &H3

' Define the Named Pipe End flags for GetNamedPipeInfo
Const PIPE_CLIENT_END = &H0
Const PIPE_SERVER_END = &H1

' Define the dwPipeMode values for CreateNamedPipe
Const PIPE_WAIT = &H0
Const PIPE_NOWAIT = &H1
Const PIPE_READMODE_BYTE = &H0
Const PIPE_READMODE_MESSAGE = &H2
Const PIPE_TYPE_BYTE = &H0
Const PIPE_TYPE_MESSAGE = &H4

' Define the well known values for CreateNamedPipe nMaxInstances
Const PIPE_UNLIMITED_INSTANCES = 255

' Define the Security Quality of Service bits to be passed
'  into CreateFile
Const SECURITY_CONTEXT_TRACKING = &H40000
Const SECURITY_EFFECTIVE_ONLY = &H80000

Const SECURITY_SQOS_PRESENT = &H100000
Const SECURITY_VALID_SQOS_FLAGS = &H1F0000

'  Serial provider type.
Const SP_SERIALCOMM = &H1&

'  Provider SubTypes
Const PST_UNSPECIFIED = &H0&
Const PST_RS232 = &H1&
Const PST_PARALLELPORT = &H2&
Const PST_RS422 = &H3&
Const PST_RS423 = &H4&
Const PST_RS449 = &H5&
Const PST_FAX = &H21&
Const PST_SCANNER = &H22&
Const PST_NETWORK_BRIDGE = &H100&
Const PST_LAT = &H101&
Const PST_TCPIP_TELNET = &H102&
Const PST_X25 = &H103&

'  Provider capabilities flags.
Const PCF_DTRDSR = &H1&
Const PCF_RTSCTS = &H2&
Const PCF_RLSD = &H4&
Const PCF_PARITY_CHECK = &H8&
Const PCF_XONXOFF = &H10&
Const PCF_SETXCHAR = &H20&
Const PCF_TOTALTIMEOUTS = &H40&
Const PCF_INTTIMEOUTS = &H80&
Const PCF_SPECIALCHARS = &H100&
Const PCF_16BITMODE = &H200&

'  Comm provider settable parameters.
Const SP_PARITY = &H1&
Const SP_BAUD = &H2&
Const SP_DATABITS = &H4&
Const SP_STOPBITS = &H8&
Const SP_HANDSHAKING = &H10&
Const SP_PARITY_CHECK = &H20&
Const SP_RLSD = &H40&

'  Settable baud rates in the provider.
Const BAUD_075 = &H1&
Const BAUD_110 = &H2&
Const BAUD_134_5 = &H4&
Const BAUD_150 = &H8&
Const BAUD_300 = &H10&
Const BAUD_600 = &H20&
Const BAUD_1200 = &H40&
Const BAUD_1800 = &H80&
Const BAUD_2400 = &H100&
Const BAUD_4800 = &H200&
Const BAUD_7200 = &H400&
Const BAUD_9600 = &H800&
Const BAUD_14400 = &H1000&
Const BAUD_19200 = &H2000&
Const BAUD_38400 = &H4000&
Const BAUD_56K = &H8000&
Const BAUD_128K = &H10000
Const BAUD_115200 = &H20000
Const BAUD_57600 = &H40000
Const BAUD_USER = &H10000000

'  Settable Data Bits
Const DATABITS_5 = &H1&
Const DATABITS_6 = &H2&
Const DATABITS_7 = &H4&
Const DATABITS_8 = &H8&
Const DATABITS_16 = &H10&
Const DATABITS_16X = &H20&

'  Settable Stop and Parity bits.
Const STOPBITS_10 = &H1&
Const STOPBITS_15 = &H2&
Const STOPBITS_20 = &H4&
Const PARITY_NONE = &H100&
Const PARITY_ODD = &H200&
Const PARITY_EVEN = &H400&
Const PARITY_MARK = &H800&
Const PARITY_SPACE = &H1000&

' The eight actual COMSTAT bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.
' FieldName     Bit #     Description
' ---------     -----     ---------------------------
' fCtsHold        1       Tx waiting for CTS signal
' fDsrHold        2       Tx waiting for DSR signal
' fRlsdHold       3       Tx waiting for RLSD signal
' fXoffHold       4       Tx waiting, XOFF char rec'd
' fXoffSent       5       Tx waiting, XOFF char sent
' fEof            6       EOF character sent
' fTxim           7       character waiting for Tx
' fReserved       8       reserved (25 bits)

'  DTR Control Flow Values.
Const DTR_CONTROL_DISABLE = &H0
Const DTR_CONTROL_ENABLE = &H1
Const DTR_CONTROL_HANDSHAKE = &H2

'  RTS Control Flow Values
Const RTS_CONTROL_DISABLE = &H0
Const RTS_CONTROL_ENABLE = &H1
Const RTS_CONTROL_HANDSHAKE = &H2
Const RTS_CONTROL_TOGGLE = &H3

' The fourteen actual DCB bit-sized data fields within the four bytes of fBitFields can be manipulated by bitwise logical And/Or operations.
' FieldName             Bit #     Description
' -----------------     -----     ------------------------------
' fBinary                 1       binary mode, no EOF check
' fParity                 2       enable parity checking
' fOutxCtsFlow            3       CTS output flow control
' fOutxDsrFlow            4       DSR output flow control
' fDtrControl             5       DTR flow control type (2 bits)
' fDsrSensitivity         7       DSR sensitivity
' fTXContinueOnXoff       8       XOFF continues Tx
' fOutX                   9       XON/XOFF out flow control
' fInX                   10       XON/XOFF in flow control
' fErrorChar             11       enable error replacement
' fNull                  12       enable null stripping
' fRtsControl            13       RTS flow control (2 bits)
' fAbortOnError          15       abort reads/writes on error
' fDummy2                16       reserved 


' Global Memory Flags
Const GMEM_FIXED = &H0
Const GMEM_MOVEABLE = &H2
Const GMEM_NOCOMPACT = &H10
Const GMEM_NODISCARD = &H20
Const GMEM_ZEROINIT = &H40
Const GMEM_MODIFY = &H80
Const GMEM_DISCARDABLE = &H100
Const GMEM_NOT_BANKED = &H1000
Const GMEM_SHARE = &H2000
Const GMEM_DDESHARE = &H2000
Const GMEM_NOTIFY = &H4000
Const GMEM_LOWER = GMEM_NOT_BANKED
Const GMEM_VALID_FLAGS = &H7F72
Const GMEM_INVALID_HANDLE = &H8000

Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)

' Flags returned by GlobalFlags (in addition to GMEM_DISCARDABLE)
Const GMEM_DISCARDED = &H4000
Const GMEM_LOCKCOUNT = &HFF

' Local Memory Flags
Const LMEM_FIXED = &H0
Const LMEM_MOVEABLE = &H2
Const LMEM_NOCOMPACT = &H10
Const LMEM_NODISCARD = &H20
Const LMEM_ZEROINIT = &H40
Const LMEM_MODIFY = &H80
Const LMEM_DISCARDABLE = &HF00
Const LMEM_VALID_FLAGS = &HF72
Const LMEM_INVALID_HANDLE = &H8000

Const LHND = (LMEM_MOVEABLE + LMEM_ZEROINIT)
Const LPTR = (LMEM_FIXED + LMEM_ZEROINIT)

Const NONZEROLHND = (LMEM_MOVEABLE)
Const NONZEROLPTR = (LMEM_FIXED)

' Flags returned by LocalFlags (in addition to LMEM_DISCARDABLE)
Const LMEM_DISCARDED = &H4000
Const LMEM_LOCKCOUNT = &HFF

'  dwCreationFlag values

Const DEBUG_PROCESS = &H1
Const DEBUG_ONLY_THIS_PROCESS = &H2

Const CREATE_SUSPENDED = &H4

Const DETACHED_PROCESS = &H8

Const CREATE_NEW_CONSOLE = &H10

Const NORMAL_PRIORITY_CLASS = &H20
Const IDLE_PRIORITY_CLASS = &H40
Const HIGH_PRIORITY_CLASS = &H80
Const REALTIME_PRIORITY_CLASS = &H100

Const CREATE_NEW_PROCESS_GROUP = &H200

Const CREATE_NO_WINDOW = &H8000000

Const PROFILE_USER = &H10000000
Const PROFILE_KERNEL = &H20000000
Const PROFILE_SERVER = &H40000000

Const MAXLONG = &H7FFFFFFF
Const THREAD_BASE_PRIORITY_MIN = -2
Const THREAD_BASE_PRIORITY_MAX = 2
Const THREAD_BASE_PRIORITY_LOWRT = 15
Const THREAD_BASE_PRIORITY_IDLE = -15
Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Const THREAD_PRIORITY_NORMAL = 0
Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Const THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)

Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE

' ++ BUILD Version: 0093     Increment this if a change has global effects

' Copyright (c) 1990-1995  Microsoft Corporation

' Module Name:

'     winnt.h

' Abstract:

'     This module defines the 32-Bit Windows types and constants that are
'     defined by NT, but exposed through the Win32 API.

' Revision History:
Const APPLICATION_ERROR_MASK = &H20000000
Const ERROR_SEVERITY_SUCCESS = &H0
Const ERROR_SEVERITY_INFORMATIONAL = &H40000000
Const ERROR_SEVERITY_WARNING = &H80000000
Const ERROR_SEVERITY_ERROR = &HC0000000


Const MINCHAR = &H80
Const MAXCHAR = &H7F
Const MINSHORT = &H8000
Const MAXSHORT = &H7FFF
Const MINLONG = &H80000000
Const MAXByte = &HFF
Const MAXWORD = &HFFFF
Const MAXDWORD = &HFFFF
'
'  Calculate the byte offset of a field in a structure of type type.
'  *  Language IDs.
'  *
'  *  The following two combinations of primary language ID and
'  *  sublanguage ID have special semantics:
'  *
'  *    Primary Language ID   Sublanguage ID      Result
'  *    -------------------   ---------------     ------------------------
'  *    LANG_NEUTRAL          SUBLANG_NEUTRAL     Language neutral
'  *    LANG_NEUTRAL          SUBLANG_DEFAULT     User default language
'  *    LANG_NEUTRAL          SUBLANG_SYS_DEFAULT System default language
'  */
'
'  *  Primary language IDs.
'  */
Const LANG_NEUTRAL = &H0

Const LANG_BULGARIAN = &H2
Const LANG_CHINESE = &H4
Const LANG_CROATIAN = &H1A
Const LANG_CZECH = &H5
Const LANG_DANISH = &H6
Const LANG_DUTCH = &H13
Const LANG_ENGLISH = &H9
Const LANG_FINNISH = &HB
Const LANG_FRENCH = &HC
Const LANG_GERMAN = &H7
Const LANG_GREEK = &H8
Const LANG_HUNGARIAN = &HE
Const LANG_ICELANDIC = &HF
Const LANG_ITALIAN = &H10
Const LANG_JAPANESE = &H11
Const LANG_KOREAN = &H12
Const LANG_NORWEGIAN = &H14
Const LANG_POLISH = &H15
Const LANG_PORTUGUESE = &H16
Const LANG_ROMANIAN = &H18
Const LANG_RUSSIAN = &H19
Const LANG_SLOVAK = &H1B
Const LANG_SLOVENIAN = &H24
Const LANG_SPANISH = &HA
Const LANG_SWEDISH = &H1D
Const LANG_TURKISH = &H1F

'
'  *  Sublanguage IDs.
'  *
'  *  The name immediately following SUBLANG_ dictates which primary
'  *  language ID that sublanguage ID can be combined with to form a
'  *  valid language ID.
'  */
Const SUBLANG_NEUTRAL = &H0                       '  language neutral
Const SUBLANG_DEFAULT = &H1                       '  user default
Const SUBLANG_SYS_DEFAULT = &H2                   '  system default

Const SUBLANG_CHINESE_TRADITIONAL = &H1           '  Chinese (Taiwan)
Const SUBLANG_CHINESE_SIMPLIFIED = &H2            '  Chinese (PR China)
Const SUBLANG_CHINESE_HONGKONG = &H3              '  Chinese (Hong Kong)
Const SUBLANG_CHINESE_SINGAPORE = &H4             '  Chinese (Singapore)
Const SUBLANG_DUTCH = &H1                         '  Dutch
Const SUBLANG_DUTCH_BELGIAN = &H2                 '  Dutch (Belgian)
Const SUBLANG_ENGLISH_US = &H1                    '  English (USA)
Const SUBLANG_ENGLISH_UK = &H2                    '  English (UK)
Const SUBLANG_ENGLISH_AUS = &H3                   '  English (Australian)
Const SUBLANG_ENGLISH_CAN = &H4                   '  English (Canadian)
Const SUBLANG_ENGLISH_NZ = &H5                    '  English (New Zealand)
Const SUBLANG_ENGLISH_EIRE = &H6                  '  English (Irish)
Const SUBLANG_FRENCH = &H1                        '  French
Const SUBLANG_FRENCH_BELGIAN = &H2                '  French (Belgian)
Const SUBLANG_FRENCH_CANADIAN = &H3               '  French (Canadian)
Const SUBLANG_FRENCH_SWISS = &H4                  '  French (Swiss)
Const SUBLANG_GERMAN = &H1                        '  German
Const SUBLANG_GERMAN_SWISS = &H2                  '  German (Swiss)
Const SUBLANG_GERMAN_AUSTRIAN = &H3               '  German (Austrian)
Const SUBLANG_ITALIAN = &H1                       '  Italian
Const SUBLANG_ITALIAN_SWISS = &H2                 '  Italian (Swiss)
Const SUBLANG_NORWEGIAN_BOKMAL = &H1              '  Norwegian (Bokma
Const SUBLANG_NORWEGIAN_NYNORSK = &H2             '  Norwegian (Nynorsk)
Const SUBLANG_PORTUGUESE = &H2                    '  Portuguese
Const SUBLANG_PORTUGUESE_BRAZILIAN = &H1          '  Portuguese (Brazilian)
Const SUBLANG_SPANISH = &H1                       '  Spanish (Castilian)
Const SUBLANG_SPANISH_MEXICAN = &H2               '  Spanish (Mexican)
Const SUBLANG_SPANISH_MODERN = &H3                '  Spanish (Modern)

'
'  *  Sorting IDs.
'  *
'  */
Const SORT_DEFAULT = &H0                          '  sorting default

Const SORT_JAPANESE_XJIS = &H0                    '  Japanese0xJIS order
Const SORT_JAPANESE_UNICODE = &H1                 '  Japanese Unicode order

Const SORT_CHINESE_BIG5 = &H0                     '  Chinese BIG5 order
Const SORT_CHINESE_UNICODE = &H1                  '  Chinese Unicode order

Const SORT_KOREAN_KSC = &H0                       '  Korean KSC order
Const SORT_KOREAN_UNICODE = &H1                   '  Korean Unicode order

'  The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
'  devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
'  constants *MUST* always be in sync.
'  The values are redefined in devioctl.h because they must be available to
'  both DOS and NT.
'

Const FILE_READ_DATA = (&H1)                     '  file pipe
Const FILE_LIST_DIRECTORY = (&H1)                '  directory

Const FILE_WRITE_DATA = (&H2)                    '  file pipe
Const FILE_ADD_FILE = (&H2)                      '  directory

Const FILE_APPEND_DATA = (&H4)                   '  file
Const FILE_ADD_SUBDIRECTORY = (&H4)              '  directory
Const FILE_CREATE_PIPE_INSTANCE = (&H4)          '  named pipe

Const FILE_READ_EA = (&H8)                       '  file directory
Const FILE_READ_PROPERTIES = FILE_READ_EA

Const FILE_WRITE_EA = (&H10)                     '  file directory
Const FILE_WRITE_PROPERTIES = FILE_WRITE_EA

Const FILE_EXECUTE = (&H20)                      '  file
Const FILE_TRAVERSE = (&H20)                     '  directory

Const FILE_DELETE_CHILD = (&H40)                 '  directory

Const FILE_READ_ATTRIBUTES = (&H80)              '  all

Const FILE_WRITE_ATTRIBUTES = (&H100)            '  all

Const FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF)

Const FILE_GENERIC_READ = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or SYNCHRONIZE)


Const FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE)


Const FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE)

Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_ATTRIBUTE_COMPRESSED = &H800
Const FILE_NOTIFY_CHANGE_FILE_NAME = &H1
Const FILE_NOTIFY_CHANGE_DIR_NAME = &H2
Const FILE_NOTIFY_CHANGE_ATTRIBUTES = &H4
Const FILE_NOTIFY_CHANGE_SIZE = &H8
Const FILE_NOTIFY_CHANGE_LAST_WRITE = &H10
Const FILE_NOTIFY_CHANGE_SECURITY = &H100
Const MAILSLOT_NO_MESSAGE = (-1)
Const MAILSLOT_WAIT_FOREVER = (-1)
Const FILE_CASE_SENSITIVE_SEARCH = &H1
Const FILE_CASE_PRESERVED_NAMES = &H2
Const FILE_UNICODE_ON_DISK = &H4
Const FILE_PERSISTENT_ACLS = &H8
Const FILE_FILE_COMPRESSION = &H10
Const FILE_VOLUME_IS_COMPRESSED = &H8000
Const IO_COMPLETION_MODIFY_STATE = &H2
Const IO_COMPLETION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H3)
Const DUPLICATE_CLOSE_SOURCE = &H1
Const DUPLICATE_SAME_ACCESS = &H2


' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                              ACCESS TYPES                           //
'                                                                     //
' //////////////////////////////////////////////////////////////////////


'  begin_ntddk begin_nthal begin_ntifs
'
'   The following are masks for the predefined standard access types

'  AccessSystemAcl access type

Const ACCESS_SYSTEM_SECURITY = &H1000000

'  MaximumAllowed access type

Const MAXIMUM_ALLOWED = &H2000000

'   These are the generic rights.

Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const GENERIC_EXECUTE = &H20000000
Const GENERIC_ALL = &H10000000


' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                          ACL  and  ACE                              //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

'
'   Define an ACL and the ACE format.  The structure of an ACL header
'   followed by one or more ACEs.  Pictorally the structure of an ACL header
'   is as follows:
'
'   The current AclRevision is defined to be ACL_REVISION.
'
'   AclSize is the size, in bytes, allocated for the ACL.  This includes
'   the ACL header, ACES, and remaining free space in the buffer.
'
'   AceCount is the number of ACES in the ACL.
'

'  begin_ntddk begin_ntifs
'  This is the *current* ACL revision

Const ACL_REVISION = (2)

'  This is the history of ACL revisions.  Add a new one whenever
'  ACL_REVISION is updated

Const ACL_REVISION1 = (1)
Const ACL_REVISION2 = (2)

'
'   The following are the predefined ace types that go into the AceType
'   field of an Ace header.

Const ACCESS_ALLOWED_ACE_TYPE = &H0
Const ACCESS_DENIED_ACE_TYPE = &H1
Const SYSTEM_AUDIT_ACE_TYPE = &H2
Const SYSTEM_ALARM_ACE_TYPE = &H3

'   The following are the inherit flags that go into the AceFlags field
'   of an Ace header.

Const OBJECT_INHERIT_ACE = &H1
Const CONTAINER_INHERIT_ACE = &H2
Const NO_PROPAGATE_INHERIT_ACE = &H4
Const INHERIT_ONLY_ACE = &H8
Const VALID_INHERIT_FLAGS = &HF


'   The following are the currently defined ACE flags that go into the
'   AceFlags field of an ACE header.  Each ACE type has its own set of
'   AceFlags.
'
'   SUCCESSFUL_ACCESS_ACE_FLAG - used only with system audit and alarm ACE
'   types to indicate that a message is generated for successful accesses.
'
'   FAILED_ACCESS_ACE_FLAG - used only with system audit and alarm ACE types
'   to indicate that a message is generated for failed accesses.

'   SYSTEM_AUDIT and SYSTEM_ALARM AceFlags
'
'   These control the signaling of audit and alarms for success or failure.

Const SUCCESSFUL_ACCESS_ACE_FLAG = &H40
Const FAILED_ACCESS_ACE_FLAG = &H80


'   The following declarations are used for setting and querying information
'   about and ACL.  First are the various information classes available to
'   the user.
'

Const AclRevisionInformation = 1
Const AclSizeInformation = 2
'

' //////////////////////////////////////////////////////////////////////
'                                                                     //
'                              SECURITY_DESCRIPTOR                    //
'                                                                     //
' //////////////////////////////////////////////////////////////////////
'
'   Define the Security Descriptor and related data types.
'   This is an opaque data structure.
'

'  begin_ntddk begin_ntifs
'
'  Current security descriptor revision value
'

Const SECURITY_DESCRIPTOR_REVISION = (1)
Const SECURITY_DESCRIPTOR_REVISION1 = (1)

'  end_ntddk

'
'  Minimum length, in bytes, needed to build a security descriptor
'  (NOTE: This must manually be kept consistent with the)
'  (sizeof(SECURITY_DESCRIPTOR)                         )
'

Const SECURITY_DESCRIPTOR_MIN_LENGTH = (20)



Const SE_OWNER_DEFAULTED = &H1
Const SE_GROUP_DEFAULTED = &H2
Const SE_DACL_PRESENT = &H4
Const SE_DACL_DEFAULTED = &H8
Const SE_SACL_PRESENT = &H10
Const SE_SACL_DEFAULTED = &H20
Const SE_SELF_RELATIVE = &H8000

'
'   Where:
'
'       SE_OWNER_DEFAULTED - This boolean flag, when set, indicates that the
'           SID pointed to by the Owner field was provided by a
'           defaulting mechanism rather than explicitly provided by the
'           original provider of the security descriptor.  This may
'           affect the treatment of the SID with respect to inheritence
'           of an owner.
'
'       SE_GROUP_DEFAULTED - This boolean flag, when set, indicates that the
'           SID in the Group field was provided by a defaulting mechanism
'           rather than explicitly provided by the original provider of
'           the security descriptor.  This may affect the treatment of
'           the SID with respect to inheritence of a primary group.
'
'       SE_DACL_PRESENT - This boolean flag, when set, indicates that the
'           security descriptor contains a discretionary ACL.  If this
'           flag is set and the Dacl field of the SECURITY_DESCRIPTOR is
'           null, then a null ACL is explicitly being specified.
'
'       SE_DACL_DEFAULTED - This boolean flag, when set, indicates that the
'           ACL pointed to by the Dacl field was provided by a defaulting
'           mechanism rather than explicitly provided by the original
'           provider of the security descriptor.  This may affect the
'           treatment of the ACL with respect to inheritence of an ACL.
'           This flag is ignored if the DaclPresent flag is not set.
'
'       SE_SACL_PRESENT - This boolean flag, when set,  indicates that the
'           security descriptor contains a system ACL pointed to by the
'           Sacl field.  If this flag is set and the Sacl field of the
'           SECURITY_DESCRIPTOR is null, then an empty (but present)
'           ACL is being specified.
'
'       SE_SACL_DEFAULTED - This boolean flag, when set, indicates that the
'           ACL pointed to by the Sacl field was provided by a defaulting
'           mechanism rather than explicitly provided by the original
'           provider of the security descriptor.  This may affect the
'           treatment of the ACL with respect to inheritence of an ACL.
'           This flag is ignored if the SaclPresent flag is not set.
'
'       SE_SELF_RELATIVE - This boolean flag, when set, indicates that the
'           security descriptor is in self-relative form.  In this form,
'           all fields of the security descriptor are contiguous in memory
'           and all pointer fields are expressed as offsets from the
'           beginning of the security descriptor.  This form is useful
'           for treating security descriptors as opaque data structures
'           for transmission in communication protocol or for storage on
'           secondary media.
'
'
'

'//////////////////////////////////////////////////////////////////////
'                                                                     //
'                NT Defined Privileges                                //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

Const SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
Const SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
Const SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
Const SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
Const SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
Const SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
Const SE_TCB_NAME = "SeTcbPrivilege"
Const SE_SECURITY_NAME = "SeSecurityPrivilege"
Const SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
Const SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
Const SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
Const SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
Const SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
Const SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
Const SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
Const SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
Const SE_BACKUP_NAME = "SeBackupPrivilege"
Const SE_RESTORE_NAME = "SeRestorePrivilege"
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const SE_DEBUG_NAME = "SeDebugPrivilege"
Const SE_AUDIT_NAME = "SeAuditPrivilege"
Const SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
Const SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
Const SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"


' //////////////////////////////////////////////////////////////////
'                                                                 //
'            Security Quality Of Service                          //
'                                                                 //
'                                                                 //
' //////////////////////////////////////////////////////////////////

'  begin_ntddk begin_nthal begin_ntifs
'
'  Impersonation Level
'
'  Impersonation level is represented by a pair of bits in Windows.
'  If a new impersonation level is added or lowest value is changed from
'  0 to something else, fix the Windows CreateFile call.
'

Const SecurityAnonymous = 1
Const SecurityIdentification = 2

'//////////////////////////////////////////////////////////////////////
'                                                                     //
'                Registry API Constants                                //
'                                                                     //
' //////////////////////////////////////////////////////////////////////

' Reg Data Types...
Const REG_NONE = 0                       ' No value type
Const REG_SZ = 1                         ' Unicode nul terminated string
Const REG_EXPAND_SZ = 2                  ' Unicode nul terminated string
Const REG_BINARY = 3                     ' Free form binary
Const REG_DWORD = 4                      ' 32-bit number
Const REG_DWORD_LITTLE_ENDIAN = 4        ' 32-bit number (same as REG_DWORD)
Const REG_DWORD_BIG_ENDIAN = 5           ' 32-bit number
Const REG_LINK = 6                       ' Symbolic Link (unicode)
Const REG_MULTI_SZ = 7                   ' Multiple Unicode strings
Const REG_RESOURCE_LIST = 8              ' Resource list in the resource map
Const REG_FULL_RESOURCE_DESCRIPTOR = 9   ' Resource list in the hardware description
Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Const REG_CREATED_NEW_KEY = &H1                      ' New Registry Key created
Const REG_OPENED_EXISTING_KEY = &H2                      ' Existing Key opened
Const REG_WHOLE_HIVE_VOLATILE = &H1                      ' Restore whole hive volatile
Const REG_REFRESH_HIVE = &H2                      ' Unwind changes to last flush
Const REG_NOTIFY_CHANGE_NAME = &H1                      ' Create or delete (child)
Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Const REG_NOTIFY_CHANGE_LAST_SET = &H4                      ' Time stamp
Const REG_NOTIFY_CHANGE_SECURITY = &H8
Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)
Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE)

' Reg Create Type Values...
Const REG_OPTION_RESERVED = 0           ' Parameter is reserved
Const REG_OPTION_NON_VOLATILE = 0       ' Key is preserved when system is rebooted
Const REG_OPTION_VOLATILE = 1           ' Key is not preserved when system is rebooted
Const REG_OPTION_CREATE_LINK = 2        ' Created key is a symbolic link
Const REG_OPTION_BACKUP_RESTORE = 4     ' open for backup or restore

' Reg Key Security Options
' Const READ_CONTROL = &H20000
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
'Const STANDARD_RIGHTS_READ = (READ_CONTROL)
'Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))

' end winnt.txt

' Debug APIs
Const EXCEPTION_DEBUG_EVENT = 1
Const CREATE_THREAD_DEBUG_EVENT = 2
Const CREATE_PROCESS_DEBUG_EVENT = 3
Const EXIT_THREAD_DEBUG_EVENT = 4
Const EXIT_PROCESS_DEBUG_EVENT = 5
Const LOAD_DLL_DEBUG_EVENT = 6
Const UNLOAD_DLL_DEBUG_EVENT = 7
Const OUTPUT_DEBUG_STRING_EVENT = 8
Const RIP_EVENT = 9

Const EXCEPTION_MAXIMUM_PARAMETERS = 15


' GetDriveType return values
Const DRIVE_REMOVABLE = 2
Const DRIVE_FIXED = 3
Const DRIVE_REMOTE = 4
Const DRIVE_CDROM = 5
Const DRIVE_RAMDISK = 6

Const FILE_TYPE_UNKNOWN = &H0
Const FILE_TYPE_DISK = &H1
Const FILE_TYPE_CHAR = &H2
Const FILE_TYPE_PIPE = &H3
Const FILE_TYPE_REMOTE = &H8000

Const STD_INPUT_HANDLE = -10&
Const STD_OUTPUT_HANDLE = -11&
Const STD_ERROR_HANDLE = -12&

Const NOPARITY = 0
Const ODDPARITY = 1
Const EVENPARITY = 2
Const MARKPARITY = 3
Const SPACEPARITY = 4

Const ONESTOPBIT = 0
Const ONE5STOPBITS = 1
Const TWOSTOPBITS = 2

Const IGNORE = 0 '  Ignore signal
Const INFINITE = &HFFFF      '  Infinite timeout

' Comm Baud Rate indices
Const CBR_110 = 110
Const CBR_300 = 300
Const CBR_600 = 600
Const CBR_1200 = 1200
Const CBR_2400 = 2400
Const CBR_4800 = 4800
Const CBR_9600 = 9600
Const CBR_14400 = 14400
Const CBR_19200 = 19200
Const CBR_38400 = 38400
Const CBR_56000 = 56000
Const CBR_57600 = 57600
Const CBR_115200 = 115200
Const CBR_128000 = 128000
Const CBR_256000 = 256000

' Error Flags
Const CE_RXOVER = &H1                '  Receive Queue overflow
Const CE_OVERRUN = &H2               '  Receive Overrun Error
Const CE_RXPARITY = &H4              '  Receive Parity Error
Const CE_FRAME = &H8                 '  Receive Framing error
Const CE_BREAK = &H10                '  Break Detected
Const CE_TXFULL = &H100              '  TX Queue is full
Const CE_PTO = &H200                 '  LPTx Timeout
Const CE_IOE = &H400                 '  LPTx I/O Error
Const CE_DNS = &H800                 '  LPTx Device not selected
Const CE_OOP = &H1000                '  LPTx Out-Of-Paper
Const CE_MODE = &H8000               '  Requested mode unsupported

Const IE_BADID = (-1)                '  Invalid or unsupported id
Const IE_OPEN = (-2)                 '  Device Already Open
Const IE_NOPEN = (-3)                '  Device Not Open
Const IE_MEMORY = (-4)               '  Unable to allocate queues
Const IE_DEFAULT = (-5)              '  Error in default parameters
Const IE_HARDWARE = (-10)            '  Hardware Not Present
Const IE_BYTESIZE = (-11)            '  Illegal Byte Size
Const IE_BAUDRATE = (-12)            '  Unsupported BaudRate

' Events
Const EV_RXCHAR = &H1                '  Any Character received
Const EV_RXFLAG = &H2                '  Received certain character
Const EV_TXEMPTY = &H4               '  Transmitt Queue Empty
Const EV_CTS = &H8                   '  CTS changed state
Const EV_DSR = &H10                  '  DSR changed state
Const EV_RLSD = &H20                 '  RLSD changed state
Const EV_BREAK = &H40                '  BREAK received
Const EV_ERR = &H80                  '  Line status error occurred
Const EV_RING = &H100                '  Ring signal detected
Const EV_PERR = &H200                '  Printer error occured
Const EV_RX80FULL = &H400            '  Receive buffer is 80 percent full
Const EV_EVENT1 = &H800              '  Provider specific event 1
Const EV_EVENT2 = &H1000             '  Provider specific event 2

' Escape Functions
Const SETXOFF = 1  '  Simulate XOFF received
Const SETXON = 2 '  Simulate XON received
Const SETRTS = 3 '  Set RTS high
Const CLRRTS = 4 '  Set RTS low
Const SETDTR = 5 '  Set DTR high
Const CLRDTR = 6 '  Set DTR low
Const RESETDEV = 7       '  Reset device if possible
Const SETBREAK = 8  'Set the device break line
Const CLRBREAK = 9 ' Clear the device break line

'  PURGE function flags.
Const PURGE_TXABORT = &H1     '  Kill the pending/current writes to the comm port.
Const PURGE_RXABORT = &H2     '  Kill the pending/current reads to the comm port.
Const PURGE_TXCLEAR = &H4     '  Kill the transmit queue if there.
Const PURGE_RXCLEAR = &H8     '  Kill the typeahead buffer if there.

Const LPTx = &H80        '  Set if ID is for LPT device

'  Modem Status Flags
Const MS_CTS_ON = &H10&
Const MS_DSR_ON = &H20&
Const MS_RING_ON = &H40&
Const MS_RLSD_ON = &H80&

' WaitSoundState() Constants
Const S_QUEUEEMPTY = 0
Const S_THRESHOLD = 1
Const S_ALLTHRESHOLD = 2

' Accent Modes
Const S_NORMAL = 0
Const S_LEGATO = 1
Const S_STACCATO = 2

' SetSoundNoise() Sources
Const S_PERIOD512 = 0    '  Freq = N/512 high pitch, less coarse hiss
Const S_PERIOD1024 = 1   '  Freq = N/1024
Const S_PERIOD2048 = 2   '  Freq = N/2048 low pitch, more coarse hiss
Const S_PERIODVOICE = 3  '  Source is frequency from voice channel (3)
Const S_WHITE512 = 4     '  Freq = N/512 high pitch, less coarse hiss
Const S_WHITE1024 = 5    '  Freq = N/1024
Const S_WHITE2048 = 6    '  Freq = N/2048 low pitch, more coarse hiss
Const S_WHITEVOICE = 7   '  Source is frequency from voice channel (3)

Const S_SERDVNA = (-1)   '  Device not available
Const S_SEROFM = (-2)    '  Out of memory
Const S_SERMACT = (-3)   '  Music active
Const S_SERQFUL = (-4)   '  Queue full
Const S_SERBDNT = (-5)   '  Invalid note
Const S_SERDLN = (-6)    '  Invalid note length
Const S_SERDCC = (-7)    '  Invalid note count
Const S_SERDTP = (-8)    '  Invalid tempo
Const S_SERDVL = (-9)    '  Invalid volume
Const S_SERDMD = (-10)   '  Invalid mode
Const S_SERDSH = (-11)   '  Invalid shape
Const S_SERDPT = (-12)   '  Invalid pitch
Const S_SERDFQ = (-13)   '  Invalid frequency
Const S_SERDDR = (-14)   '  Invalid duration
Const S_SERDSR = (-15)   '  Invalid source
Const S_SERDST = (-16)   '  Invalid state

Const NMPWAIT_WAIT_FOREVER = &HFFFF
Const NMPWAIT_NOWAIT = &H1
Const NMPWAIT_USE_DEFAULT_WAIT = &H0
Const FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMES
Const FS_CASE_SENSITIVE = FILE_CASE_SENSITIVE_SEARCH
Const FS_UNICODE_STORED_ON_DISK = FILE_UNICODE_ON_DISK
Const FS_PERSISTENT_ACLS = FILE_PERSISTENT_ACLS

Const SECTION_QUERY = &H1
Const SECTION_MAP_WRITE = &H2
Const SECTION_MAP_READ = &H4
Const SECTION_MAP_EXECUTE = &H8
Const SECTION_EXTEND_SIZE = &H10
Const SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SECTION_QUERY Or SECTION_MAP_WRITE Or SECTION_MAP_READ Or SECTION_MAP_EXECUTE Or SECTION_EXTEND_SIZE

Const FILE_MAP_COPY = SECTION_QUERY
Const FILE_MAP_WRITE = SECTION_MAP_WRITE
Const FILE_MAP_READ = SECTION_MAP_READ
Const FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS

' OpenFile() Flags
Const OF_READ = &H0
Const OF_WRITE = &H1
Const OF_READWRITE = &H2
Const OF_SHARE_COMPAT = &H0
Const OF_SHARE_EXCLUSIVE = &H10
Const OF_SHARE_DENY_WRITE = &H20
Const OF_SHARE_DENY_READ = &H30
Const OF_SHARE_DENY_NONE = &H40
Const OF_PARSE = &H100
Const OF_DELETE = &H200
Const OF_VERIFY = &H400
Const OF_CANCEL = &H800
Const OF_CREATE = &H1000
Const OF_PROMPT = &H2000
Const OF_EXIST = &H4000
Const OF_REOPEN = &H8000

Const OFS_MAXPATHNAME = 128
Const PROCESSOR_INTEL_386 = 386
Const PROCESSOR_INTEL_486 = 486
Const PROCESSOR_INTEL_PENTIUM = 586
Const PROCESSOR_MIPS_R4000 = 4000
Const PROCESSOR_ALPHA_21064 = 21064
Const PROCESSOR_ARCHITECTURE_INTEL = 0
Const PROCESSOR_ARCHITECTURE_MIPS = 1
Const PROCESSOR_ARCHITECTURE_ALPHA = 2
Const PROCESSOR_ARCHITECTURE_PPC = 3
Const PROCESSOR_ARCHITECTURE_UNKNOWN = &hFFFF

' Flags for DrawFrameControl
Const DFC_CAPTION = 1
Const DFC_MENU = 2
Const DFC_SCROLL = 3
Const DFC_BUTTON = 4
Const DFCS_CAPTIONCLOSE = &H0
Const DFCS_CAPTIONMIN = &H1
Const DFCS_CAPTIONMAX = &H2
Const DFCS_CAPTIONRESTORE = &H3
Const DFCS_CAPTIONHELP = &H4
Const DFCS_MENUARROW = &H0
Const DFCS_MENUCHECK = &H1
Const DFCS_MENUBULLET = &H2
Const DFCS_MENUARROWRIGHT = &H4
Const DFCS_SCROLLUP = &H0
Const DFCS_SCROLLDOWN = &H1
Const DFCS_SCROLLLEFT = &H2
Const DFCS_SCROLLRIGHT = &H3
Const DFCS_SCROLLCOMBOBOX = &H5
Const DFCS_SCROLLSIZEGRIP = &H8
Const DFCS_SCROLLSIZEGRIPRIGHT = &H10
Const DFCS_BUTTONCHECK = &H0
Const DFCS_BUTTONRADIOIMAGE = &H1
Const DFCS_BUTTONRADIOMASK = &H2
Const DFCS_BUTTONRADIO = &H4
Const DFCS_BUTTON3STATE = &H8
Const DFCS_BUTTONPUSH = &H10
Const DFCS_INACTIVE = &H100
Const DFCS_PUSHED = &H200
Const DFCS_CHECKED = &H400
Const DFCS_ADJUSTRECT = &H2000
Const DFCS_FLAT = &H4000
Const DFCS_MONO = &H8000

' Loader Routines
Declare Function GetModuleFileName Lib "Coredll" Alias "GetModuleFileNameW" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Declare Function GetModuleHandle Lib "Coredll" Alias "GetModuleHandleW" (ByVal lpModuleName As String) As Long
Declare Function GetCommandLine Lib "Coredll" Alias "GetCommandLineW" () As String
Declare Function LoadLibrary Lib "Coredll" Alias "LoadLibraryW" (ByVal lpLibFileName As String) As Long

Const DONT_RESOLVE_DLL_REFERENCES = &H1

Declare Function FreeLibrary Lib "Coredll" Alias "FreeLibrary" (ByVal hLibModule As Long) As Long
Declare Function ContinueDebugEvent Lib "Coredll" Alias "ContinueDebugEvent" (ByVal dwProcessId As Long, ByVal dwThreadId As Long, ByVal dwContinueStatus As Long) As Long
Declare Function DebugActiveProcess Lib "Coredll" Alias "DebugActiveProcess" (ByVal dwProcessId As Long) As Long


Declare Function ReleaseMutex Lib "Coredll" Alias "ReleaseMutex" (ByVal hMutex As Long) As Long
Declare Function WaitForSingleObject Lib "Coredll" Alias "WaitForSingleObject" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function WaitForMultipleObjects Lib "Coredll" Alias "WaitForMultipleObjects" (ByVal nCount As Long, lpHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long) As Long
Declare Sub Sleep Lib "Coredll" Alias "Sleep" (ByVal dwMilliseconds As Long)
Declare Sub OutputDebugString Lib "Coredll" Alias "OutputDebugStringw" (ByVal lpOutputString As String)

' GetTempFileName() Flags
'
Const TF_FORCEDRIVE = &H80

Declare Function SetHandleCount Lib "Coredll" Alias "SetHandleCount" (ByVal wNumber As Long) As Long

Const LOCKFILE_FAIL_IMMEDIATELY = &H1
Const LOCKFILE_EXCLUSIVE_LOCK = &H2


Declare Function GetFileSize Lib "Coredll" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Declare Function WriteFile Lib "Coredll" Alias "WriteFile" (ByVal hFile As Long, lpBuffer As String, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long
Declare Function ReadFile Lib "Coredll" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As String, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long
Declare Function FlushFileBuffers Lib "Coredll" Alias "FlushFileBuffers" (ByVal hFile As Long) As Long
Declare Function DeviceIoControl Lib "Coredll" Alias "DeviceIoControl" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As String, ByVal nInBufferSize As Long, lpOutBuffer As String, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Long) As Long
Declare Function SetEndOfFile Lib "Coredll" Alias "SetEndOfFile" (ByVal hFile As Long) As Long
Declare Function SetFilePointer Lib "Coredll" Alias "SetFilePointer" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Declare Function FindClose Lib "Coredll" Alias "FindClose" (ByVal hFindFile As Long) As Long
Declare Function CloseHandle Lib "Coredll" Alias "CloseHandle" (ByVal hObject As Long) As Long


Const LNOTIFY_OUTOFMEM = 0
Const LNOTIFY_MOVE = 1
Const LNOTIFY_DISCARD = 2

Declare Function LocalAlloc Lib "Coredll" Alias "LocalAlloc" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Declare Function LocalFree Lib "Coredll" Alias "LocalFree" (ByVal hMem As Long) As Long
Declare Function LocalReAlloc Lib "Coredll" Alias "LocalReAlloc" (ByVal hMem As Long, ByVal wBytes As Long, ByVal wFlags As Long) As Long
Declare Function LocalSize Lib "Coredll" Alias "LocalSize" (ByVal hMem As Long) As Long

Declare Function FlushInstructionCache Lib "Coredll" Alias "FlushInstructionCache" (ByVal hProcess As Long, lpBaseAddress As Long, ByVal dwSize As Long) As Long
Declare Function VirtualAlloc Lib "Coredll" Alias "VirtualAlloc" (lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Declare Function VirtualFree Lib "Coredll" Alias "VirtualFree" (lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Declare Function VirtualProtect Lib "Coredll" Alias "VirtualProtect" (lpAddress As Long, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Declare Function HeapCreate Lib "Coredll" Alias "HeapCreate" (ByVal flOptions As Long, ByVal dwInitialSize As Long, ByVal dwMaximumSize As Long) As Long
Declare Function HeapDestroy Lib "Coredll" Alias "HeapDestroy" (ByVal hHeap As Long) As Long
Declare Function HeapAlloc Lib "Coredll" Alias "HeapAlloc" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Declare Function HeapReAlloc Lib "Coredll" Alias "HeapReAlloc" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Long, ByVal dwBytes As Long) As Long
Declare Function HeapFree Lib "Coredll" Alias "HeapFree" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Long) As Long
Declare Function HeapSize Lib "Coredll" Alias "HeapSize" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Long) As Long
Declare Function GetProcessHeap Lib "Coredll" Alias "GetProcessHeap" () As Long
Declare Function OpenProcess Lib "Coredll" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function GetCurrentProcess Lib "Coredll" Alias "GetCurrentProcess" () As Long
Declare Function GetCurrentProcessId Lib "Coredll" Alias "GetCurrentProcessId" () As Long
Declare Function TerminateProcess Lib "Coredll" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Declare Function GetExitCodeProcess Lib "Coredll" Alias "GetExitCodeProcess" (ByVal hProcess As Long, lpExitCode As Long) As Long

Declare Function GetLastError Lib "Coredll" Alias "GetLastError" () As Long
Declare Sub SetLastError Lib "Coredll" Alias "SetLastError" (ByVal dwErrCode As Long)

Const SLE_ERROR = &H1
Const SLE_MINORERROR = &H2
Const SLE_WARNING = &H3

Const SEM_FAILCRITICALERRORS = &H1
Const SEM_NOGPFAULTERRORBOX = &H2
Const SEM_NOOPENFILEERRORBOX = &H8000


Declare Function ReadProcessMemory Lib "Coredll" Alias "ReadProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Long, lpBuffer As String, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function WriteProcessMemory Lib "Coredll" Alias "WriteProcessMemory" (ByVal hProcess As Long, lpBaseAddress As Long, lpBuffer As String, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function SetThreadContext Lib "Coredll" Alias "SetThreadContext" (ByVal hThread As Long, lpContext As CONTEXT) As Long
Declare Function SuspendThread Lib "Coredll" Alias "SuspendThread" (ByVal hThread As Long) As Long
Declare Function ResumeThread Lib "Coredll" Alias "ResumeThread" (ByVal hThread As Long) As Long

Declare Function FindResource Lib "Coredll" Alias "FindResourceW" (ByVal hInstance As Long, ByVal lpName As String, ByVal lpType As String) As Long
Declare Function LoadResource Lib "Coredll" Alias "LoadResource" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Declare Function LockResource Lib "Coredll" Alias "LockResource" (ByVal hResData As Long) As Long
Declare Function SizeofResource Lib "Coredll" Alias "SizeofResource" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long

' Predefined Resource Types
Const RT_CURSOR = 1&
Const RT_BITMAP = 2&
Const RT_ICON = 3&
Const RT_MENU = 4&
Const RT_DIALOG = 5&
Const RT_STRING = 6&
Const RT_FONTDIR = 7&
Const RT_FONT = 8&
Const RT_ACCELERATOR = 9&
Const RT_RCDATA = 10&


Declare Function GetTempPath Lib "Coredll" Alias "GetTempPathW" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Declare Function CreateDirectory Lib "Coredll" Alias "CreateDirectoryW" (ByVal lpPathName As String, lpSecurityAttributes As Long) As Long
Declare Function RemoveDirectory Lib "Coredll" Alias "RemoveDirectoryW" (ByVal lpPathName As String) As Long

Const DDD_RAW_TARGET_PATH = &H1
Const DDD_REMOVE_DEFINITION = &H2
Const DDD_EXACT_MATCH_ON_REMOVE = &H4

Const MAX_PATH = 260

Declare Function CreateFile Lib "Coredll" Alias "CreateFileW" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function SetFileAttributes Lib "Coredll" Alias "SetFileAttributesW" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Declare Function GetFileAttributes Lib "Coredll" Alias "GetFileAttributesW" (ByVal lpFileName As String) As Long
Declare Function DeleteFile Lib "Coredll" Alias "DeleteFileW" (ByVal lpFileName As String) As Long
Declare Function CopyFile Lib "Coredll" Alias "CopyFileW" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Declare Function MoveFile Lib "Coredll" Alias "MoveFileW" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long

Const MOVEFILE_REPLACE_EXISTING = &H1
Const MOVEFILE_COPY_ALLOWED = &H2
Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4

' Security APIs
Const TokenUser = 1
Const TokenGroups = 2
Const TokenPrivileges = 3
Const TokenOwner = 4
Const TokenPrimaryGroup = 5
Const TokenDefaultDacl = 6
Const TokenSource = 7
Const TokenType = 8
Const TokenImpersonationLevel = 9
Const TokenStatistics = 10

Declare Sub RaiseException Lib "Coredll" Alias "RaiseException" (ByVal dwExceptionCode As Long, ByVal dwExceptionFlags As Long, ByVal nNumberOfArguments As Long, lpArguments As Long)

Declare Function GetCurrentThread Lib "Coredll" Alias "GetCurrentThread" () As Long
Declare Function GetCurrentThreadId Lib "Coredll" Alias "GetCurrentThreadId" () As Long
Declare Function SetThreadPriority Lib "Coredll" Alias "SetThreadPriority" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Declare Function GetThreadPriority Lib "Coredll" Alias "GetThreadPriority" (ByVal hThread As Long) As Long
Declare Sub ExitThread Lib "Coredll" Alias "ExitThread" (ByVal dwExitCode As Long)
Declare Function TerminateThread Lib "Coredll" Alias "TerminateThread" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Declare Function GetExitCodeThread Lib "Coredll" Alias "GetExitCodeThread" (ByVal hThread As Long, lpExitCode As Long) As Long

' COMM declarations
Declare Function PurgeComm Lib "Coredll" Alias "PurgeComm" (ByVal hFile As Long, ByVal dwFlags As Long) As Long
Declare Function TransmitCommChar Lib "Coredll" Alias "TransmitCommChar" (ByVal nCid As Long, ByVal cChar As Byte) As Long
Declare Function SetCommBreak Lib "Coredll" Alias "SetCommBreak" (ByVal nCid As Long) As Long
Declare Function SetCommMask Lib "Coredll" Alias "SetCommMask" (ByVal hFile As Long, ByVal dwEvtMask As Long) As Long
Declare Function ClearCommBreak Lib "Coredll" Alias "ClearCommBreak" (ByVal nCid As Long) As Long
Declare Function ClearCommError Lib "Coredll" Alias "ClearCommError" (ByVal hFile As Long, lpErrors As Long, lpStat As Long) As Long
Declare Function SetupComm Lib "Coredll" Alias "SetupComm" (ByVal hFile As Long, ByVal dwInQueue As Long, ByVal dwOutQueue As Long) As Long
Declare Function EscapeCommFunction Lib "Coredll" Alias "EscapeCommFunction" (ByVal nCid As Long, ByVal nFunc As Long) As Long
Declare Function GetCommMask Lib "Coredll" Alias "GetCommMask" (ByVal hFile As Long, lpEvtMask As Long) As Long
Declare Function GetCommModemStatus Lib "Coredll" Alias "GetCommModemStatus" (ByVal hFile As Long, lpModemStat As Long) As Long
Declare Function WaitCommEvent Lib "Coredll" Alias "WaitCommEvent" (ByVal hFile As Long, lpEvtMask As Long, lpOverlapped As Long) As Long


' Routines to convert back and forth
' between system time and file time

Declare Function GetTickCount Lib "Coredll" Alias "GetTickCount" () As Long

Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200
Const FORMAT_MESSAGE_FROM_STRING = &H400
Const FORMAT_MESSAGE_FROM_HMODULE = &H800
Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000
Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF

Declare Function MapViewOfFile Lib "Coredll" Alias "MapViewOfFile" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
Declare Function FlushViewOfFile Lib "Coredll" Alias "FlushViewOfFile" (lpBaseAddress As Long, ByVal dwNumberOfBytesToFlush As Long) As Long
Declare Function UnmapViewOfFile Lib "Coredll" Alias "UnmapViewOfFile" (lpBaseAddress As Long) As Long


Const TLS_OUT_OF_INDEXES = &HFFFF

Declare Function TlsGetValue Lib "Coredll" Alias "TlsGetValue" (ByVal dwTlsIndex As Long) As Long
Declare Function TlsSetValue Lib "Coredll" Alias "TlsSetValue" (ByVal dwTlsIndex As Long, lpTlsValue As Long) As Long

' Stream IDs
Const BACKUP_DATA = &H1
Const BACKUP_EA_DATA = &H2
Const BACKUP_SECURITY_DATA = &H3
Const BACKUP_ALTERNATE_DATA = &H4
Const BACKUP_LINK = &H5

'   Stream Attributes
Const STREAM_MODIFIED_WHEN_READ = &H1
Const STREAM_CONTAINS_SECURITY = &H2

'  Dual Mode API below this line. Dual Mode Types also included.

Const STARTF_USESHOWWINDOW = &H1
Const STARTF_USESIZE = &H2
Const STARTF_USEPOSITION = &H4
Const STARTF_USECOUNTCHARS = &H8
Const STARTF_USEFILLATTRIBUTE = &H10
Const STARTF_RUNFULLSCREEN = &H20        '  ignored for non-x86 platforms
Const STARTF_FORCEONFEEDBACK = &H40
Const STARTF_FORCEOFFFEEDBACK = &H80
Const STARTF_USESTDHANDLES = &H100


Const SHUTDOWN_NORETRY = &H1

Declare Function CreateMutex Lib "Coredll" Alias "CreateMutexW" (lpMutexAttributes As Long, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Declare Function CreateEvent Lib "Coredll" Alias "CreateEventW" (lpEventAttributes As Long, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long
Declare Function CreateFileMapping Lib "Coredll" Alias "CreateFileMappingW" (ByVal hFile As Long, lpFileMappigAttributes As Long, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long

Declare Function IsBadReadPtr Lib "Coredll" Alias "IsBadReadPtr" (lp As Long, ByVal ucb As Long) As Long
Declare Function IsBadWritePtr Lib "Coredll" Alias "IsBadWritePtr" (lp As Long, ByVal ucb As Long) As Long

' Performance counter API's
Declare Function QueryPerformanceCounter Lib "Coredll" Alias "QueryPerformanceCounter" (lpPerformanceCount As Long) As Long
Declare Function QueryPerformanceFrequency Lib "Coredll" Alias "QueryPerformanceFrequency" (lpFrequency As Long) As Long

'  Abnormal termination codes
Const TC_NORMAL = 0
Const TC_HARDERR = 1
Const TC_GP_TRAP = 2
Const TC_SIGNAL = 3


' Procedure declarations, constant definitions, and macros
' for the NLS component

' String Length Maximums
Const MAX_LEADBYTES = 12  '  5 ranges, 2 bytes ea., 0 term.

' MBCS and Unicode Translation Flags.

Const MB_PRECOMPOSED = &H1         '  use precomposed chars
Const MB_COMPOSITE = &H2         '  use composite chars
Const MB_USEGLYPHCHARS = &H4         '  use glyph chars, not ctrl chars

Const WC_DEFAULTCHECK = &H100       '  check for default char
Const WC_COMPOSITECHECK = &H200       '  convert composite to precomposed
Const WC_DISCARDNS = &H10        '  discard non-spacing chars
Const WC_SEPCHARS = &H20        '  generate separate chars
Const WC_DEFAULTCHAR = &H40        '  replace w/ default char

' Character Type Flags.
Const CT_CTYPE1 = &H1         '  ctype 1 information
Const CT_CTYPE2 = &H2         '  ctype 2 information
Const CT_CTYPE3 = &H4         '  ctype 3 information

' CType 1 Flag Bits.
Const C1_UPPER = &H1     '  upper case
Const C1_LOWER = &H2     '  lower case
Const C1_DIGIT = &H4     '  decimal digits
Const C1_SPACE = &H8     '  spacing characters
Const C1_PUNCT = &H10    '  punctuation characters
Const C1_CNTRL = &H20    '  control characters
Const C1_BLANK = &H40    '  blank characters
Const C1_XDIGIT = &H80    '  other digits
Const C1_ALPHA = &H100   '  any letter

' CType 2 Flag Bits.

Const C2_LEFTTORIGHT = &H1     '  left to right
Const C2_RIGHTTOLEFT = &H2     '  right to left

Const C2_EUROPENUMBER = &H3     '  European number, digit
Const C2_EUROPESEPARATOR = &H4     '  European numeric separator
Const C2_EUROPETERMINATOR = &H5     '  European numeric terminator
Const C2_ARABICNUMBER = &H6     '  Arabic number
Const C2_COMMONSEPARATOR = &H7     '  common numeric separator

Const C2_BLOCKSEPARATOR = &H8     '  block separator
Const C2_SEGMENTSEPARATOR = &H9     '  segment separator
Const C2_WHITESPACE = &HA     '  white space
Const C2_OTHERNEUTRAL = &HB     '  other neutrals

Const C2_NOTAPPLICABLE = &H0     '  no implicit directionality

' CType 3 Flag Bits.
Const C3_NONSPACING = &H1     '  nonspacing character
Const C3_DIACRITIC = &H2     '  diacritic mark
Const C3_VOWELMARK = &H4     '  vowel mark
Const C3_SYMBOL = &H8     '  symbols

Const C3_NOTAPPLICABLE = &H0     '  ctype 3 is not applicable

' String Flags.
Const NORM_IGNORECASE = &H1         '  ignore case
Const NORM_IGNORENONSPACE = &H2         '  ignore nonspacing chars
Const NORM_IGNORESYMBOLS = &H4         '  ignore symbols

' Locale Independent Mapping Flags.
Const MAP_FOLDCZONE = &H10        '  fold compatibility zone chars
Const MAP_PRECOMPOSED = &H20        '  convert to precomposed chars
Const MAP_COMPOSITE = &H40        '  convert to composite chars
Const MAP_FOLDDIGITS = &H80        '  all digits to ASCII 0-9

' Locale Dependent Mapping Flags.
Const LCMAP_LOWERCASE = &H100       '  lower case letters
Const LCMAP_UPPERCASE = &H200       '  upper case letters
Const LCMAP_SORTKEY = &H400       '  WC sort key (normalize)
Const LCMAP_BYTEREV = &H800       '  byte reversal

' Sorting Flags.
Const SORT_STRINGSORT = &H1000      '  use string sort method

' Code Page Default Values.
Const CP_ACP = 0  '  default to ANSI code page
Const CP_OEMCP = 1  '  default to OEM  code page

' Country Codes.

Const CTRY_DEFAULT = 0

Const CTRY_AUSTRALIA = 61  '  Australia
Const CTRY_AUSTRIA = 43  '  Austria
Const CTRY_BELGIUM = 32  '  Belgium
Const CTRY_BRAZIL = 55  '  Brazil
Const CTRY_CANADA = 2  '  Canada
Const CTRY_DENMARK = 45  '  Denmark
Const CTRY_FINLAND = 358  '  Finland
Const CTRY_FRANCE = 33  '  France
Const CTRY_GERMANY = 49  '  Germany
Const CTRY_ICELAND = 354  '  Iceland
Const CTRY_IRELAND = 353  '  Ireland
Const CTRY_ITALY = 39  '  Italy
Const CTRY_JAPAN = 81  '  Japan
Const CTRY_MEXICO = 52  '  Mexico
Const CTRY_NETHERLANDS = 31  '  Netherlands
Const CTRY_NEW_ZEALAND = 64  '  New Zealand
Const CTRY_NORWAY = 47  '  Norway
Const CTRY_PORTUGAL = 351  '  Portugal
Const CTRY_PRCHINA = 86  '  PR China
Const CTRY_SOUTH_KOREA = 82  '  South Korea
Const CTRY_SPAIN = 34  '  Spain
Const CTRY_SWEDEN = 46  '  Sweden
Const CTRY_SWITZERLAND = 41  '  Switzerland
Const CTRY_TAIWAN = 886  '  Taiwan
Const CTRY_UNITED_KINGDOM = 44  '  United Kingdom
Const CTRY_UNITED_STATES = 1  '  United States

' Locale Types.
' These types are used for the GetLocaleInfoW NLS API routine.

' LOCALE_NOUSEROVERRIDE is also used in GetTimeFormatW and GetDateFormatW.
Const LOCALE_NOUSEROVERRIDE = &H80000000  '  do not use user overrides

Const LOCALE_ILANGUAGE = &H1         '  language id
Const LOCALE_SLANGUAGE = &H2         '  localized name of language
Const LOCALE_SENGLANGUAGE = &H1001      '  English name of language
Const LOCALE_SABBREVLANGNAME = &H3         '  abbreviated language name
Const LOCALE_SNATIVELANGNAME = &H4         '  native name of language
Const LOCALE_ICOUNTRY = &H5         '  country code
Const LOCALE_SCOUNTRY = &H6         '  localized name of country
Const LOCALE_SENGCOUNTRY = &H1002      '  English name of country
Const LOCALE_SABBREVCTRYNAME = &H7         '  abbreviated country name
Const LOCALE_SNATIVECTRYNAME = &H8         '  native name of country
Const LOCALE_IDEFAULTLANGUAGE = &H9         '  default language id
Const LOCALE_IDEFAULTCOUNTRY = &HA         '  default country code
Const LOCALE_IDEFAULTCODEPAGE = &HB         '  default code page

Const LOCALE_SLIST = &HC         '  list item separator
Const LOCALE_IMEASURE = &HD         '  0 = metric, 1 = US

Const LOCALE_SDECIMAL = &HE         '  decimal separator
Const LOCALE_STHOUSAND = &HF         '  thousand separator
Const LOCALE_SGROUPING = &H10        '  digit grouping
Const LOCALE_IDIGITS = &H11        '  number of fractional digits
Const LOCALE_ILZERO = &H12        '  leading zeros for decimal
Const LOCALE_SNATIVEDIGITS = &H13        '  native ascii 0-9

Const LOCALE_SCURRENCY = &H14        '  local monetary symbol
Const LOCALE_SINTLSYMBOL = &H15        '  intl monetary symbol
Const LOCALE_SMONDECIMALSEP = &H16        '  monetary decimal separator
Const LOCALE_SMONTHOUSANDSEP = &H17        '  monetary thousand separator
Const LOCALE_SMONGROUPING = &H18        '  monetary grouping
Const LOCALE_ICURRDIGITS = &H19        '  # local monetary digits
Const LOCALE_IINTLCURRDIGITS = &H1A        '  # intl monetary digits
Const LOCALE_ICURRENCY = &H1B        '  positive currency mode
Const LOCALE_INEGCURR = &H1C        '  negative currency mode

Const LOCALE_SDATE = &H1D        '  date separator
Const LOCALE_STIME = &H1E        '  time separator
Const LOCALE_SSHORTDATE = &H1F        '  short date format string
Const LOCALE_SLONGDATE = &H20        '  long date format string
Const LOCALE_STIMEFORMAT = &H1003      '  time format string
Const LOCALE_IDATE = &H21        '  short date format ordering
Const LOCALE_ILDATE = &H22        '  long date format ordering
Const LOCALE_ITIME = &H23        '  time format specifier
Const LOCALE_ICENTURY = &H24        '  century format specifier
Const LOCALE_ITLZERO = &H25        '  leading zeros in time field
Const LOCALE_IDAYLZERO = &H26        '  leading zeros in day field
Const LOCALE_IMONLZERO = &H27        '  leading zeros in month field
Const LOCALE_S1159 = &H28        '  AM designator
Const LOCALE_S2359 = &H29        '  PM designator

Const LOCALE_SDAYNAME1 = &H2A        '  long name for Monday
Const LOCALE_SDAYNAME2 = &H2B        '  long name for Tuesday
Const LOCALE_SDAYNAME3 = &H2C        '  long name for Wednesday
Const LOCALE_SDAYNAME4 = &H2D        '  long name for Thursday
Const LOCALE_SDAYNAME5 = &H2E        '  long name for Friday
Const LOCALE_SDAYNAME6 = &H2F        '  long name for Saturday
Const LOCALE_SDAYNAME7 = &H30        '  long name for Sunday
Const LOCALE_SABBREVDAYNAME1 = &H31        '  abbreviated name for Monday
Const LOCALE_SABBREVDAYNAME2 = &H32        '  abbreviated name for Tuesday
Const LOCALE_SABBREVDAYNAME3 = &H33        '  abbreviated name for Wednesday
Const LOCALE_SABBREVDAYNAME4 = &H34        '  abbreviated name for Thursday
Const LOCALE_SABBREVDAYNAME5 = &H35        '  abbreviated name for Friday
Const LOCALE_SABBREVDAYNAME6 = &H36        '  abbreviated name for Saturday
Const LOCALE_SABBREVDAYNAME7 = &H37        '  abbreviated name for Sunday
Const LOCALE_SMONTHNAME1 = &H38        '  long name for January
Const LOCALE_SMONTHNAME2 = &H39        '  long name for February
Const LOCALE_SMONTHNAME3 = &H3A        '  long name for March
Const LOCALE_SMONTHNAME4 = &H3B        '  long name for April
Const LOCALE_SMONTHNAME5 = &H3C        '  long name for May
Const LOCALE_SMONTHNAME6 = &H3D        '  long name for June
Const LOCALE_SMONTHNAME7 = &H3E        '  long name for July
Const LOCALE_SMONTHNAME8 = &H3F        '  long name for August
Const LOCALE_SMONTHNAME9 = &H40        '  long name for September
Const LOCALE_SMONTHNAME10 = &H41        '  long name for October
Const LOCALE_SMONTHNAME11 = &H42        '  long name for November
Const LOCALE_SMONTHNAME12 = &H43        '  long name for December
Const LOCALE_SABBREVMONTHNAME1 = &H44        '  abbreviated name for January
Const LOCALE_SABBREVMONTHNAME2 = &H45        '  abbreviated name for February
Const LOCALE_SABBREVMONTHNAME3 = &H46        '  abbreviated name for March
Const LOCALE_SABBREVMONTHNAME4 = &H47        '  abbreviated name for April
Const LOCALE_SABBREVMONTHNAME5 = &H48        '  abbreviated name for May
Const LOCALE_SABBREVMONTHNAME6 = &H49        '  abbreviated name for June
Const LOCALE_SABBREVMONTHNAME7 = &H4A        '  abbreviated name for July
Const LOCALE_SABBREVMONTHNAME8 = &H4B        '  abbreviated name for August
Const LOCALE_SABBREVMONTHNAME9 = &H4C        '  abbreviated name for September
Const LOCALE_SABBREVMONTHNAME10 = &H4D        '  abbreviated name for October
Const LOCALE_SABBREVMONTHNAME11 = &H4E        '  abbreviated name for November
Const LOCALE_SABBREVMONTHNAME12 = &H4F        '  abbreviated name for December
Const LOCALE_SABBREVMONTHNAME13 = &H100F

Const LOCALE_SPOSITIVESIGN = &H50        '  positive sign
Const LOCALE_SNEGATIVESIGN = &H51        '  negative sign
Const LOCALE_IPOSSIGNPOSN = &H52        '  positive sign position
Const LOCALE_INEGSIGNPOSN = &H53        '  negative sign position
Const LOCALE_IPOSSYMPRECEDES = &H54        '  mon sym precedes pos amt
Const LOCALE_IPOSSEPBYSPACE = &H55        '  mon sym sep by space from pos amt
Const LOCALE_INEGSYMPRECEDES = &H56        '  mon sym precedes neg amt
Const LOCALE_INEGSEPBYSPACE = &H57        '  mon sym sep by space from neg amt

' Time Flags for GetTimeFormatW.
Const TIME_NOMINUTESORSECONDS = &H1         '  do not use minutes or seconds
Const TIME_NOSECONDS = &H2         '  do not use seconds
Const TIME_NOTIMEMARKER = &H4         '  do not use time marker
Const TIME_FORCE24HOURFORMAT = &H8         '  always use 24 hour format

' Date Flags for GetDateFormatW.
Const DATE_SHORTDATE = &H1         '  use short date picture
Const DATE_LONGDATE = &H2         '  use long date picture


' Code Page Dependent APIs

Declare Function IsValidCodePage Lib "Coredll" Alias "IsValidCodePage" (ByVal CodePage As Long) As Long
Declare Function GetACP Lib "Coredll" Alias "GetACP" () As Long
Declare Function GetOEMCP Lib "Coredll" Alias "GetOEMCP" () As Long
Declare Function IsDBCSLeadByte Lib "Coredll" Alias "IsDBCSLeadByte" (ByVal bTestChar As Byte) As Long
Declare Function MultiByteToWideChar Lib "Coredll" Alias "MultiByteToWideChar" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "Coredll" Alias "WideCharToMultiByte" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

' Locale Dependent APIs

Declare Function CompareString Lib "Coredll" Alias "CompareStringW" (ByVal Locale As Long, ByVal dwCmpFlags As Long, ByVal lpString1 As String, ByVal cchCount1 As Long, ByVal lpString2 As String, ByVal cchCount2 As Long) As Long
Declare Function LCMapString Lib "Coredll" Alias "LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As Long
Declare Function GetLocaleInfo Lib "Coredll" Alias "GetLocaleInfoW" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Declare Function GetDateFormat Lib "Coredll" Alias "GetDateFormatW" (ByVal Locale As Long, ByVal dwFlags As Long, lpDate As Long, ByVal lpFormat As String, ByVal lpDateStr As String, ByVal cchDate As Long) As Long
Declare Function GetSystemDefaultLangID Lib "Coredll" Alias "GetSystemDefaultLangID" () As Integer
Declare Function GetUserDefaultLangID Lib "Coredll" Alias "GetUserDefaultLangID" () As Integer
Declare Function GetSystemDefaultLCID Lib "Coredll" Alias "GetSystemDefaultLCID" () As Long
Declare Function GetUserDefaultLCID Lib "Coredll" Alias "GetUserDefaultLCID" () As Long

' Locale Independent APIs

Declare Function FoldString Lib "Coredll" Alias "FoldStringW" (ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As Long

' *************************************************************************
' *                                                                         *
' * winnls.h -- NLS procedure declarations, constant definitions and macros *
' *                                                                         *
' * Copyright (c) 1991-1995, Microsoft Corp. All rights reserved.           *
' *                                                                         *
' **************************************************************************/

' *  Calendar Types.
'  *
'  *  These types are used for the GetALTCalendarInfoW NLS API routine.
'  */
Const MAX_DEFAULTCHAR = 2
Const CAL_ICALINTVALUE = &H1                     '  calendar type
Const CAL_SCALNAME = &H2                         '  native name of calendar
Const CAL_IYEAROFFSETRANGE = &H3                 '  starting years of eras
Const CAL_SERASTRING = &H4                       '  era name for IYearOffsetRanges
Const CAL_SSHORTDATE = &H5                       '  Integer date format string
Const CAL_SLONGDATE = &H6                        '  long date format string
Const CAL_SDAYNAME1 = &H7                        '  native name for Monday
Const CAL_SDAYNAME2 = &H8                        '  native name for Tuesday
Const CAL_SDAYNAME3 = &H9                        '  native name for Wednesday
Const CAL_SDAYNAME4 = &HA                        '  native name for Thursday
Const CAL_SDAYNAME5 = &HB                        '  native name for Friday
Const CAL_SDAYNAME6 = &HC                        '  native name for Saturday
Const CAL_SDAYNAME7 = &HD                        '  native name for Sunday
Const CAL_SABBREVDAYNAME1 = &HE                  '  abbreviated name for Monday
Const CAL_SABBREVDAYNAME2 = &HF                  '  abbreviated name for Tuesday
Const CAL_SABBREVDAYNAME3 = &H10                 '  abbreviated name for Wednesday
Const CAL_SABBREVDAYNAME4 = &H11                 '  abbreviated name for Thursday
Const CAL_SABBREVDAYNAME5 = &H12                 '  abbreviated name for Friday
Const CAL_SABBREVDAYNAME6 = &H13                 '  abbreviated name for Saturday
Const CAL_SABBREVDAYNAME7 = &H14                 '  abbreviated name for Sunday
Const CAL_SMONTHNAME1 = &H15                     '  native name for January
Const CAL_SMONTHNAME2 = &H16                     '  native name for February
Const CAL_SMONTHNAME3 = &H17                     '  native name for March
Const CAL_SMONTHNAME4 = &H18                     '  native name for April
Const CAL_SMONTHNAME5 = &H19                     '  native name for May
Const CAL_SMONTHNAME6 = &H1A                     '  native name for June
Const CAL_SMONTHNAME7 = &H1B                     '  native name for July
Const CAL_SMONTHNAME8 = &H1C                     '  native name for August
Const CAL_SMONTHNAME9 = &H1D                     '  native name for September
Const CAL_SMONTHNAME10 = &H1E                    '  native name for October
Const CAL_SMONTHNAME11 = &H1F                    '  native name for November
Const CAL_SMONTHNAME12 = &H20                    '  native name for December
Const CAL_SMONTHNAME13 = &H21                    '  native name for 13th month (if any)
Const CAL_SABBREVMONTHNAME1 = &H22               '  abbreviated name for January
Const CAL_SABBREVMONTHNAME2 = &H23               '  abbreviated name for February
Const CAL_SABBREVMONTHNAME3 = &H24               '  abbreviated name for March
Const CAL_SABBREVMONTHNAME4 = &H25               '  abbreviated name for April
Const CAL_SABBREVMONTHNAME5 = &H26               '  abbreviated name for May
Const CAL_SABBREVMONTHNAME6 = &H27               '  abbreviated name for June
Const CAL_SABBREVMONTHNAME7 = &H28               '  abbreviated name for July
Const CAL_SABBREVMONTHNAME8 = &H29               '  abbreviated name for August
Const CAL_SABBREVMONTHNAME9 = &H2A               '  abbreviated name for September
Const CAL_SABBREVMONTHNAME10 = &H2B              '  abbreviated name for October
Const CAL_SABBREVMONTHNAME11 = &H2C              '  abbreviated name for November
Const CAL_SABBREVMONTHNAME12 = &H2D              '  abbreviated name for December
Const CAL_SABBREVMONTHNAME13 = &H2E              '  abbreviated name for 13th month (if any)

'
'  *  Calendar Enumeration Value.
'  */
Const ENUM_ALL_CALENDARS = &HFFFF                '  enumerate all calendars
'
'  *  Calendar ID Values.
'  */
Const CAL_GREGORIAN = 1                 '  Gregorian (localized) calendar
Const CAL_GREGORIAN_US = 2              '  Gregorian (U.S.) calendar
Const CAL_JAPAN = 3                     '  Japanese Emperor Era calendar
Const CAL_TAIWAN = 4                    '  Taiwan Region Era calendar
Const CAL_KOREA = 5                     '  Korean Tangun Era calendar

' *************************************************************************** Typedefs
' *
' * Define all types for the NLS component here.
' \***************************************************************************/
'
'  *  CP Info.
'  */


Declare Function EnumTimeFormats Lib "Coredll" Alias "EnumTimeFormatsW" (ByVal lpTimeFmtEnumProc As Long, ByVal Locale As Long, ByVal dwFlags As Long) As Long
Declare Function IsValidLocale Lib "Coredll" Alias "IsValidLocale" (ByVal Locale As Long, ByVal dwFlags As Long) As Long
Declare Function ConvertDefaultLocale Lib "Coredll" Alias "ConvertDefaultLocale" (ByVal Locale As Long) As Long
Declare Function EnumSystemLocales Lib "Coredll" Alias "EnumSystemLocalesW" (ByVal lpLocaleEnumProc As Long, ByVal dwFlags As Long) As Long
Declare Function EnumSystemCodePages Lib "Coredll" Alias "EnumSystemCodePagesW" (ByVal lpCodePageEnumProc As Long, ByVal dwFlags As Long) As Long

' The following section contains the Public data structures, data types,
' and procedures exported by the NT console subsystem.

'  ControlKeyState flags
Const RIGHT_ALT_PRESSED = &H1     '  the right alt key is pressed.
Const LEFT_ALT_PRESSED = &H2     '  the left alt key is pressed.
Const RIGHT_CTRL_PRESSED = &H4     '  the right ctrl key is pressed.
Const LEFT_CTRL_PRESSED = &H8     '  the left ctrl key is pressed.
Const SHIFT_PRESSED = &H10    '  the shift key is pressed.
Const NUMLOCK_ON = &H20    '  the numlock light is on.
Const SCROLLLOCK_ON = &H40    '  the scrolllock light is on.
Const CAPSLOCK_ON = &H80    '  the capslock light is on.
Const ENHANCED_KEY = &H100   '  the key is enhanced.

'  ButtonState flags
Const FROM_LEFT_1ST_BUTTON_PRESSED = &H1
Const RIGHTMOST_BUTTON_PRESSED = &H2
Const FROM_LEFT_2ND_BUTTON_PRESSED = &H4
Const FROM_LEFT_3RD_BUTTON_PRESSED = &H8
Const FROM_LEFT_4TH_BUTTON_PRESSED = &H10

'  EventFlags
Const MOUSE_MOVED = &H1
Const DOUBLE_CLICK = &H2

'   EventType flags:
Const KEY_EVENT = &H1     '  Event contains key event record
Const mouse_eventC = &H2     '  Event contains mouse event record
Const WINDOW_BUFFER_SIZE_EVENT = &H4     '  Event contains window change event record
Const MENU_EVENT = &H8     '  Event contains menu event record
Const FOCUS_EVENT = &H10    '  event contains focus change

'  Attributes flags:
Const FOREGROUND_BLUE = &H1     '  text color contains blue.
Const FOREGROUND_GREEN = &H2     '  text color contains green.
Const FOREGROUND_RED = &H4     '  text color contains red.
Const FOREGROUND_INTENSITY = &H8     '  text color is intensified.
Const BACKGROUND_BLUE = &H10    '  background color contains blue.
Const BACKGROUND_GREEN = &H20    '  background color contains green.
Const BACKGROUND_RED = &H40    '  background color contains red.
Const BACKGROUND_INTENSITY = &H80    '  background color is intensified.


Const CTRL_C_EVENT = 0
Const CTRL_BREAK_EVENT = 1
Const CTRL_CLOSE_EVENT = 2
'  3 is reserved!
'  4 is reserved!
Const CTRL_LOGOFF_EVENT = 5
Const CTRL_SHUTDOWN_EVENT = 6

' Input Mode flags:
Const ENABLE_PROCESSED_INPUT = &H1
Const ENABLE_LINE_INPUT = &H2
Const ENABLE_ECHO_INPUT = &H4
Const ENABLE_WINDOW_INPUT = &H8
Const ENABLE_MOUSE_INPUT = &H10

' Output Mode flags:
Const ENABLE_PROCESSED_OUTPUT = &H1
Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2



' -------------
'  GDI Section
' -------------

' Binary raster ops
Const R2_BLACK = 1       '   0
Const R2_NOTMERGEPEN = 2 '  DPon
Const R2_MASKNOTPEN = 3  '  DPna
Const R2_NOTCOPYPEN = 4  '  PN
Const R2_MASKPENNOT = 5  '  PDna
Const R2_NOT = 6 '  Dn
Const R2_XORPEN = 7      '  DPx
Const R2_NOTMASKPEN = 8  '  DPan
Const R2_MASKPEN = 9     '  DPa
Const R2_NOTXORPEN = 10  '  DPxn
Const R2_NOP = 11        '  D
Const R2_MERGENOTPEN = 12        '  DPno
Const R2_COPYPEN = 13    '  P
Const R2_MERGEPENNOT = 14        '  PDno
Const R2_MERGEPEN = 15   '  DPo
Const R2_WHITE = 16      '   1
Const R2_LAST = 16

'  Ternary raster operations
Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Const SRCPAINT = &HEE0086        ' (DWORD) dest = source OR dest
Const SRCAND = &H8800C6  ' (DWORD) dest = source AND dest
Const SRCINVERT = &H660046       ' (DWORD) dest = source XOR dest
Const SRCERASE = &H440328        ' (DWORD) dest = source AND (NOT dest )
Const NOTSRCCOPY = &H330008      ' (DWORD) dest = (NOT source)
Const NOTSRCERASE = &H1100A6     ' (DWORD) dest = (NOT src) AND (NOT dest)
Const MERGECOPY = &HC000CA       ' (DWORD) dest = (source AND pattern)
Const MERGEPAINT = &HBB0226      ' (DWORD) dest = (NOT source) OR dest
Const PATCOPY = &HF00021 ' (DWORD) dest = pattern
Const PATPAINT = &HFB0A09        ' (DWORD) dest = DPSnoo
Const PATINVERT = &H5A0049       ' (DWORD) dest = pattern XOR dest
Const DSTINVERT = &H550009       ' (DWORD) dest = (NOT dest)
Const BLACKNESS = &H42 ' (DWORD) dest = BLACK
Const WHITENESS = &HFF0062       ' (DWORD) dest = WHITE

Const GDI_ERROR = &HFFFF
Const HGDI_ERROR = &HFFFF

' Region Flags
Const ERRORAPI = 0
Const NULLREGION = 1
Const SIMPLEREGION = 2
Const COMPLEXREGION = 3

' CombineRgn() Styles
Const RGN_AND = 1
Const RGN_OR = 2
Const RGN_XOR = 3
Const RGN_DIFF = 4
Const RGN_COPY = 5
Const RGN_MIN = RGN_AND
Const RGN_MAX = RGN_COPY

' StretchBlt() Modes
Const BLACKONWHITE = 1
Const WHITEONBLACK = 2
Const COLORONCOLOR = 3
Const HALFTONE = 4
Const MAXSTRETCHBLTMODE = 4

' PolyFill() Modes
Const ALTERNATE = 1
Const WINDING = 2
Const POLYFILL_LAST = 2

' Text Alignment Options
Const TA_NOUPDATECP = 0
Const TA_UPDATECP = 1

Const TA_LEFT = 0
Const TA_RIGHT = 2
Const TA_CENTER = 6

Const TA_TOP = 0
Const TA_BOTTOM = 8
Const TA_BASELINE = 24
Const TA_MASK = (TA_BASELINE + TA_CENTER + TA_UPDATECP)

Const VTA_BASELINE = TA_BASELINE
Const VTA_LEFT = TA_BOTTOM
Const VTA_RIGHT = TA_TOP
Const VTA_CENTER = TA_CENTER
Const VTA_BOTTOM = TA_RIGHT
Const VTA_TOP = TA_LEFT

Const ETO_GRAYED = 1
Const ETO_OPAQUE = 2
Const ETO_CLIPPED = 4

Const ASPECT_FILTERING = &H1

Const DCB_RESET = &H1
Const DCB_ACCUMULATE = &H2
Const DCB_DIRTY = DCB_ACCUMULATE
Const DCB_SET = (DCB_RESET Or DCB_ACCUMULATE)
Const DCB_ENABLE = &H4
Const DCB_DISABLE = &H8

' Metafile Functions
Const META_SETBKCOLOR = &H201
Const META_SETBKMODE = &H102
Const META_SETMAPMODE = &H103
Const META_SETROP2 = &H104
Const META_SETRELABS = &H105
Const META_SETPOLYFILLMODE = &H106
Const META_SETSTRETCHBLTMODE = &H107
Const META_SETTEXTCHAREXTRA = &H108
Const META_SETTEXTCOLOR = &H209
Const META_SETTEXTJUSTIFICATION = &H20A
Const META_SETWINDOWORG = &H20B
Const META_SETWINDOWEXT = &H20C
Const META_SETVIEWPORTORG = &H20D
Const META_SETVIEWPORTEXT = &H20E
Const META_OFFSETWINDOWORG = &H20F
Const META_SCALEWINDOWEXT = &H410
Const META_OFFSETVIEWPORTORG = &H211
Const META_SCALEVIEWPORTEXT = &H412
Const META_LINETO = &H213
Const META_MOVETO = &H214
Const META_EXCLUDECLIPRECT = &H415
Const META_INTERSECTCLIPRECT = &H416
Const META_ARC = &H817
Const META_ELLIPSE = &H418
Const META_FLOODFILL = &H419
Const META_PIE = &H81A
Const META_RECTANGLE = &H41B
Const META_ROUNDRECT = &H61C
Const META_PATBLT = &H61D
Const META_SAVEDC = &H1E
Const META_SETPIXEL = &H41F
Const META_OFFSETCLIPRGN = &H220
Const META_TEXTOUT = &H521
Const META_BITBLT = &H922
Const META_STRETCHBLT = &HB23
Const META_POLYGON = &H324
Const META_POLYLINE = &H325
Const META_ESCAPE = &H626
Const META_RESTOREDC = &H127
Const META_FILLREGION = &H228
Const META_FRAMEREGION = &H429
Const META_INVERTREGION = &H12A
Const META_PAINTREGION = &H12B
Const META_SELECTCLIPREGION = &H12C
Const META_SELECTOBJECT = &H12D
Const META_SETTEXTALIGN = &H12E
Const META_CHORD = &H830
Const META_SETMAPPERFLAGS = &H231
Const META_EXTTEXTOUT = &HA32
Const META_SETDIBTODEV = &HD33
Const META_SELECTPALETTE = &H234
Const META_REALIZEPALETTE = &H35
Const META_ANIMATEPALETTE = &H436
Const META_SETPALENTRIES = &H37
Const META_POLYPOLYGON = &H538
Const META_RESIZEPALETTE = &H139
Const META_DIBBITBLT = &H940
Const META_DIBSTRETCHBLT = &HB41
Const META_DIBCREATEPATTERNBRUSH = &H142
Const META_STRETCHDIB = &HF43
Const META_EXTFLOODFILL = &H548
Const META_DELETEOBJECT = &H1F0
Const META_CREATEPALETTE = &HF7
Const META_CREATEPATTERNBRUSH = &H1F9
Const META_CREATEPENINDIRECT = &H2FA
Const META_CREATEFONTINDIRECT = &H2FB
Const META_CREATEBRUSHINDIRECT = &H2FC
Const META_CREATEREGION = &H6FF


' GDI Escapes
Const NEWFRAME = 1
Const AbortDocC = 2
Const NEXTBAND = 3
Const SETCOLORTABLE = 4
Const GETCOLORTABLE = 5
Const FLUSHOUTPUT = 6
Const DRAFTMODE = 7
Const QUERYESCSUPPORT = 8
Const SETABORTPROC = 9
Const StartDocC = 10
Const EndDocC = 11
Const GETPHYSPAGESIZE = 12
Const GETPRINTINGOFFSET = 13
Const GETSCALINGFACTOR = 14
Const MFCOMMENT = 15
Const GETPENWIDTH = 16
Const SETCOPYCOUNT = 17
Const SELECTPAPERSOURCE = 18
Const DEVICEDATA = 19
Const PASSTHROUGH = 19
Const GETTECHNOLGY = 20
Const GETTECHNOLOGY = 20
Const SETLINECAP = 21
Const SETLINEJOIN = 22
Const SetMiterLimitC = 23
Const BANDINFO = 24
Const DRAWPATTERNRECT = 25
Const GETVECTORPENSIZE = 26
Const GETVECTORBRUSHSIZE = 27
Const ENABLEDUPLEX = 28
Const GETSETPAPERBINS = 29
Const GETSETPRINTORIENT = 30
Const ENUMPAPERBINS = 31
Const SETDIBSCALING = 32
Const EPSPRINTING = 33
Const ENUMPAPERMETRICS = 34
Const GETSETPAPERMETRICS = 35
Const POSTSCRIPT_DATA = 37
Const POSTSCRIPT_IGNORE = 38
Const MOUSETRAILS = 39
Const GETDEVICEUNITS = 42

Const GETEXTENDEDTEXTMETRICS = 256
Const GETEXTENTTABLE = 257
Const GETPAIRKERNTABLE = 258
Const GETTRACKKERNTABLE = 259
Const ExtTextOutC = 512
Const GETFACENAME = 513
Const DOWNLOADFACE = 514
Const ENABLERELATIVEWIDTHS = 768
Const ENABLEPAIRKERNING = 769
Const SETKERNTRACK = 770
Const SETALLJUSTVALUES = 771
Const SETCHARSET = 772

Const StretchBltC = 2048
Const GETSETSCREENPARAMS = 3072
Const BEGIN_PATH = 4096
Const CLIP_TO_PATH = 4097
Const END_PATH = 4098
Const EXT_DEVICE_CAPS = 4099
Const RESTORE_CTM = 4100
Const SAVE_CTM = 4101
Const SET_ARC_DIRECTION = 4102
Const SET_BACKGROUND_COLOR = 4103
Const SET_POLY_MODE = 4104
Const SET_SCREEN_ANGLE = 4105
Const SET_SPREAD = 4106
Const TRANSFORM_CTM = 4107
Const SET_CLIP_BOX = 4108
Const SET_BOUNDS = 4109
Const SET_MIRROR_MODE = 4110
Const OPENCHANNEL = 4110
Const DOWNLOADHEADER = 4111
Const CLOSECHANNEL = 4112
Const POSTSCRIPT_PASSTHROUGH = 4115
Const ENCAPSULATED_POSTSCRIPT = 4116

' Spooler Error Codes
Const SP_NOTREPORTED = &H4000
Const SP_ERROR = (-1)
Const SP_APPABORT = (-2)
Const SP_USERABORT = (-3)
Const SP_OUTOFDISK = (-4)
Const SP_OUTOFMEMORY = (-5)

Const PR_JOBSTATUS = &H0

'  Object Definitions for EnumObjects()
Const OBJ_PEN = 1
Const OBJ_BRUSH = 2
Const OBJ_DC = 3
Const OBJ_METADC = 4
Const OBJ_PAL = 5
Const OBJ_FONT = 6
Const OBJ_BITMAP = 7
Const OBJ_REGION = 8
Const OBJ_METAFILE = 9
Const OBJ_MEMDC = 10
Const OBJ_EXTPEN = 11
Const OBJ_ENHMETADC = 12
Const OBJ_ENHMETAFILE = 13

'  xform stuff
Const MWT_IDENTITY = 1
Const MWT_LEFTMULTIPLY = 2
Const MWT_RIGHTMULTIPLY = 3

Const MWT_MIN = MWT_IDENTITY
Const MWT_MAX = MWT_RIGHTMULTIPLY

Const OUT_DEFAULT_PRECIS = 0
Const OUT_STRING_PRECIS = 1
Const OUT_CHARACTER_PRECIS = 2
Const OUT_STROKE_PRECIS = 3
Const OUT_TT_PRECIS = 4
Const OUT_DEVICE_PRECIS = 5
Const OUT_RASTER_PRECIS = 6
Const OUT_TT_ONLY_PRECIS = 7
Const OUT_OUTLINE_PRECIS = 8

Const CLIP_DEFAULT_PRECIS = 0
Const CLIP_CHARACTER_PRECIS = 1
Const CLIP_STROKE_PRECIS = 2
Const CLIP_MASK = &HF
Const CLIP_LH_ANGLES = 16
Const CLIP_TT_ALWAYS = 32
Const CLIP_EMBEDDED = 128

Const DEFAULT_QUALITY = 0
Const DRAFT_QUALITY = 1
Const PROOF_QUALITY = 2

Const DEFAULT_PITCH = 0
Const FIXED_PITCH = 1
Const VARIABLE_PITCH = 2

Const ANSI_CHARSET = 0
Const DEFAULT_CHARSET = 1
Const SYMBOL_CHARSET = 2
Const SHIFTJIS_CHARSET = 128
Const HANGEUL_CHARSET = 129
Const CHINESEBIG5_CHARSET = 136
Const OEM_CHARSET = 255

' Font Families
'
Const FF_DONTCARE = 0    '  Don't care or don't know.
Const FF_ROMAN = 16      '  Variable stroke width, serifed.

' Times Roman, Century Schoolbook, etc.
Const FF_SWISS = 32      '  Variable stroke width, sans-serifed.

' Helvetica, Swiss, etc.
Const FF_MODERN = 48     '  Constant stroke width, serifed or sans-serifed.

' Pica, Elite, Courier, etc.
Const FF_SCRIPT = 64     '  Cursive, etc.
Const FF_DECORATIVE = 80 '  Old English, etc.

' Font Weights
Const FW_DONTCARE = 0
Const FW_THIN = 100
Const FW_EXTRALIGHT = 200
Const FW_LIGHT = 300
Const FW_NORMAL = 400
Const FW_MEDIUM = 500
Const FW_SEMIBOLD = 600
Const FW_BOLD = 700
Const FW_EXTRABOLD = 800
Const FW_HEAVY = 900

Const FW_ULTRALIGHT = FW_EXTRALIGHT
Const FW_REGULAR = FW_NORMAL
Const FW_DEMIBOLD = FW_SEMIBOLD
Const FW_ULTRABOLD = FW_EXTRABOLD
Const FW_BLACK = FW_HEAVY

Const PANOSE_COUNT = 10
Const PAN_FAMILYTYPE_INDEX = 0
Const PAN_SERIFSTYLE_INDEX = 1
Const PAN_WEIGHT_INDEX = 2
Const PAN_PROPORTION_INDEX = 3
Const PAN_CONTRAST_INDEX = 4
Const PAN_STROKEVARIATION_INDEX = 5
Const PAN_ARMSTYLE_INDEX = 6
Const PAN_LETTERFORM_INDEX = 7
Const PAN_MIDLINE_INDEX = 8
Const PAN_XHEIGHT_INDEX = 9

Const PAN_CULTURE_LATIN = 0

Const PAN_ANY = 0  '  Any
Const PAN_NO_FIT = 1  '  No Fit

Const PAN_FAMILY_TEXT_DISPLAY = 2  '  Text and Display
Const PAN_FAMILY_SCRIPT = 3  '  Script
Const PAN_FAMILY_DECORATIVE = 4  '  Decorative
Const PAN_FAMILY_PICTORIAL = 5  '  Pictorial

Const PAN_SERIF_COVE = 2  '  Cove
Const PAN_SERIF_OBTUSE_COVE = 3  '  Obtuse Cove
Const PAN_SERIF_SQUARE_COVE = 4  '  Square Cove
Const PAN_SERIF_OBTUSE_SQUARE_COVE = 5  '  Obtuse Square Cove
Const PAN_SERIF_SQUARE = 6  '  Square
Const PAN_SERIF_THIN = 7  '  Thin
Const PAN_SERIF_BONE = 8  '  Bone
Const PAN_SERIF_EXAGGERATED = 9  '  Exaggerated
Const PAN_SERIF_TRIANGLE = 10  '  Triangle
Const PAN_SERIF_NORMAL_SANS = 11  '  Normal Sans
Const PAN_SERIF_OBTUSE_SANS = 12  '  Obtuse Sans
Const PAN_SERIF_PERP_SANS = 13  '  Prep Sans
Const PAN_SERIF_FLARED = 14  '  Flared
Const PAN_SERIF_ROUNDED = 15  '  Rounded

Const PAN_WEIGHT_VERY_LIGHT = 2  '  Very Light
Const PAN_WEIGHT_LIGHT = 3  '  Light
Const PAN_WEIGHT_THIN = 4  '  Thin
Const PAN_WEIGHT_BOOK = 5  '  Book
Const PAN_WEIGHT_MEDIUM = 6  '  Medium
Const PAN_WEIGHT_DEMI = 7  '  Demi
Const PAN_WEIGHT_BOLD = 8  '  Bold
Const PAN_WEIGHT_HEAVY = 9  '  Heavy
Const PAN_WEIGHT_BLACK = 10  '  Black
Const PAN_WEIGHT_NORD = 11  '  Nord

Const PAN_PROP_OLD_STYLE = 2  '  Old Style
Const PAN_PROP_MODERN = 3  '  Modern
Const PAN_PROP_EVEN_WIDTH = 4  '  Even Width
Const PAN_PROP_EXPANDED = 5  '  Expanded
Const PAN_PROP_CONDENSED = 6  '  Condensed
Const PAN_PROP_VERY_EXPANDED = 7  '  Very Expanded
Const PAN_PROP_VERY_CONDENSED = 8  '  Very Condensed
Const PAN_PROP_MONOSPACED = 9  '  Monospaced

Const PAN_CONTRAST_NONE = 2  '  None
Const PAN_CONTRAST_VERY_LOW = 3  '  Very Low
Const PAN_CONTRAST_LOW = 4  '  Low
Const PAN_CONTRAST_MEDIUM_LOW = 5  '  Medium Low
Const PAN_CONTRAST_MEDIUM = 6  '  Medium
Const PAN_CONTRAST_MEDIUM_HIGH = 7  '  Mediim High
Const PAN_CONTRAST_HIGH = 8  '  High
Const PAN_CONTRAST_VERY_HIGH = 9  '  Very High

Const PAN_STROKE_GRADUAL_DIAG = 2  '  Gradual/Diagonal
Const PAN_STROKE_GRADUAL_TRAN = 3  '  Gradual/Transitional
Const PAN_STROKE_GRADUAL_VERT = 4  '  Gradual/Vertical
Const PAN_STROKE_GRADUAL_HORZ = 5  '  Gradual/Horizontal
Const PAN_STROKE_RAPID_VERT = 6  '  Rapid/Vertical
Const PAN_STROKE_RAPID_HORZ = 7  '  Rapid/Horizontal
Const PAN_STROKE_INSTANT_VERT = 8  '  Instant/Vertical

Const PAN_STRAIGHT_ARMS_HORZ = 2  '  Straight Arms/Horizontal
Const PAN_STRAIGHT_ARMS_WEDGE = 3  '  Straight Arms/Wedge
Const PAN_STRAIGHT_ARMS_VERT = 4  '  Straight Arms/Vertical
Const PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5 '  Straight Arms/Single-Serif
Const PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6 '  Straight Arms/Double-Serif
Const PAN_BENT_ARMS_HORZ = 7  '  Non-Straight Arms/Horizontal
Const PAN_BENT_ARMS_WEDGE = 8  '  Non-Straight Arms/Wedge
Const PAN_BENT_ARMS_VERT = 9  '  Non-Straight Arms/Vertical
Const PAN_BENT_ARMS_SINGLE_SERIF = 10  '  Non-Straight Arms/Single-Serif
Const PAN_BENT_ARMS_DOUBLE_SERIF = 11  '  Non-Straight Arms/Double-Serif

Const PAN_LETT_NORMAL_CONTACT = 2  '  Normal/Contact
Const PAN_LETT_NORMAL_WEIGHTED = 3  '  Normal/Weighted
Const PAN_LETT_NORMAL_BOXED = 4  '  Normal/Boxed
Const PAN_LETT_NORMAL_FLATTENED = 5  '  Normal/Flattened
Const PAN_LETT_NORMAL_ROUNDED = 6  '  Normal/Rounded
Const PAN_LETT_NORMAL_OFF_CENTER = 7  '  Normal/Off Center
Const PAN_LETT_NORMAL_SQUARE = 8  '  Normal/Square
Const PAN_LETT_OBLIQUE_CONTACT = 9  '  Oblique/Contact
Const PAN_LETT_OBLIQUE_WEIGHTED = 10  '  Oblique/Weighted
Const PAN_LETT_OBLIQUE_BOXED = 11  '  Oblique/Boxed
Const PAN_LETT_OBLIQUE_FLATTENED = 12  '  Oblique/Flattened
Const PAN_LETT_OBLIQUE_ROUNDED = 13  '  Oblique/Rounded
Const PAN_LETT_OBLIQUE_OFF_CENTER = 14  '  Oblique/Off Center
Const PAN_LETT_OBLIQUE_SQUARE = 15  '  Oblique/Square

Const PAN_MIDLINE_STANDARD_TRIMMED = 2  '  Standard/Trimmed
Const PAN_MIDLINE_STANDARD_POINTED = 3  '  Standard/Pointed
Const PAN_MIDLINE_STANDARD_SERIFED = 4  '  Standard/Serifed
Const PAN_MIDLINE_HIGH_TRIMMED = 5  '  High/Trimmed
Const PAN_MIDLINE_HIGH_POINTED = 6  '  High/Pointed
Const PAN_MIDLINE_HIGH_SERIFED = 7  '  High/Serifed
Const PAN_MIDLINE_CONSTANT_TRIMMED = 8  '  Constant/Trimmed
Const PAN_MIDLINE_CONSTANT_POINTED = 9  '  Constant/Pointed
Const PAN_MIDLINE_CONSTANT_SERIFED = 10  '  Constant/Serifed
Const PAN_MIDLINE_LOW_TRIMMED = 11  '  Low/Trimmed
Const PAN_MIDLINE_LOW_POINTED = 12  '  Low/Pointed
Const PAN_MIDLINE_LOW_SERIFED = 13  '  Low/Serifed

Const PAN_XHEIGHT_CONSTANT_SMALL = 2  '  Constant/Small
Const PAN_XHEIGHT_CONSTANT_STD = 3  '  Constant/Standard
Const PAN_XHEIGHT_CONSTANT_LARGE = 4  '  Constant/Large
Const PAN_XHEIGHT_DUCKING_SMALL = 5  '  Ducking/Small
Const PAN_XHEIGHT_DUCKING_STD = 6  '  Ducking/Standard
Const PAN_XHEIGHT_DUCKING_LARGE = 7  '  Ducking/Large

Const ELF_VENDOR_SIZE = 4

Const ELF_VERSION = 0
Const ELF_CULTURE_LATIN = 0

'  EnumFonts Masks
Const RASTER_FONTTYPE = &H1
Const DEVICE_FONTTYPE = &H2
Const TRUETYPE_FONTTYPE = &H4

' palette entry flags
Const PC_RESERVED = &H1  '  palette index used for animation
Const PC_EXPLICIT = &H2  '  palette index is explicit to device
Const PC_NOCOLLAPSE = &H4        '  do not match color to system palette

' Background Modes
Const TRANSPARENT = 1
Const OPAQUE = 2
Const BKMODE_LAST = 2

'  Graphics Modes
Const GM_COMPATIBLE = 1
Const GM_ADVANCED = 2
Const GM_LAST = 2

'  PolyDraw and GetPath point types
Const PT_CLOSEFIGURE = &H1
Const PT_LINETO = &H2
Const PT_BEZIERTO = &H4
Const PT_MOVETO = &H6

'  Mapping Modes
Const MM_TEXT = 1
Const MM_LOMETRIC = 2
Const MM_HIMETRIC = 3
Const MM_LOENGLISH = 4
Const MM_HIENGLISH = 5
Const MM_TWIPS = 6
Const MM_ISOTROPIC = 7
Const MM_ANISOTROPIC = 8

'  Min and Max Mapping Mode values
Const MM_MIN = MM_TEXT
Const MM_MAX = MM_ANISOTROPIC
Const MM_MAX_FIXEDSCALE = MM_TWIPS

' Coordinate Modes
Const ABSOLUTE = 1
Const RELATIVE = 2

' Stock Logical Objects
Const WHITE_BRUSH = 0
Const LTGRAY_BRUSH = 1
Const GRAY_BRUSH = 2
Const DKGRAY_BRUSH = 3
Const BLACK_BRUSH = 4
Const NULL_BRUSH = 5
Const HOLLOW_BRUSH = NULL_BRUSH
Const WHITE_PEN = 6
Const BLACK_PEN = 7
Const NULL_PEN = 8
Const OEM_FIXED_FONT = 10
Const ANSI_FIXED_FONT = 11
Const ANSI_VAR_FONT = 12
Const SYSTEM_FONT = 13
Const DEVICE_DEFAULT_FONT = 14
Const DEFAULT_PALETTE = 15
Const SYSTEM_FIXED_FONT = 16
Const STOCK_LAST = 16

Const CLR_INVALID = &HFFFF

' Brush Styles
Const BS_SOLID = 0
Const BS_NULL = 1
Const BS_HOLLOW = BS_NULL
Const BS_HATCHED = 2
Const BS_PATTERN = 3
Const BS_INDEXED = 4
Const BS_DIBPATTERN = 5
Const BS_DIBPATTERNPT = 6
Const BS_PATTERN8X8 = 7
Const BS_DIBPATTERN8X8 = 8

'  Hatch Styles
Const HS_HORIZONTAL = 0              '  -----
Const HS_VERTICAL = 1                '  |||||
Const HS_FDIAGONAL = 2               '  \\\\\
Const HS_BDIAGONAL = 3               '  /////
Const HS_CROSS = 4                   '  +++++
Const HS_DIAGCROSS = 5               '  xxxxx
Const HS_FDIAGONAL1 = 6
Const HS_BDIAGONAL1 = 7
Const HS_SOLID = 8
Const HS_DENSE1 = 9
Const HS_DENSE2 = 10
Const HS_DENSE3 = 11
Const HS_DENSE4 = 12
Const HS_DENSE5 = 13
Const HS_DENSE6 = 14
Const HS_DENSE7 = 15
Const HS_DENSE8 = 16
Const HS_NOSHADE = 17
Const HS_HALFTONE = 18
Const HS_SOLIDCLR = 19
Const HS_DITHEREDCLR = 20
Const HS_SOLIDTEXTCLR = 21
Const HS_DITHEREDTEXTCLR = 22
Const HS_SOLIDBKCLR = 23
Const HS_DITHEREDBKCLR = 24
Const HS_API_MAX = 25

'  Pen Styles
Const PS_SOLID = 0
Const PS_DASH = 1                    '  -------
Const PS_DOT = 2                     '  .......
Const PS_DASHDOT = 3                 '  _._._._
Const PS_DASHDOTDOT = 4              '  _.._.._
Const PS_NULL = 5
Const PS_INSIDEFRAME = 6
Const PS_USERSTYLE = 7
Const PS_ALTERNATE = 8
Const PS_STYLE_MASK = &HF

Const PS_ENDCAP_ROUND = &H0
Const PS_ENDCAP_SQUARE = &H100
Const PS_ENDCAP_FLAT = &H200
Const PS_ENDCAP_MASK = &HF00

Const PS_JOIN_ROUND = &H0
Const PS_JOIN_BEVEL = &H1000
Const PS_JOIN_MITER = &H2000
Const PS_JOIN_MASK = &HF000

Const PS_COSMETIC = &H0
Const PS_GEOMETRIC = &H10000
Const PS_TYPE_MASK = &HF0000

Const AD_COUNTERCLOCKWISE = 1
Const AD_CLOCKWISE = 2

'  Device Parameters for GetDeviceCaps()
Const DRIVERVERSION = 0      '  Device driver version
Const TECHNOLOGY = 2         '  Device classification
Const HORZSIZE = 4           '  Horizontal size in millimeters
Const VERTSIZE = 6           '  Vertical size in millimeters
Const HORZRES = 8            '  Horizontal width in pixels
Const VERTRES = 10           '  Vertical width in pixels
Const BITSPIXEL = 12         '  Number of bits per pixel
Const PLANES = 14            '  Number of planes
Const NUMBRUSHES = 16        '  Number of brushes the device has
Const NUMPENS = 18           '  Number of pens the device has
Const NUMMARKERS = 20        '  Number of markers the device has
Const NUMFONTS = 22          '  Number of fonts the device has
Const NUMCOLORS = 24         '  Number of colors the device supports
Const PDEVICESIZE = 26       '  Size required for device descriptor
Const CURVECAPS = 28         '  Curve capabilities
Const LINECAPS = 30          '  Line capabilities
Const POLYGONALCAPS = 32     '  Polygonal capabilities
Const TEXTCAPS = 34          '  Text capabilities
Const CLIPCAPS = 36          '  Clipping capabilities
Const RASTERCAPS = 38        '  Bitblt capabilities
Const ASPECTX = 40           '  Length of the X leg
Const ASPECTY = 42           '  Length of the Y leg
Const ASPECTXY = 44          '  Length of the hypotenuse

Const LOGPIXELSX = 88        '  Logical pixels/inch in X
Const LOGPIXELSY = 90        '  Logical pixels/inch in Y

Const SIZEPALETTE = 104      '  Number of entries in physical palette
Const NUMRESERVED = 106      '  Number of reserved entries in palette
Const COLORRES = 108         '  Actual color resolution

'  Printing related DeviceCaps. These replace the appropriate Escapes
Const PHYSICALWIDTH = 110 '  Physical Width in device units
Const PHYSICALHEIGHT = 111 '  Physical Height in device units
Const PHYSICALOFFSETX = 112 '  Physical Printable Area x margin
Const PHYSICALOFFSETY = 113 '  Physical Printable Area y margin
Const SCALINGFACTORX = 114 '  Scaling factor x
Const SCALINGFACTORY = 115 '  Scaling factor y

'  Device Capability Masks:

'  Device Technologies
Const DT_PLOTTER = 0             '  Vector plotter
Const DT_RASDISPLAY = 1          '  Raster display
Const DT_RASPRINTER = 2          '  Raster printer
Const DT_RASCAMERA = 3           '  Raster camera
Const DT_CHARSTREAM = 4          '  Character-stream, PLP
Const DT_METAFILE = 5            '  Metafile, VDM
Const DT_DISPFILE = 6            '  Display-file

'  Curve Capabilities
Const CC_NONE = 0                '  Curves not supported
Const CC_CIRCLES = 1             '  Can do circles
Const CC_PIE = 2                 '  Can do pie wedges
Const CC_CHORD = 4               '  Can do chord arcs
Const CC_ELLIPSES = 8            '  Can do ellipese
Const CC_WIDE = 16               '  Can do wide lines
Const CC_STYLED = 32             '  Can do styled lines
Const CC_WIDESTYLED = 64         '  Can do wide styled lines
Const CC_INTERIORS = 128 '  Can do interiors
Const CC_ROUNDRECT = 256 '

'  Line Capabilities
Const LC_NONE = 0                '  Lines not supported
Const LC_POLYLINE = 2            '  Can do polylines
Const LC_MARKER = 4              '  Can do markers
Const LC_POLYMARKER = 8          '  Can do polymarkers
Const LC_WIDE = 16               '  Can do wide lines
Const LC_STYLED = 32             '  Can do styled lines
Const LC_WIDESTYLED = 64         '  Can do wide styled lines
Const LC_INTERIORS = 128 '  Can do interiors

'  Polygonal Capabilities
Const PC_NONE = 0                '  Polygonals not supported
Const PC_POLYGON = 1             '  Can do polygons
Const PC_RECTANGLE = 2           '  Can do rectangles
Const PC_WINDPOLYGON = 4         '  Can do winding polygons
Const PC_TRAPEZOID = 4           '  Can do trapezoids
Const PC_SCANLINE = 8            '  Can do scanlines
Const PC_WIDE = 16               '  Can do wide borders
Const PC_STYLED = 32             '  Can do styled borders
Const PC_WIDESTYLED = 64         '  Can do wide styled borders
Const PC_INTERIORS = 128 '  Can do interiors

'  Polygonal Capabilities
Const CP_NONE = 0                '  No clipping of output
Const CP_RECTANGLE = 1           '  Output clipped to rects
Const CP_REGION = 2              '

'  Text Capabilities
Const TC_OP_CHARACTER = &H1              '  Can do OutputPrecision   CHARACTER
Const TC_OP_STROKE = &H2                 '  Can do OutputPrecision   STROKE
Const TC_CP_STROKE = &H4                 '  Can do ClipPrecision     STROKE
Const TC_CR_90 = &H8                     '  Can do CharRotAbility    90
Const TC_CR_ANY = &H10                   '  Can do CharRotAbility    ANY
Const TC_SF_X_YINDEP = &H20              '  Can do ScaleFreedom      X_YINDEPENDENT
Const TC_SA_DOUBLE = &H40                '  Can do ScaleAbility      DOUBLE
Const TC_SA_INTEGER = &H80               '  Can do ScaleAbility      INTEGER
Const TC_SA_CONTIN = &H100               '  Can do ScaleAbility      CONTINUOUS
Const TC_EA_DOUBLE = &H200               '  Can do EmboldenAbility   DOUBLE
Const TC_IA_ABLE = &H400                 '  Can do ItalisizeAbility  ABLE
Const TC_UA_ABLE = &H800                 '  Can do UnderlineAbility  ABLE
Const TC_SO_ABLE = &H1000                '  Can do StrikeOutAbility  ABLE
Const TC_RA_ABLE = &H2000                '  Can do RasterFontAble    ABLE
Const TC_VA_ABLE = &H4000                '  Can do VectorFontAble    ABLE
Const TC_RESERVED = &H8000
Const TC_SCROLLBLT = &H10000             '  do text scroll with blt

'  Raster Capabilities
Const RC_NONE = 0
Const RC_BITBLT = 1                  '  Can do standard BLT.
Const RC_BANDING = 2                 '  Device requires banding support
Const RC_SCALING = 4                 '  Device requires scaling support
Const RC_BITMAP64 = 8                '  Device can support >64K bitmap
Const RC_GDI20_OUTPUT = &H10             '  has 2.0 output calls
Const RC_GDI20_STATE = &H20
Const RC_SAVEBITMAP = &H40
Const RC_DI_BITMAP = &H80                '  supports DIB to memory
Const RC_PALETTE = &H100                 '  supports a palette
Const RC_DIBTODEV = &H200                '  supports DIBitsToDevice
Const RC_BIGFONT = &H400                 '  supports >64K fonts
Const RC_STRETCHBLT = &H800              '  supports StretchBlt
Const RC_FLOODFILL = &H1000              '  supports FloodFill
Const RC_STRETCHDIB = &H2000             '  supports StretchDIBits
Const RC_OP_DX_OUTPUT = &H4000
Const RC_DEVBITS = &H8000

' DIB color table identifiers
Const DIB_RGB_COLORS = 0 '  color table in RGBs
Const DIB_PAL_COLORS = 1 '  color table in palette indices
Const DIB_PAL_INDICES = 2 '  No color table indices into surf palette
Const DIB_PAL_PHYSINDICES = 2 '  No color table indices into surf palette
Const DIB_PAL_LOGINDICES = 4 '  No color table indices into DC palette

' constants for Get/SetSystemPaletteUse()
Const SYSPAL_ERROR = 0
Const SYSPAL_STATIC = 1
Const SYSPAL_NOSTATIC = 2

' constants for CreateDIBitmap
Const CBM_CREATEDIB = &H2      '  create DIB bitmap
Const CBM_INIT = &H4           '  initialize bitmap

' ExtFloodFill style flags
Const FLOODFILLBORDER = 0
Const FLOODFILLSURFACE = 1

'  size of a device name string
Const CCHDEVICENAME = 32

'  size of a form name string
Const CCHFORMNAME = 32

' current version of specification
Const DM_SPECVERSION = &H320

' field selection bits
Const DM_ORIENTATION = &H1&
Const DM_PAPERSIZE = &H2&
Const DM_PAPERLENGTH = &H4&
Const DM_PAPERWIDTH = &H8&
Const DM_SCALE = &H10&
Const DM_COPIES = &H100&
Const DM_DEFAULTSOURCE = &H200&
Const DM_PRINTQUALITY = &H400&
Const DM_COLOR = &H800&
Const DM_DUPLEX = &H1000&
Const DM_YRESOLUTION = &H2000&
Const DM_TTOPTION = &H4000&
Const DM_COLLATE As Long = &H8000
Const DM_FORMNAME As Long = &H10000

'  orientation selections
Const DMORIENT_PORTRAIT = 1
Const DMORIENT_LANDSCAPE = 2

'  paper selections
Const DMPAPER_LETTER = 1
Const DMPAPER_FIRST = DMPAPER_LETTER
               '  Letter 8 1/2 x 11 in
Const DMPAPER_LETTERSMALL = 2            '  Letter Small 8 1/2 x 11 in
Const DMPAPER_TABLOID = 3                '  Tabloid 11 x 17 in
Const DMPAPER_LEDGER = 4                 '  Ledger 17 x 11 in
Const DMPAPER_LEGAL = 5                  '  Legal 8 1/2 x 14 in
Const DMPAPER_STATEMENT = 6              '  Statement 5 1/2 x 8 1/2 in
Const DMPAPER_EXECUTIVE = 7              '  Executive 7 1/4 x 10 1/2 in
Const DMPAPER_A3 = 8                     '  A3 297 x 420 mm
Const DMPAPER_A4 = 9                     '  A4 210 x 297 mm
Const DMPAPER_A4SMALL = 10               '  A4 Small 210 x 297 mm
Const DMPAPER_A5 = 11                    '  A5 148 x 210 mm
Const DMPAPER_B4 = 12                    '  B4 250 x 354
Const DMPAPER_B5 = 13                    '  B5 182 x 257 mm
Const DMPAPER_FOLIO = 14                 '  Folio 8 1/2 x 13 in
Const DMPAPER_QUARTO = 15                '  Quarto 215 x 275 mm
Const DMPAPER_10X14 = 16                 '  10x14 in
Const DMPAPER_11X17 = 17                 '  11x17 in
Const DMPAPER_NOTE = 18                  '  Note 8 1/2 x 11 in
Const DMPAPER_ENV_9 = 19                 '  Envelope #9 3 7/8 x 8 7/8
Const DMPAPER_ENV_10 = 20                '  Envelope #10 4 1/8 x 9 1/2
Const DMPAPER_ENV_11 = 21                '  Envelope #11 4 1/2 x 10 3/8
Const DMPAPER_ENV_12 = 22                '  Envelope #12 4 \276 x 11
Const DMPAPER_ENV_14 = 23                '  Envelope #14 5 x 11 1/2
Const DMPAPER_CSHEET = 24                '  C size sheet
Const DMPAPER_DSHEET = 25                '  D size sheet
Const DMPAPER_ESHEET = 26                '  E size sheet
Const DMPAPER_ENV_DL = 27                '  Envelope DL 110 x 220mm
Const DMPAPER_ENV_C5 = 28                '  Envelope C5 162 x 229 mm
Const DMPAPER_ENV_C3 = 29                '  Envelope C3  324 x 458 mm
Const DMPAPER_ENV_C4 = 30                '  Envelope C4  229 x 324 mm
Const DMPAPER_ENV_C6 = 31                '  Envelope C6  114 x 162 mm
Const DMPAPER_ENV_C65 = 32               '  Envelope C65 114 x 229 mm
Const DMPAPER_ENV_B4 = 33                '  Envelope B4  250 x 353 mm
Const DMPAPER_ENV_B5 = 34                '  Envelope B5  176 x 250 mm
Const DMPAPER_ENV_B6 = 35                '  Envelope B6  176 x 125 mm
Const DMPAPER_ENV_ITALY = 36             '  Envelope 110 x 230 mm
Const DMPAPER_ENV_MONARCH = 37           '  Envelope Monarch 3.875 x 7.5 in
Const DMPAPER_ENV_PERSONAL = 38          '  6 3/4 Envelope 3 5/8 x 6 1/2 in
Const DMPAPER_FANFOLD_US = 39            '  US Std Fanfold 14 7/8 x 11 in
Const DMPAPER_FANFOLD_STD_GERMAN = 40    '  German Std Fanfold 8 1/2 x 12 in
Const DMPAPER_FANFOLD_LGL_GERMAN = 41    '  German Legal Fanfold 8 1/2 x 13 in

Const DMPAPER_LAST = DMPAPER_FANFOLD_LGL_GERMAN

Const DMPAPER_USER = 256

'  bin selections
Const DMBIN_UPPER = 1
Const DMBIN_FIRST = DMBIN_UPPER

Const DMBIN_ONLYONE = 1
Const DMBIN_LOWER = 2
Const DMBIN_MIDDLE = 3
Const DMBIN_MANUAL = 4
Const DMBIN_ENVELOPE = 5
Const DMBIN_ENVMANUAL = 6
Const DMBIN_AUTO = 7
Const DMBIN_TRACTOR = 8
Const DMBIN_SMALLFMT = 9
Const DMBIN_LARGEFMT = 10
Const DMBIN_LARGECAPACITY = 11
Const DMBIN_CASSETTE = 14
Const DMBIN_LAST = DMBIN_CASSETTE

Const DMBIN_USER = 256               '  device specific bins start here

'  print qualities
Const DMRES_DRAFT = (-1)
Const DMRES_LOW = (-2)
Const DMRES_MEDIUM = (-3)
Const DMRES_HIGH = (-4)

'  color enable/disable for color printers
Const DMCOLOR_MONOCHROME = 1
Const DMCOLOR_COLOR = 2

'  duplex enable
Const DMDUP_SIMPLEX = 1
Const DMDUP_VERTICAL = 2
Const DMDUP_HORIZONTAL = 3

'  TrueType options
Const DMTT_BITMAP = 1            '  print TT fonts as graphics
Const DMTT_DOWNLOAD = 2          '  download TT fonts as soft fonts
Const DMTT_SUBDEV = 3            '  substitute device fonts for TT fonts

'  Collation selections
Const DMCOLLATE_FALSE = 0
Const DMCOLLATE_TRUE = 1

'  DEVMODE dmDisplayFlags flags

Const DM_GRAYSCALE = &H1
Const DM_INTERLACED = &H2

'  GetRegionData/ExtCreateRegion

Const RDH_RECTANGLES = 1


' GetGlyphOutline constants
Const GGO_METRICS = 0
Const GGO_BITMAP = 1
Const GGO_NATIVE = 2

Const TT_POLYGON_TYPE = 24

Const TT_PRIM_LINE = 1
Const TT_PRIM_QSPLINE = 2


' bits defined in wFlags of RASTERIZER_STATUS
Const TT_AVAILABLE = &H1
Const TT_ENABLED = &H2

Declare Function AddFontResource Lib "Coredll" Alias "AddFontResourceW" (ByVal lpFileName As String) As Long

Declare Function BitBlt Lib "Coredll" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Declare Function CombineRgn Lib "Coredll" Alias "CombineRgn" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Declare Function CreateBitmap Lib "Coredll" Alias "CreateBitmap" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Long) As Long
Declare Function CreateCompatibleBitmap Lib "Coredll" Alias "CreateCompatibleBitmap" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function CreateCompatibleDC Lib "Coredll" Alias "CreateCompatibleDC" (ByVal hdc As Long) As Long
Declare Function CreateDC Lib "Coredll" Alias "CreateDCW" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long

Declare Function CreatePen Lib "Coredll" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Declare Function CreateRectRgn Lib "Coredll" Alias "CreateRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function CreatePatternBrush Lib "Coredll" Alias "CreatePatternBrush" (ByVal hBitmap As Long) As Long
Declare Function CreateSolidBrush Lib "Coredll" Alias "CreateSolidBrush" (ByVal crColor As Long) As Long

Declare Function DeleteDC Lib "Coredll" Alias "DeleteDC" (ByVal hdc As Long) As Long
Declare Function DeleteObject Lib "Coredll" Alias "DeleteObject" (ByVal hObject As Long) As Long

'  mode selections for the device mode function
Const DM_UPDATE = 1
Const DM_COPY = 2
Const DM_PROMPT = 4
Const DM_MODIFY = 8

Const DM_IN_BUFFER = DM_MODIFY
Const DM_IN_PROMPT = DM_PROMPT
Const DM_OUT_BUFFER = DM_COPY
Const DM_OUT_DEFAULT = DM_UPDATE

'  device capabilities indices
Const DC_FIELDS = 1
Const DC_PAPERS = 2
Const DC_PAPERSIZE = 3
Const DC_MINEXTENT = 4
Const DC_MAXEXTENT = 5
Const DC_BINS = 6
Const DC_DUPLEX = 7
Const DC_SIZE = 8
Const DC_EXTRA = 9
Const DC_VERSION = 10
Const DC_DRIVER = 11
Const DC_BINNAMES = 12
Const DC_ENUMRESOLUTIONS = 13
Const DC_FILEDEPENDENCIES = 14
Const DC_TRUETYPE = 15
Const DC_PAPERNAMES = 16
Const DC_ORIENTATION = 17
Const DC_COPIES = 18

'  bit fields of the return value (DWORD) for DC_TRUETYPE
Const DCTT_BITMAP = &H1&
Const DCTT_DOWNLOAD = &H2&
Const DCTT_SUBDEV = &H4&

Declare Function Ellipse Lib "Coredll" Alias "Ellipse" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function EqualRgn Lib "Coredll" Alias "EqualRgn" (ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long) As Long
Declare Function ExcludeClipRect Lib "Coredll" Alias "ExcludeClipRect" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function FillRgn Lib "Coredll" Alias "FillRgn" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Declare Function GetBkColor Lib "Coredll" Alias "GetBkColor" (ByVal hdc As Long) As Long
Declare Function GetBkMode Lib "Coredll" Alias "GetBkMode" (ByVal hdc As Long) As Long
Declare Function GetClipRgn Lib "Coredll" Alias "GetClipRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function GetCurrentObject Lib "Coredll" Alias "GetCurrentObject" (ByVal hdc As Long, ByVal uObjectType As Long) As Long
Declare Function GetDeviceCaps Lib "Coredll" Alias "GetDeviceCaps" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Declare Function GetNearestColor Lib "Coredll" Alias "GetNearestColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function GetNearestPaletteIndex Lib "Coredll" Alias "GetNearestPaletteIndex" (ByVal hPalette As Long, ByVal crColor As Long) As Long
Declare Function GetObjectType Lib "Coredll" Alias "GetObjectType" (ByVal hgdiobj As Long) As Long
Declare Function GetPixel Lib "Coredll" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function GetStockObject Lib "Coredll" Alias "GetStockObject" (ByVal nIndex As Long) As Long
Declare Function GetTextColor Lib "Coredll" Alias "GetTextColor" (ByVal hdc As Long) As Long
Declare Function IntersectClipRect Lib "Coredll" Alias "IntersectClipRect" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function MaskBlt Lib "Coredll" Alias "MaskBlt" (ByVal hdcDest As Long, ByVal nXDest As Long, ByVal nYDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long, ByVal dwRop As Long) As Long
Declare Function OffsetRgn Lib "Coredll" Alias "OffsetRgn" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function PatBlt Lib "Coredll" Alias "PatBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long
Declare Function PtInRegion Lib "Coredll" Alias "PtInRegion" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function Rectangle Lib "Coredll" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function RestoreDC Lib "Coredll" Alias "RestoreDC" (ByVal hdc As Long, ByVal nSavedDC As Long) As Long
Declare Function RealizePalette Lib "Coredll" Alias "RealizePalette" (ByVal hdc As Long) As Long
Declare Function RemoveFontResource Lib "Coredll" Alias "RemoveFontResourceW" (ByVal lpFileName As String) As Long
Declare Function RoundRect Lib "Coredll" Alias "RoundRect" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Declare Function SaveDC Lib "Coredll" Alias "SaveDC" (ByVal hdc As Long) As Long
Declare Function SelectClipRgn Lib "Coredll" Alias "SelectClipRgn" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Declare Function SelectObject Lib "Coredll" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long
Declare Function SelectPalette Lib "Coredll" Alias "SelectPalette" (ByVal hdc As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
Declare Function SetBkColor Lib "Coredll" Alias "SetBkColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function SetBkMode Lib "Coredll" Alias "SetBkMode" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Declare Function SetPixel Lib "Coredll" Alias "SetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Declare Function StretchBlt Lib "Coredll" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Declare Function SetRectRgn Lib "Coredll" Alias "SetRectRgn" (ByVal hRgn As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function SetROP2 Lib "Coredll" Alias "SetROP2" (ByVal hdc As Long, ByVal nDrawMode As Long) As Long
Declare Function SetTextColor Lib "Coredll" Alias "SetTextColor" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function GetProcAddress Lib "Coredll" Alias "GetProcAddressW" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Declare Function CloseEnhMetaFile Lib "Coredll" Alias "CloseEnhMetaFile" (ByVal hdc As Long) As Long
Declare Function DeleteEnhMetaFile Lib "Coredll" Alias "DeleteEnhMetaFile" (ByVal hemf As Long) As Long

'  Flags value for COLORADJUSTMENT
Const CA_NEGATIVE = &H1
Const CA_LOG_FILTER = &H2

'  IlluminantIndex values
Const ILLUMINANT_DEVICE_DEFAULT = 0
Const ILLUMINANT_A = 1
Const ILLUMINANT_B = 2
Const ILLUMINANT_C = 3
Const ILLUMINANT_D50 = 4
Const ILLUMINANT_D55 = 5
Const ILLUMINANT_D65 = 6
Const ILLUMINANT_D75 = 7
Const ILLUMINANT_F2 = 8
Const ILLUMINANT_MAX_INDEX = ILLUMINANT_F2

Const ILLUMINANT_TUNGSTEN = ILLUMINANT_A
Const ILLUMINANT_DAYLIGHT = ILLUMINANT_C
Const ILLUMINANT_FLUORESCENT = ILLUMINANT_F2
Const ILLUMINANT_NTSC = ILLUMINANT_C

'  Min and max for RedGamma, GreenGamma, BlueGamma
Const RGB_GAMMA_MIN = 2500 'words
Const RGB_GAMMA_MAX = 65000

'  Min and max for ReferenceBlack and ReferenceWhite
Const REFERENCE_WHITE_MIN = 6000 'words
Const REFERENCE_WHITE_MAX = 10000
Const REFERENCE_BLACK_MIN = 0
Const REFERENCE_BLACK_MAX = 4000

'  Min and max for Contrast, Brightness, Colorfulness, RedGreenTint
Const COLOR_ADJ_MIN = -100 'shorts
Const COLOR_ADJ_MAX = 100

Declare Function StartPage Lib "Coredll" Alias "StartPage" (ByVal hdc As Long) As Long
Declare Function EndPage Lib "Coredll" Alias "EndPage" (ByVal hdc As Long) As Long
Declare Function EndDoc Lib "Coredll" Alias "EndDoc" (ByVal hdc As Long) As Long
Declare Function AbortDoc Lib "Coredll" Alias "AbortDoc" (ByVal hdc As Long) As Long
Declare Function GetObject Lib "Coredll" Alias "GetObjectW" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Long) As Long
Declare Function ExtTextOut Lib "Coredll" Alias "ExtTextOutW" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal wOptions As Long, lpRect As Rect, ByVal lpString As String, ByVal nCount As Long, lpDx As Long) As Long
Declare Function SetViewportOrgEx Lib "Coredll" Alias "SetViewportOrgEx" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpPoint As Long) As Long
Declare Function SetBrushOrgEx Lib "Coredll" Alias "SetBrushOrgEx" (ByVal hdc As Long, ByVal nXOrg As Long, ByVal nYOrg As Long, lppt As Long) As Long
Declare Function GetTextFace Lib "Coredll" Alias "GetTextFaceW" (ByVal hdc As Long, ByVal nCount As Long, ByVal lpFacename As String) As Long

Const FONTMAPPER_MAX = 10


' Enhanced metafile constants

Const ENHMETA_SIGNATURE = &H464D4520

'  Stock object flag used in the object handle
' index in the enhanced metafile records.
'  E.g. The object handle index (META_STOCK_OBJECT Or BLACK_BRUSH)
'  represents the stock object BLACK_BRUSH.

Const ENHMETA_STOCK_OBJECT = &H80000000

'  Enhanced metafile record types.

Const EMR_HEADER = 1
Const EMR_POLYBEZIER = 2
Const EMR_POLYGON = 3
Const EMR_POLYLINE = 4
Const EMR_POLYBEZIERTO = 5
Const EMR_POLYLINETO = 6
Const EMR_POLYPOLYLINE = 7
Const EMR_POLYPOLYGON = 8
Const EMR_SETWINDOWEXTEX = 9
Const EMR_SETWINDOWORGEX = 10
Const EMR_SETVIEWPORTEXTEX = 11
Const EMR_SETVIEWPORTORGEX = 12
Const EMR_SETBRUSHORGEX = 13
Const EMR_EOF = 14
Const EMR_SETPIXELV = 15
Const EMR_SETMAPPERFLAGS = 16
Const EMR_SETMAPMODE = 17
Const EMR_SETBKMODE = 18
Const EMR_SETPOLYFILLMODE = 19
Const EMR_SETROP2 = 20
Const EMR_SETSTRETCHBLTMODE = 21
Const EMR_SETTEXTALIGN = 22
Const EMR_SETCOLORADJUSTMENT = 23
Const EMR_SETTEXTCOLOR = 24
Const EMR_SETBKCOLOR = 25
Const EMR_OFFSETCLIPRGN = 26
Const EMR_MOVETOEX = 27
Const EMR_SETMETARGN = 28
Const EMR_EXCLUDECLIPRECT = 29
Const EMR_INTERSECTCLIPRECT = 30
Const EMR_SCALEVIEWPORTEXTEX = 31
Const EMR_SCALEWINDOWEXTEX = 32
Const EMR_SAVEDC = 33
Const EMR_RESTOREDC = 34
Const EMR_SETWORLDTRANSFORM = 35
Const EMR_MODIFYWORLDTRANSFORM = 36
Const EMR_SELECTOBJECT = 37
Const EMR_CREATEPEN = 38
Const EMR_CREATEBRUSHINDIRECT = 39
Const EMR_DELETEOBJECT = 40
Const EMR_ANGLEARC = 41
Const EMR_ELLIPSE = 42
Const EMR_RECTANGLE = 43
Const EMR_ROUNDRECT = 44
Const EMR_ARC = 45
Const EMR_CHORD = 46
Const EMR_PIE = 47
Const EMR_SELECTPALETTE = 48
Const EMR_CREATEPALETTE = 49
Const EMR_SETPALETTEENTRIES = 50
Const EMR_RESIZEPALETTE = 51
Const EMR_REALIZEPALETTE = 52
Const EMR_EXTFLOODFILL = 53
Const EMR_LINETO = 54
Const EMR_ARCTO = 55
Const EMR_POLYDRAW = 56
Const EMR_SETARCDIRECTION = 57
Const EMR_SETMITERLIMIT = 58
Const EMR_BEGINPATH = 59
Const EMR_ENDPATH = 60
Const EMR_CLOSEFIGURE = 61
Const EMR_FILLPATH = 62
Const EMR_STROKEANDFILLPATH = 63
Const EMR_STROKEPATH = 64
Const EMR_FLATTENPATH = 65
Const EMR_WIDENPATH = 66
Const EMR_SELECTCLIPPATH = 67
Const EMR_ABORTPATH = 68

Const EMR_GDICOMMENT = 70
Const EMR_FILLRGN = 71
Const EMR_FRAMERGN = 72
Const EMR_INVERTRGN = 73
Const EMR_PAINTRGN = 74
Const EMR_EXTSELECTCLIPRGN = 75
Const EMR_BITBLT = 76
Const EMR_STRETCHBLT = 77
Const EMR_MASKBLT = 78
Const EMR_PLGBLT = 79
Const EMR_SETDIBITSTODEVICE = 80
Const EMR_STRETCHDIBITS = 81
Const EMR_EXTCREATEFONTINDIRECTW = 82
Const EMR_EXTTEXTOUTA = 83
Const EMR_EXTTEXTOUTW = 84
Const EMR_POLYBEZIER16 = 85
Const EMR_POLYGON16 = 86
Const EMR_POLYLINE16 = 87
Const EMR_POLYBEZIERTO16 = 88
Const EMR_POLYLINETO16 = 89
Const EMR_POLYPOLYLINE16 = 90
Const EMR_POLYPOLYGON16 = 91
Const EMR_POLYDRAW16 = 92
Const EMR_CREATEMONOBRUSH = 93
Const EMR_CREATEDIBPATTERNBRUSHPT = 94
Const EMR_EXTCREATEPEN = 95
Const EMR_POLYTEXTOUTA = 96
Const EMR_POLYTEXTOUTW = 97

Const EMR_MIN = 1
Const EMR_MAX = 97

' new wingdi
' *************************************************************************
' *                                                                         *
' * wingdi.h -- GDI procedure declarations, constant definitions and macros *
' *                                                                         *
' * Copyright (c) 1985-1995, Microsoft Corp. All rights reserved.           *
' *                                                                         *
' **************************************************************************/

'  StretchBlt() Modes
Const STRETCH_ANDSCANS = 1
Const STRETCH_ORSCANS = 2
Const STRETCH_DELETESCANS = 3
Const STRETCH_HALFTONE = 4

Const TCI_SRCCHARSET = 1
Const TCI_SRCCODEPAGE = 2
Const TCI_SRCFONTSIG = 3

Const MONO_FONT = 8
Const JOHAB_CHARSET = 130
Const HEBREW_CHARSET = 177
Const ARABIC_CHARSET = 178
Const GREEK_CHARSET = 161
Const TURKISH_CHARSET = 162
Const THAI_CHARSET = 222
Const EASTEUROPE_CHARSET = 238
Const RUSSIAN_CHARSET = 204

Const MAC_CHARSET = 77
Const BALTIC_CHARSET = 186

Const FS_LATIN1 = &H1&
Const FS_LATIN2 = &H2&
Const FS_CYRILLIC = &H4&
Const FS_GREEK = &H8&
Const FS_TURKISH = &H10&
Const FS_HEBREW = &H20&
Const FS_ARABIC = &H40&
Const FS_BALTIC = &H80&
Const FS_THAI = &H10000
Const FS_JISJAPAN = &H20000
Const FS_CHINESESIMP = &H40000
Const FS_WANSUNG = &H80000
Const FS_CHINESETRAD = &H100000
Const FS_JOHAB = &H200000
Const FS_SYMBOL = &H80000000
Const DEFAULT_GUI_FONT = 17
'  current version of specification
Const DM_RESERVED1 = &H800000
Const DM_RESERVED2 = &H1000000
Const DM_ICMMETHOD = &H2000000
Const DM_ICMINTENT = &H4000000
Const DM_MEDIATYPE = &H8000000
Const DM_DITHERTYPE = &H10000000
Const DMPAPER_ISO_B4 = 42                '  B4 (ISO) 250 x 353 mm
Const DMPAPER_JAPANESE_POSTCARD = 43     '  Japanese Postcard 100 x 148 mm
Const DMPAPER_9X11 = 44                  '  9 x 11 in
Const DMPAPER_10X11 = 45                 '  10 x 11 in
Const DMPAPER_15X11 = 46                 '  15 x 11 in
Const DMPAPER_ENV_INVITE = 47            '  Envelope Invite 220 x 220 mm
Const DMPAPER_RESERVED_48 = 48           '  RESERVED--DO NOT USE
Const DMPAPER_RESERVED_49 = 49           '  RESERVED--DO NOT USE
Const DMPAPER_LETTER_EXTRA = 50              '  Letter Extra 9 \275 x 12 in
Const DMPAPER_LEGAL_EXTRA = 51               '  Legal Extra 9 \275 x 15 in
Const DMPAPER_TABLOID_EXTRA = 52              '  Tabloid Extra 11.69 x 18 in
Const DMPAPER_A4_EXTRA = 53                   '  A4 Extra 9.27 x 12.69 in
Const DMPAPER_LETTER_TRANSVERSE = 54     '  Letter Transverse 8 \275 x 11 in
Const DMPAPER_A4_TRANSVERSE = 55         '  A4 Transverse 210 x 297 mm
Const DMPAPER_LETTER_EXTRA_TRANSVERSE = 56 '  Letter Extra Transverse 9\275 x 12 in
Const DMPAPER_A_PLUS = 57                '  SuperA/SuperA/A4 227 x 356 mm
Const DMPAPER_B_PLUS = 58                '  SuperB/SuperB/A3 305 x 487 mm
Const DMPAPER_LETTER_PLUS = 59           '  Letter Plus 8.5 x 12.69 in
Const DMPAPER_A4_PLUS = 60               '  A4 Plus 210 x 330 mm
Const DMPAPER_A5_TRANSVERSE = 61         '  A5 Transverse 148 x 210 mm
Const DMPAPER_B5_TRANSVERSE = 62         '  B5 (JIS) Transverse 182 x 257 mm
Const DMPAPER_A3_EXTRA = 63              '  A3 Extra 322 x 445 mm
Const DMPAPER_A5_EXTRA = 64              '  A5 Extra 174 x 235 mm
Const DMPAPER_B5_EXTRA = 65              '  B5 (ISO) Extra 201 x 276 mm
Const DMPAPER_A2 = 66                    '  A2 420 x 594 mm
Const DMPAPER_A3_TRANSVERSE = 67         '  A3 Transverse 297 x 420 mm
Const DMPAPER_A3_EXTRA_TRANSVERSE = 68   '  A3 Extra Transverse 322 x 445 mm
Const DMTT_DOWNLOAD_OUTLINE = 4 '  download TT fonts as outline soft fonts

'  ICM methods
Const DMICMMETHOD_NONE = 1       '  ICM disabled
Const DMICMMETHOD_SYSTEM = 2     '  ICM handled by system
Const DMICMMETHOD_DRIVER = 3     '  ICM handled by driver
Const DMICMMETHOD_DEVICE = 4     '  ICM handled by device
Const DMICMMETHOD_USER = 256     '  Device-specific methods start here

'  ICM Intents
Const DMICM_SATURATE = 1         '  Maximize color saturation
Const DMICM_CONTRAST = 2         '  Maximize color contrast
Const DMICM_COLORMETRIC = 3      '  Use specific color metric
Const DMICM_USER = 256           '  Device-specific intents start here

'  Media types
Const DMMEDIA_STANDARD = 1         '  Standard paper
Const DMMEDIA_GLOSSY = 2           '  Glossy paper
Const DMMEDIA_TRANSPARENCY = 3     '  Transparency

Const DMMEDIA_USER = 256           '  Device-specific media start here

'  Dither types
Const DMDITHER_NONE = 1          '  No dithering
Const DMDITHER_COARSE = 2        '  Dither with a coarse brush
Const DMDITHER_FINE = 3          '  Dither with a fine brush
Const DMDITHER_LINEART = 4       '  LineArt dithering
Const DMDITHER_GRAYSCALE = 5     '  Device does grayscaling
Const DMDITHER_USER = 256        '  Device-specific dithers start here
Const GGO_GRAY2_BITMAP = 4
Const GGO_GRAY4_BITMAP = 5
Const GGO_GRAY8_BITMAP = 6
Const GGO_GLYPH_INDEX = &H80
Const GCP_DBCS = &H1
Const GCP_REORDER = &H2
Const GCP_USEKERNING = &H8
Const GCP_GLYPHSHAPE = &H10
Const GCP_LIGATE = &H20
Const GCP_DIACRITIC = &H100
Const GCP_KASHIDA = &H400
Const GCP_ERROR = &H8000
Const FLI_MASK = &H103B
Const GCP_JUSTIFY = &H10000
Const GCP_NODIACRITICS = &H20000
Const FLI_GLYPHS = &H40000
Const GCP_CLASSIN = &H80000
Const GCP_MAXEXTENT = &H100000
Const GCP_JUSTIFYIN = &H200000
Const GCP_DISPLAYZWG = &H400000
Const GCP_SYMSWAPOFF = &H800000
Const GCP_NUMERICOVERRIDE = &H1000000
Const GCP_NEUTRALOVERRIDE = &H2000000
Const GCP_NUMERICSLATIN = &H4000000
Const GCP_NUMERICSLOCAL = &H8000000
Const GCPCLASS_LATIN = 1
Const GCPCLASS_HEBREW = 2
Const GCPCLASS_ARABIC = 2
Const GCPCLASS_NEUTRAL = 3
Const GCPCLASS_LOCALNUMBER = 4
Const GCPCLASS_LATINNUMBER = 5
Const GCPCLASS_LATINNUMERICTERMINATOR = 6
Const GCPCLASS_LATINNUMERICSEPARATOR = 7
Const GCPCLASS_NUMERICSEPARATOR = 8
Const GCPCLASS_PREBOUNDRTL = &H80
Const GCPCLASS_PREBOUNDLTR = &H40


Const DC_BINADJUST = 19
Const DC_EMF_COMPLIANT = 20
Const DC_DATATYPE_PRODUCED = 21
Const DC_COLLATE = 22

Const DCTT_DOWNLOAD_OUTLINE = &H8&

'  return values for DC_BINADJUST
Const DCBA_FACEUPNONE = &H0
Const DCBA_FACEUPCENTER = &H1
Const DCBA_FACEUPLEFT = &H2
Const DCBA_FACEUPRIGHT = &H3
Const DCBA_FACEDOWNNONE = &H100
Const DCBA_FACEDOWNCENTER = &H101
Const DCBA_FACEDOWNLEFT = &H102
Const DCBA_FACEDOWNRIGHT = &H103

Declare Function EnumFontFamilies Lib "Coredll" Alias "EnumFontFamiliesW" (ByVal hdc As Long, ByVal lpszFamily As String, ByVal lpEnumFontFamProc As Long, ByVal lParam As Long) As Long

Const ICM_OFF = 1
Const ICM_ON = 2
Const ICM_QUERY = 3

Const EMR_SETICMMODE = 98
Const EMR_CREATECOLORSPACE = 99
Const EMR_SETCOLORSPACE = 100
Const EMR_DELETECOLORSPACE = 101


' --------------
'  USER Section
' --------------

' Scroll Bar Constants
Const SB_HORZ = 0
Const SB_VERT = 1
Const SB_CTL = 2
Const SB_BOTH = 3

' Scroll Bar Commands
Const SB_LINEUP = 0
Const SB_LINELEFT = 0
Const SB_LINEDOWN = 1
Const SB_LINERIGHT = 1
Const SB_PAGEUP = 2
Const SB_PAGELEFT = 2
Const SB_PAGEDOWN = 3
Const SB_PAGERIGHT = 3
Const SB_THUMBPOSITION = 4
Const SB_THUMBTRACK = 5
Const SB_TOP = 6
Const SB_LEFT = 6
Const SB_BOTTOM = 7
Const SB_RIGHT = 7
Const SB_ENDSCROLL = 8

' ShowWindow() Commands
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_NORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3
Const SW_MAXIMIZE = 3
Const SW_SHOWNOACTIVATE = 4
Const SW_SHOW = 5
Const SW_MINIMIZE = 6
Const SW_SHOWMINNOACTIVE = 7
Const SW_SHOWNA = 8
Const SW_RESTORE = 9
Const SW_SHOWDEFAULT = 10
Const SW_MAX = 10

' Old ShowWindow() Commands
Const HIDE_WINDOW = 0
Const SHOW_OPENWINDOW = 1
Const SHOW_ICONWINDOW = 2
Const SHOW_FULLSCREEN = 3
Const SHOW_OPENNOACTIVATE = 4

' Identifiers for the WM_SHOWWINDOW message
Const SW_PARENTCLOSING = 1
Const SW_OTHERZOOM = 2
Const SW_PARENTOPENING = 3
Const SW_OTHERUNZOOM = 4

' WM_KEYUP/DOWN/CHAR HIWORD(lParam) flags
Const KF_EXTENDED = &H100
Const KF_DLGMODE = &H800
Const KF_MENUMODE = &H1000
Const KF_ALTDOWN = &H2000
Const KF_REPEAT = &H4000
Const KF_UP = &H8000

' Virtual Keys, Standard Set
Const VK_LBUTTON = &H1
Const VK_RBUTTON = &H2
Const VK_CANCEL = &H3
Const VK_MBUTTON = &H4             '  NOT contiguous with L RBUTTON

Const VK_BACK = &H8
Const VK_TAB = &H9

Const VK_CLEAR = &HC
Const VK_RETURN = &HD

Const VK_SHIFT = &H10
Const VK_CONTROL = &H11
Const VK_MENU = &H12
Const VK_PAUSE = &H13
Const VK_CAPITAL = &H14

Const VK_ESCAPE = &H1B

Const VK_SPACE = &H20
Const VK_PRIOR = &H21
Const VK_NEXT = &H22
Const VK_END = &H23
Const VK_HOME = &H24
Const VK_LEFT = &H25
Const VK_UP = &H26
Const VK_RIGHT = &H27
Const VK_DOWN = &H28
Const VK_SELECT = &H29
Const VK_PRINT = &H2A
Const VK_EXECUTE = &H2B
Const VK_SNAPSHOT = &H2C
Const VK_INSERT = &H2D
Const VK_DELETE = &H2E
Const VK_HELP = &H2F

' VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z'
' VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '9'

Const VK_NUMPAD0 = &H60
Const VK_NUMPAD1 = &H61
Const VK_NUMPAD2 = &H62
Const VK_NUMPAD3 = &H63
Const VK_NUMPAD4 = &H64
Const VK_NUMPAD5 = &H65
Const VK_NUMPAD6 = &H66
Const VK_NUMPAD7 = &H67
Const VK_NUMPAD8 = &H68
Const VK_NUMPAD9 = &H69
Const VK_MULTIPLY = &H6A
Const VK_ADD = &H6B
Const VK_SEPARATOR = &H6C
Const VK_SUBTRACT = &H6D
Const VK_DECIMAL = &H6E
Const VK_DIVIDE = &H6F
Const VK_F1 = &H70
Const VK_F2 = &H71
Const VK_F3 = &H72
Const VK_F4 = &H73
Const VK_F5 = &H74
Const VK_F6 = &H75
Const VK_F7 = &H76
Const VK_F8 = &H77
Const VK_F9 = &H78
Const VK_F10 = &H79
Const VK_F11 = &H7A
Const VK_F12 = &H7B
Const VK_F13 = &H7C
Const VK_F14 = &H7D
Const VK_F15 = &H7E
Const VK_F16 = &H7F
Const VK_F17 = &H80
Const VK_F18 = &H81
Const VK_F19 = &H82
Const VK_F20 = &H83
Const VK_F21 = &H84
Const VK_F22 = &H85
Const VK_F23 = &H86
Const VK_F24 = &H87

Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91

'
'   VK_L VK_R - left and right Alt, Ctrl and Shift virtual keys.
'   Used only as parameters to GetAsyncKeyState() and GetKeyState().
'   No other API or message will distinguish left and right keys in this way.
'  /
Const VK_LSHIFT = &HA0
Const VK_RSHIFT = &HA1
Const VK_LCONTROL = &HA2
Const VK_RCONTROL = &HA3
Const VK_LMENU = &HA4
Const VK_RMENU = &HA5

Const VK_ATTN = &HF6
Const VK_CRSEL = &HF7
Const VK_EXSEL = &HF8
Const VK_EREOF = &HF9
Const VK_PLAY = &HFA
Const VK_ZOOM = &HFB
Const VK_NONAME = &HFC
Const VK_PA1 = &HFD
Const VK_OEM_CLEAR = &HFE

' SetWindowsHook() codes
Const WH_MIN = (-1)
Const WH_MSGFILTER = (-1)
Const WH_JOURNALRECORD = 0
Const WH_JOURNALPLAYBACK = 1
Const WH_KEYBOARD = 2
Const WH_GETMESSAGE = 3
Const WH_CALLWNDPROC = 4
Const WH_CBT = 5
Const WH_SYSMSGFILTER = 6
Const WH_MOUSE = 7
Const WH_HARDWARE = 8
Const WH_DEBUG = 9
Const WH_SHELL = 10
Const WH_FOREGROUNDIDLE = 11
Const WH_MAX = 11

' Hook Codes
Const HC_ACTION = 0
Const HC_GETNEXT = 1
Const HC_SKIP = 2
Const HC_NOREMOVE = 3
Const HC_NOREM = HC_NOREMOVE
Const HC_SYSMODALON = 4
Const HC_SYSMODALOFF = 5

' CBT Hook Codes
Const HCBT_MOVESIZE = 0
Const HCBT_MINMAX = 1
Const HCBT_QS = 2
Const HCBT_CREATEWND = 3
Const HCBT_DESTROYWND = 4
Const HCBT_ACTIVATE = 5
Const HCBT_CLICKSKIPPED = 6
Const HCBT_KEYSKIPPED = 7
Const HCBT_SYSCOMMAND = 8
Const HCBT_SETFOCUS = 9

' WH_MSGFILTER Filter Proc Codes
Const MSGF_DIALOGBOX = 0
Const MSGF_MESSAGEBOX = 1
Const MSGF_MENU = 2
Const MSGF_MOVE = 3
Const MSGF_SIZE = 4
Const MSGF_SCROLLBAR = 5
Const MSGF_NEXTWINDOW = 6
Const MSGF_MAINLOOP = 8
Const MSGF_MAX = 8
Const MSGF_USER = 4096

Const HSHELL_WINDOWCREATED = 1
Const HSHELL_WINDOWDESTROYED = 2
Const HSHELL_ACTIVATESHELLWINDOW = 3

' Keyboard Layout API
Const HKL_PREV = 0
Const HKL_NEXT = 1

Const KLF_ACTIVATE = &H1
Const KLF_SUBSTITUTE_OK = &H2
Const KLF_UNLOADPREVIOUS = &H4
Const KLF_REORDER = &H8

' Size of KeyboardLayoutName (number of characters), including nul terminator
Const KL_NAMELENGTH = 9

' Desktop-specific access flags
Const DESKTOP_READOBJECTS = &H1&
Const DESKTOP_CREATEWINDOW = &H2&
Const DESKTOP_CREATEMENU = &H4&
Const DESKTOP_HOOKCONTROL = &H8&
Const DESKTOP_JOURNALRECORD = &H10&
Const DESKTOP_JOURNALPLAYBACK = &H20&
Const DESKTOP_ENUMERATE = &H40&
Const DESKTOP_WRITEOBJECTS = &H80&


' Windowstation-specific access flags
Const WINSTA_ENUMDESKTOPS = &H1&
Const WINSTA_READATTRIBUTES = &H2&
Const WINSTA_ACCESSCLIPBOARD = &H4&
Const WINSTA_CREATEDESKTOP = &H8&
Const WINSTA_WRITEATTRIBUTES = &H10&
Const WINSTA_ACCESSPUBLICATOMS = &H20&
Const WINSTA_EXITWINDOWS = &H40&
Const WINSTA_ENUMERATE = &H100&
Const WINSTA_READSCREEN = &H200&


' Message structure

' Window field offsets for GetWindowLong() and GetWindowWord()
Const GWL_WNDPROC = (-4)
Const GWL_HINSTANCE = (-6)
Const GWL_HWNDPARENT = (-8)
Const GWL_STYLE = (-16)
Const GWL_EXSTYLE = (-20)
Const GWL_USERDATA = (-21)
Const GWL_ID = (-12)

' Class field offsets for GetClassLong() and GetClassWord()
Const GCL_MENUNAME = (-8)
Const GCL_HBRBACKGROUND = (-10)
Const GCL_HCURSOR = (-12)
Const GCL_HICON = (-14)
Const GCL_HMODULE = (-16)
Const GCL_CBWNDEXTRA = (-18)
Const GCL_CBCLSEXTRA = (-20)
Const GCL_WNDPROC = (-24)
Const GCL_STYLE = (-26)
Const GCW_ATOM = (-32)

' Window Messages
Const WM_NULL = &H0
Const WM_CREATE = &H1
Const WM_DESTROY = &H2
Const WM_MOVE = &H3
Const WM_SIZE = &H5

Const WM_ACTIVATE = &H6
'
'  WM_ACTIVATE state values

Const WA_INACTIVE = 0
Const WA_ACTIVE = 1
Const WA_CLICKACTIVE = 2

Const WM_SETFOCUS = &H7
Const WM_KILLFOCUS = &H8
Const WM_ENABLE = &HA
Const WM_SETREDRAW = &HB
Const WM_SETTEXT = &HC
Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
Const WM_PAINT = &HF
Const WM_CLOSE = &H10
Const WM_QUERYENDSESSION = &H11
Const WM_QUIT = &H12
Const WM_QUERYOPEN = &H13
Const WM_ERASEBKGND = &H14
Const WM_SYSCOLORCHANGE = &H15
Const WM_ENDSESSION = &H16
Const WM_SHOWWINDOW = &H18
Const WM_WININICHANGE = &H1A
Const WM_DEVMODECHANGE = &H1B
Const WM_ACTIVATEAPP = &H1C
Const WM_FONTCHANGE = &H1D
Const WM_TIMECHANGE = &H1E
Const WM_CANCELMODE = &H1F
Const WM_SETCURSOR = &H20
Const WM_MOUSEACTIVATE = &H21
Const WM_CHILDACTIVATE = &H22
Const WM_QUEUESYNC = &H23

Const WM_GETMINMAXINFO = &H24

Const WM_PAINTICON = &H26
Const WM_ICONERASEBKGND = &H27
Const WM_NEXTDLGCTL = &H28
Const WM_SPOOLERSTATUS = &H2A
Const WM_DRAWITEM = &H2B
Const WM_MEASUREITEM = &H2C
Const WM_DELETEITEM = &H2D
Const WM_VKEYTOITEM = &H2E
Const WM_CHARTOITEM = &H2F
Const WM_SETFONT = &H30
Const WM_GETFONT = &H31
Const WM_SETHOTKEY = &H32
Const WM_GETHOTKEY = &H33
Const WM_QUERYDRAGICON = &H37
Const WM_COMPAREITEM = &H39
Const WM_COMPACTING = &H41
Const WM_OTHERWINDOWCREATED = &H42               '  no longer suported
Const WM_OTHERWINDOWDESTROYED = &H43             '  no longer suported
Const WM_COMMNOTIFY = &H44                       '  no longer suported

' notifications passed in low word of lParam on WM_COMMNOTIFY messages
Const CN_RECEIVE = &H1
Const CN_TRANSMIT = &H2
Const CN_EVENT = &H4

Const WM_WINDOWPOSCHANGING = &H46
Const WM_WINDOWPOSCHANGED = &H47

Const WM_POWER = &H48
'
'  wParam for WM_POWER window message and DRV_POWER driver notification

Const PWR_OK = 1
Const PWR_FAIL = (-1)
Const PWR_SUSPENDREQUEST = 1
Const PWR_SUSPENDRESUME = 2
Const PWR_CRITICALRESUME = 3

Const WM_COPYDATA = &H4A
Const WM_CANCELJOURNAL = &H4B

Const WM_NCCREATE = &H81
Const WM_NCDESTROY = &H82
Const WM_NCCALCSIZE = &H83
Const WM_NCHITTEST = &H84
Const WM_NCPAINT = &H85
Const WM_NCACTIVATE = &H86
Const WM_GETDLGCODE = &H87
Const WM_NCMOUSEMOVE = &HA0
Const WM_NCLBUTTONDOWN = &HA1
Const WM_NCLBUTTONUP = &HA2
Const WM_NCLBUTTONDBLCLK = &HA3
Const WM_NCRBUTTONDOWN = &HA4
Const WM_NCRBUTTONUP = &HA5
Const WM_NCRBUTTONDBLCLK = &HA6
Const WM_NCMBUTTONDOWN = &HA7
Const WM_NCMBUTTONUP = &HA8
Const WM_NCMBUTTONDBLCLK = &HA9

Const WM_KEYFIRST = &H100
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const WM_CHAR = &H102
Const WM_DEADCHAR = &H103
Const WM_SYSKEYDOWN = &H104
Const WM_SYSKEYUP = &H105
Const WM_SYSCHAR = &H106
Const WM_SYSDEADCHAR = &H107
Const WM_KEYLAST = &H108
Const WM_INITDIALOG = &H110
Const WM_COMMAND = &H111
Const WM_SYSCOMMAND = &H112
Const WM_TIMER = &H113
Const WM_HSCROLL = &H114
Const WM_VSCROLL = &H115
Const WM_INITMENU = &H116
Const WM_INITMENUPOPUP = &H117
Const WM_MENUSELECT = &H11F
Const WM_MENUCHAR = &H120
Const WM_ENTERIDLE = &H121

Const WM_CTLCOLORMSGBOX = &H132
Const WM_CTLCOLOREDIT = &H133
Const WM_CTLCOLORLISTBOX = &H134
Const WM_CTLCOLORBTN = &H135
Const WM_CTLCOLORDLG = &H136
Const WM_CTLCOLORSCROLLBAR = &H137
Const WM_CTLCOLORSTATIC = &H138

Const WM_MOUSEFIRST = &H200
Const WM_MOUSEMOVE = &H200
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const WM_LBUTTONDBLCLK = &H203
Const WM_RBUTTONDOWN = &H204
Const WM_RBUTTONUP = &H205
Const WM_RBUTTONDBLCLK = &H206
Const WM_MBUTTONDOWN = &H207
Const WM_MBUTTONUP = &H208
Const WM_MBUTTONDBLCLK = &H209
Const WM_MOUSELAST = &H209

Const WM_PARENTNOTIFY = &H210
Const WM_ENTERMENULOOP = &H211
Const WM_EXITMENULOOP = &H212
Const WM_MDICREATE = &H220
Const WM_MDIDESTROY = &H221
Const WM_MDIACTIVATE = &H222
Const WM_MDIRESTORE = &H223
Const WM_MDINEXT = &H224
Const WM_MDIMAXIMIZE = &H225
Const WM_MDITILE = &H226
Const WM_MDICASCADE = &H227
Const WM_MDIICONARRANGE = &H228
Const WM_MDIGETACTIVE = &H229
Const WM_MDISETMENU = &H230
Const WM_DROPFILES = &H233
Const WM_MDIREFRESHMENU = &H234


Const WM_CUT = &H300
Const WM_COPY = &H301
Const WM_PASTE = &H302
Const WM_CLEAR = &H303
Const WM_UNDO = &H304
Const WM_RENDERFORMAT = &H305
Const WM_RENDERALLFORMATS = &H306
Const WM_DESTROYCLIPBOARD = &H307
Const WM_DRAWCLIPBOARD = &H308
Const WM_PAINTCLIPBOARD = &H309
Const WM_VSCROLLCLIPBOARD = &H30A
Const WM_SIZECLIPBOARD = &H30B
Const WM_ASKCBFORMATNAME = &H30C
Const WM_CHANGECBCHAIN = &H30D
Const WM_HSCROLLCLIPBOARD = &H30E
Const WM_QUERYNEWPALETTE = &H30F
Const WM_PALETTEISCHANGING = &H310
Const WM_PALETTECHANGED = &H311
Const WM_HOTKEY = &H312

Const WM_PENWINFIRST = &H380
Const WM_PENWINLAST = &H38F

' NOTE: All Message Numbers below 0x0400 are RESERVED.

' Private Window Messages Start Here:
Const WM_USER = &H400

' WM_SYNCTASK Commands
Const ST_BEGINSWP = 0
Const ST_ENDSWP = 1

' WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes
Const HTERROR = (-2)
Const HTTRANSPARENT = (-1)
Const HTNOWHERE = 0
Const HTCLIENT = 1
Const HTCAPTION = 2
Const HTSYSMENU = 3
Const HTGROWBOX = 4
Const HTSIZE = HTGROWBOX
Const HTMENU = 5
Const HTHSCROLL = 6
Const HTVSCROLL = 7
Const HTMINBUTTON = 8
Const HTMAXBUTTON = 9
Const HTLEFT = 10
Const HTRIGHT = 11
Const HTTOP = 12
Const HTTOPLEFT = 13
Const HTTOPRIGHT = 14
Const HTBOTTOM = 15
Const HTBOTTOMLEFT = 16
Const HTBOTTOMRIGHT = 17
Const HTBORDER = 18
Const HTREDUCE = HTMINBUTTON
Const HTZOOM = HTMAXBUTTON
Const HTSIZEFIRST = HTLEFT
Const HTSIZELAST = HTBOTTOMRIGHT

'  SendMessageTimeout values
Const SMTO_NORMAL = &H0
Const SMTO_BLOCK = &H1
Const SMTO_ABORTIFHUNG = &H2

' WM_MOUSEACTIVATE Return Codes
Const MA_ACTIVATE = 1
Const MA_ACTIVATEANDEAT = 2
Const MA_NOACTIVATE = 3
Const MA_NOACTIVATEANDEAT = 4

Declare Function RegisterWindowMessage Lib "Coredll" Alias "RegisterWindowMessageW" (ByVal lpString As String) As Long

' WM_SIZE message wParam values
Const SIZE_RESTORED = 0
Const SIZE_MINIMIZED = 1
Const SIZE_MAXIMIZED = 2
Const SIZE_MAXSHOW = 3
Const SIZE_MAXHIDE = 4

' Obsolete constant names
Const SIZENORMAL = SIZE_RESTORED
Const SIZEICONIC = SIZE_MINIMIZED
Const SIZEFULLSCREEN = SIZE_MAXIMIZED
Const SIZEZOOMSHOW = SIZE_MAXSHOW
Const SIZEZOOMHIDE = SIZE_MAXHIDE

' WM_WINDOWPOSCHANGING/CHANGED struct pointed to by lParam

' WM_NCCALCSIZE return flags
Const WVR_ALIGNTOP = &H10
Const WVR_ALIGNLEFT = &H20
Const WVR_ALIGNBOTTOM = &H40
Const WVR_ALIGNRIGHT = &H80
Const WVR_HREDRAW = &H100
Const WVR_VREDRAW = &H200
Const WVR_REDRAW = (WVR_HREDRAW Or WVR_VREDRAW)
Const WVR_VALIDRECTS = &H400

' Key State Masks for Mouse Messages
Const MK_LBUTTON = &H1
Const MK_RBUTTON = &H2
Const MK_SHIFT = &H4
Const MK_CONTROL = &H8
Const MK_MBUTTON = &H10

' Window Styles
Const WS_OVERLAPPED = &H0&
Const WS_POPUP = &H80000000
Const WS_CHILD = &H40000000
Const WS_MINIMIZE = &H20000000
Const WS_VISIBLE = &H10000000
Const WS_DISABLED = &H8000000
Const WS_CLIPSIBLINGS = &H4000000
Const WS_CLIPCHILDREN = &H2000000
Const WS_MAXIMIZE = &H1000000
Const WS_CAPTION = &HC00000                  '  WS_BORDER Or WS_DLGFRAME
Const WS_BORDER = &H800000
Const WS_DLGFRAME = &H400000
Const WS_VSCROLL = &H200000
Const WS_HSCROLL = &H100000
Const WS_SYSMENU = &H80000
Const WS_THICKFRAME = &H40000
Const WS_GROUP = &H20000
Const WS_TABSTOP = &H10000

Const WS_MINIMIZEBOX = &H20000
Const WS_MAXIMIZEBOX = &H10000

Const WS_TILED = WS_OVERLAPPED
Const WS_ICONIC = WS_MINIMIZE
Const WS_SIZEBOX = WS_THICKFRAME
Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Const WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW

'
'   Common Window Styles
'  /


Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)

Const WS_CHILDWINDOW = (WS_CHILD)

' Extended Window Styles
Const WS_EX_DLGMODALFRAME = &H1&
Const WS_EX_NOPARENTNOTIFY = &H4&
Const WS_EX_TOPMOST = &H8&
Const WS_EX_ACCEPTFILES = &H10&
Const WS_EX_TRANSPARENT = &H20&

' Class styles
Const CS_VREDRAW = &H1
Const CS_HREDRAW = &H2
Const CS_KEYCVTWINDOW = &H4
Const CS_DBLCLKS = &H8
Const CS_OWNDC = &H20
Const CS_CLASSDC = &H40
Const CS_PARENTDC = &H80
Const CS_NOKEYCVT = &H100
Const CS_NOCLOSE = &H200
Const CS_SAVEBITS = &H800
Const CS_BYTEALIGNCLIENT = &H1000
Const CS_BYTEALIGNWINDOW = &H2000
Const CS_PUBLICCLASS = &H4000

' Predefined Clipboard Formats
Const CF_TEXT = 1
Const CF_BITMAP = 2
Const CF_METAFILEPICT = 3
Const CF_SYLK = 4
Const CF_DIF = 5
Const CF_TIFF = 6
Const CF_OEMTEXT = 7
Const CF_DIB = 8
Const CF_PALETTE = 9
Const CF_PENDATA = 10
Const CF_RIFF = 11
Const CF_WAVE = 12
Const CF_UNICODETEXT = 13
Const CF_ENHMETAFILE = 14

Const CF_OWNERDISPLAY = &H80
Const CF_DSPTEXT = &H81
Const CF_DSPBITMAP = &H82
Const CF_DSPMETAFILEPICT = &H83
Const CF_DSPENHMETAFILE = &H8E

' "Private" formats don't get GlobalFree()'d
Const CF_PRIVATEFIRST = &H200
Const CF_PRIVATELAST = &H2FF

' "GDIOBJ" formats do get DeleteObject()'d
Const CF_GDIOBJFIRST = &H300
Const CF_GDIOBJLAST = &H3FF

'  Defines for the fVirt field of the Accelerator table structure.
Const FVIRTKEY = True          '  Assumed to be == TRUE
Const FNOINVERT = &H2
Const FSHIFT = &H4
Const FCONTROL = &H8
Const FALT = &H10

Const WPF_SETMINPOSITION = &H1
Const WPF_RESTORETOMAXIMIZED = &H2

' Owner draw control types
Const ODT_MENU = 1
Const ODT_LISTBOX = 2
Const ODT_COMBOBOX = 3
Const ODT_BUTTON = 4

' Owner draw actions
Const ODA_DRAWENTIRE = &H1
Const ODA_SELECT = &H2
Const ODA_FOCUS = &H4

' Owner draw state
Const ODS_SELECTED = &H1
Const ODS_GRAYED = &H2
Const ODS_DISABLED = &H4
Const ODS_CHECKED = &H8
Const ODS_FOCUS = &H10


' Message Function Templates

' PeekMessage() Options
Const PM_NOREMOVE = &H0
Const PM_REMOVE = &H1
Const PM_NOYIELD = &H2

Declare Function RegisterHotKey Lib "Coredll" Alias "RegisterHotKey" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "Coredll" Alias "UnregisterHotKey" (ByVal hwnd As Long, ByVal id As Long) As Long

Const MOD_ALT = &H1
Const MOD_CONTROL = &H2
Const MOD_SHIFT = &H4

Const IDHOT_SNAPWINDOW = (-1)    '  SHIFT-PRINTSCRN
Const IDHOT_SNAPDESKTOP = (-2)    '  PRINTSCRN

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

Const READAPI = 0        '  Flags for _lopen
Const WRITEAPI = 1
Const READ_WRITE = 2

Declare Function ExitWindowsEx Lib "Coredll" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Declare Function GetMessagePos Lib "Coredll" Alias "GetMessagePos" () As Long
Declare Function SendMessage Lib "Coredll" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Declare Function SendNotifyMessage Lib "Coredll" Alias "SendNotifyMessageW" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function PostMessage Lib "Coredll" Alias "PostMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function PostThreadMessage Lib "Coredll" Alias "PostThreadMessageW" (ByVal idThread As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

' Special HWND value for use with PostMessage and SendMessage
Const HWND_BROADCAST = &HFFFF&


Declare Function DefWindowProc Lib "Coredll" Alias "DefWindowProcW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Sub PostQuitMessage Lib "Coredll" Alias "PostQuitMessage" (ByVal nExitCode As Long)
Private Declare Function ImageList_GetIcon Lib "Coredll" (ByVal HIMAGELIST As Long, ByVal ImgIndex As Long, hbmMask As Long) As Long

Declare Function GetDoubleClickTime Lib "Coredll" Alias "GetDoubleClickTime" () As Long
Declare Function UnregisterClass Lib "Coredll" Alias "UnregisterClassW" (ByVal lpClassName As String, ByVal hInstance As Long) As Long

Const CW_USEDEFAULT = &H80000000
Const HWND_DESKTOP = 0

Declare Function IsWindow Lib "Coredll" Alias "IsWindow" (ByVal hwnd As Long) As Long
Declare Function IsChild Lib "Coredll" Alias "IsChild" (ByVal hWndParent As Long, ByVal hwnd As Long) As Long
Declare Function DestroyWindow Lib "Coredll" Alias "DestroyWindow" (ByVal hwnd As Long) As Long

Declare Function ShowWindow Lib "Coredll" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Declare Function MoveWindow Lib "Coredll" Alias "MoveWindow" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Declare Function SetWindowPos Lib "Coredll" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Declare Function BeginDeferWindowPos Lib "Coredll" Alias "BeginDeferWindowPos" (ByVal nNumWindows As Long) As Long

Declare Function IsWindowVisible Lib "Coredll" Alias "IsWindowVisible" (ByVal hwnd As Long) As Long
Declare Function BringWindowToTop Lib "Coredll" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long

' SetWindowPos Flags
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20        '  The frame changed: send WM_NCCALCSIZE
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200      '  Don't do owner Z ordering

Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER

' SetWindowPos() hwndInsertAfter values
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

Declare Function SetDlgItemInt Lib "Coredll" Alias "SetDlgItemInt" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wValue As Long, ByVal bSigned As Long) As Long
Declare Function GetDlgItemInt Lib "Coredll" Alias "GetDlgItemInt" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpTranslated As Long, ByVal bSigned As Long) As Long
Declare Function SetDlgItemText Lib "Coredll" Alias "SetDlgItemTextW" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Long
Declare Function GetDlgItemText Lib "Coredll" Alias "GetDlgItemTextW" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Declare Function CheckRadioButton Lib "Coredll" Alias "CheckRadioButtonW" (ByVal hDlg As Long, ByVal nIDFirstButton As Long, ByVal nIDLastButton As Long, ByVal nIDCheckButton As Long) As Long
Declare Function SendDlgItemMessage Lib "Coredll" Alias "SendDlgItemMessageW" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function GetNextDlgGroupItem Lib "Coredll" Alias "GetNextDlgGroupItem" (ByVal hDlg As Long, ByVal hCtl As Long, ByVal bPrevious As Long) As Long
Declare Function GetNextDlgTabItem Lib "Coredll" Alias "GetNextDlgTabItem" (ByVal hDlg As Long, ByVal hCtl As Long, ByVal bPrevious As Long) As Long
Declare Function GetDlgCtrlID Lib "Coredll" Alias "GetDlgCtrlID" (ByVal hwnd As Long) As Long
Declare Function GetDialogBaseUnits Lib "Coredll" Alias "GetDialogBaseUnits" () As Long
Declare Function DefDlgProc Lib "Coredll" Alias "DefDlgProcW" (ByVal hDlg As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const DLGWINDOWEXTRA = 30        '  Window extra bytes needed for private dialog classes

' Clipboard Manager Functions
Declare Function OpenClipboard Lib "Coredll" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
Declare Function CloseClipboard Lib "Coredll" Alias "CloseClipboard" () As Long
Declare Function GetClipboardOwner Lib "Coredll" Alias "GetClipboardOwner" () As Long
Declare Function SetClipboardData Lib "Coredll" Alias "SetClipboardDataW" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Declare Function GetClipboardData Lib "Coredll" Alias "GetClipboardDataW" (ByVal wFormat As Long) As Long
Declare Function RegisterClipboardFormat Lib "Coredll" Alias "RegisterClipboardFormatW" (ByVal lpString As String) As Long
Declare Function CountClipboardFormats Lib "Coredll" Alias "CountClipboardFormats" () As Long
Declare Function EnumClipboardFormats Lib "Coredll" Alias "EnumClipboardFormats" (ByVal wFormat As Long) As Long
Declare Function GetClipboardFormatName Lib "Coredll" Alias "GetClipboardFormatNameW" (ByVal wFormat As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Declare Function EmptyClipboard Lib "Coredll" Alias "EmptyClipboard" () As Long
Declare Function IsClipboardFormatAvailable Lib "Coredll" Alias "IsClipboardFormatAvailable" (ByVal wFormat As Long) As Long
Declare Function GetPriorityClipboardFormat Lib "Coredll" Alias "GetPriorityClipboardFormat" (lpPriorityList As Long, ByVal nCount As Long) As Long
Declare Function GetOpenClipboardWindow Lib "Coredll" Alias "GetOpenClipboardWindow" () As Long
Declare Function CharUpper Lib "Coredll" Alias "CharUpperW" (ByVal lpsz As String) As String
Declare Function CharUpperBuff Lib "Coredll" Alias "CharUpperBuffW" (ByVal lpsz As String, ByVal cchLength As Long) As Long
Declare Function CharLower Lib "Coredll" Alias "CharLowerW" (ByVal lpsz As String) As String
Declare Function CharLowerBuff Lib "Coredll" Alias "CharLowerBuffW" (ByVal lpsz As String, ByVal cchLength As Long) As Long
Declare Function CharNext Lib "Coredll" Alias "CharNextW" (ByVal lpsz As String) As String
Declare Function CharPrev Lib "Coredll" Alias "CharPrevW" (ByVal lpszStart As String, ByVal lpszCurrent As String) As String

Declare Function SetFocus Lib "Coredll" Alias "SetFocus" (ByVal hwnd As Long) As Long
Declare Function GetFocus Lib "Coredll" Alias "GetFocus" () As Long
Declare Function GetActiveWindow Lib "Coredll" Alias "GetActiveWindow" () As Long

' Keyboard Information Routines
Declare Function GetKeyState Lib "Coredll" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer
Declare Function GetAsyncKeyState Lib "Coredll" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer

Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2

Const MOUSEEVENTF_MOVE = &H1 '  mouse move
Const MOUSEEVENTF_LEFTDOWN = &H2 '  left button down
Const MOUSEEVENTF_LEFTUP = &H4 '  left button up
Const MOUSEEVENTF_RIGHTDOWN = &H8 '  right button down
Const MOUSEEVENTF_RIGHTUP = &H10 '  right button up
Const MOUSEEVENTF_MIDDLEDOWN = &H20 '  middle button down
Const MOUSEEVENTF_MIDDLEUP = &H40 '  middle button up
Const MOUSEEVENTF_ABSOLUTE = &H8000 '  absolute move
Declare Function MapVirtualKey Lib "Coredll" Alias "MapVirtualKeyW" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Declare Function SetCapture Lib "Coredll" Alias "SetCapture" (ByVal hwnd As Long) As Long
Declare Function ReleaseCapture Lib "Coredll" Alias "ReleaseCapture" () As Long

Declare Function MsgWaitForMultipleObjects Lib "Coredll" Alias "MsgWaitForMultipleObjectsEx" (ByVal nCount As Long, pHandles As Long, ByVal fWaitAll As Long, ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long

' GetQueueStatus flags
Const QS_KEY = &H1
Const QS_MOUSEMOVE = &H2
Const QS_MOUSEBUTTON = &H4
Const QS_POSTMESSAGE = &H8
Const QS_TIMER = &H10
Const QS_PAINT = &H20
Const QS_SENDMESSAGE = &H40
Const QS_HOTKEY = &H80

Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)

Const QS_INPUT = (QS_MOUSE Or QS_KEY)

Const QS_ALLEVENTS = (QS_INPUT Or QS_POSTMESSAGE Or QS_TIMER Or QS_PAINT Or QS_HOTKEY)

Const QS_ALLINPUT = (QS_SENDMESSAGE Or QS_PAINT Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)

' Windows Functions
Declare Function KillTimer Lib "Coredll" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Declare Function EnableWindow Lib "Coredll" Alias "EnableWindow" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Declare Function IsWindowEnabled Lib "Coredll" Alias "IsWindowEnabled" (ByVal hwnd As Long) As Long

Declare Function LoadAccelerators Lib "Coredll" Alias "LoadAcceleratorsW" (ByVal hInstance As Long, ByVal lpTableName As String) As Long
Declare Function DestroyAcceleratorTable Lib "Coredll" Alias "DestroyAcceleratorTable" (ByVal haccel As Long) As Long

' GetSystemMetrics() codes
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Const SM_CXVSCROLL = 2
Const SM_CYHSCROLL = 3
Const SM_CYCAPTION = 4
Const SM_CXBORDER = 5
Const SM_CYBORDER = 6
Const SM_CXDLGFRAME = 7
Const SM_CYDLGFRAME = 8
Const SM_CYVTHUMB = 9
Const SM_CXHTHUMB = 10
Const SM_CXICON = 11
Const SM_CYICON = 12
Const SM_CXCURSOR = 13
Const SM_CYCURSOR = 14
Const SM_CYMENU = 15
Const SM_CXFULLSCREEN = 16
Const SM_CYFULLSCREEN = 17
Const SM_CYKANJIWINDOW = 18
Const SM_MOUSEPRESENT = 19
Const SM_CYVSCROLL = 20
Const SM_CXHSCROLL = 21
Const SM_DEBUG = 22
Const SM_SWAPBUTTON = 23
Const SM_RESERVED1 = 24
Const SM_RESERVED2 = 25
Const SM_RESERVED3 = 26
Const SM_RESERVED4 = 27
Const SM_CXMIN = 28
Const SM_CYMIN = 29
Const SM_CXSIZE = 30
Const SM_CYSIZE = 31
Const SM_CXFRAME = 32
Const SM_CYFRAME = 33
Const SM_CXMINTRACK = 34
Const SM_CYMINTRACK = 35
Const SM_CXDOUBLECLK = 36
Const SM_CYDOUBLECLK = 37
Const SM_CXICONSPACING = 38
Const SM_CYICONSPACING = 39
Const SM_MENUDROPALIGNMENT = 40
Const SM_PENWINDOWS = 41
Const SM_DBCSENABLED = 42
Const SM_CMOUSEBUTTONS = 43
Const SM_CMETRICS = 44
Const SM_CXSIZEFRAME = SM_CXFRAME
Const SM_CYSIZEFRAME = SM_CYFRAME
Const SM_CXFIXEDFRAME = SM_CXDLGFRAME 
Const SM_CYFIXEDFRAME = SM_CYDLGFRAME 

Declare Function GetSystemMetrics Lib "Coredll" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Declare Function LoadMenu Lib "Coredll" Alias "LoadMenuW" (ByVal hInstance As Long, ByVal lpString As String) As Long
Declare Function DrawMenuBar Lib "Coredll" Alias "DrawMenuBar" (ByVal hwnd As Long) As Long
Declare Function CreateMenu Lib "Coredll" Alias "CreateMenu" () As Long
Declare Function CreatePopupMenu Lib "Coredll" Alias "CreatePopupMenu" () As Long
Declare Function DestroyMenu Lib "Coredll" Alias "DestroyMenu" (ByVal hMenu As Long) As Long
Declare Function CheckMenuItem Lib "Coredll" Alias "CheckMenuItem" (ByVal hMenu As Long, ByVal wIDCheckItem As Long, ByVal wCheck As Long) As Long
Declare Function EnableMenuItem Lib "Coredll" Alias "EnableMenuItem" (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
Declare Function GetSubMenu Lib "Coredll" Alias "GetSubMenu" (ByVal hMenu As Long, ByVal nPos As Long) As Long

Declare Function RemoveMenu Lib "Coredll" Alias "RemoveMenu" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function DeleteMenu Lib "Coredll" Alias "DeleteMenu" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

' Flags for TrackPopupMenu
Const TPM_LEFTBUTTON = &H0&
Const TPM_RIGHTBUTTON = &H2&
Const TPM_LEFTALIGN = &H0&
Const TPM_CENTERALIGN = &H4&
Const TPM_RIGHTALIGN = &H8&

' DrawText() Format Flags
Const DT_TOP = &H0
Const DT_LEFT = &H0
Const DT_CENTER = &H1
Const DT_RIGHT = &H2
Const DT_VCENTER = &H4
Const DT_BOTTOM = &H8
Const DT_WORDBREAK = &H10
Const DT_SINGLELINE = &H20
Const DT_EXPANDTABS = &H40
Const DT_TABSTOP = &H80
Const DT_NOCLIP = &H100
Const DT_EXTERNALLEADING = &H200
Const DT_CALCRECT = &H400
Const DT_NOPREFIX = &H800
Const DT_INTERNAL = &H1000


Declare Function UpdateWindow Lib "Coredll" Alias "UpdateWindow" (ByVal hwnd As Long) As Long
Declare Function SetActiveWindow Lib "Coredll" Alias "SetActiveWindow" (ByVal hwnd As Long) As Long
Declare Function GetForegroundWindow Lib "Coredll" Alias "GetForegroundWindow" () As Long
Declare Function SetForegroundWindow Lib "Coredll" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long

Declare Function GetDC Lib "Coredll" Alias "GetDC" (ByVal hwnd As Long) As Long

Const DCX_WINDOW = &H1&
Const DCX_CACHE = &H2&
Const DCX_NORESETATTRS = &H4&
Const DCX_CLIPCHILDREN = &H8&
Const DCX_CLIPSIBLINGS = &H10&
Const DCX_PARENTCLIP = &H20&

Const DCX_EXCLUDERGN = &H40&
Const DCX_INTERSECTRGN = &H80&

Const DCX_EXCLUDEUPDATE = &H100&
Const DCX_INTERSECTUPDATE = &H200&

Const DCX_LOCKWINDOWUPDATE = &H400&

Const DCX_NORECOMPUTE = &H100000
Const DCX_VALIDATE = &H200000

Declare Function GetWindowDC Lib "Coredll" Alias "GetWindowDC" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "Coredll" Alias "ReleaseDC" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Declare Function GetUpdateRgn Lib "Coredll" Alias "GetUpdateRgn" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal fErase As Long) As Long
Declare Function InvalidateRect Lib "Coredll" Alias "InvalidateRect" (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long
Declare Function ValidateRect Lib "Coredll" Alias "ValidateRect" (ByVal hwnd As Long, lpRect As Long) As Long

Const RDW_INVALIDATE = &H1
Const RDW_INTERNALPAINT = &H2
Const RDW_ERASE = &H4

Const RDW_VALIDATE = &H8
Const RDW_NOINTERNALPAINT = &H10
Const RDW_NOERASE = &H20

Const RDW_NOCHILDREN = &H40
Const RDW_ALLCHILDREN = &H80

Const RDW_UPDATENOW = &H100
Const RDW_ERASENOW = &H200

Const RDW_FRAME = &H400
Const RDW_NOFRAME = &H800


Const SW_SCROLLCHILDREN = &H1
Const SW_INVALIDATE = &H2
Const SW_ERASE = &H4

Declare Function SetScrollPos Lib "Coredll" Alias "SetScrollPos" (ByVal hwnd As Long, ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long
Declare Function SetScrollRange Lib "Coredll" Alias "SetScrollRange" (ByVal hwnd As Long, ByVal nBar As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal bRedraw As Long) As Long

' EnableScrollBar() flags
Const ESB_ENABLE_BOTH = &H0
Const ESB_DISABLE_BOTH = &H3

Const ESB_DISABLE_LEFT = &H1
Const ESB_DISABLE_RIGHT = &H2

Const ESB_DISABLE_UP = &H1
Const ESB_DISABLE_DOWN = &H2

Const ESB_DISABLE_LTUP = ESB_DISABLE_LEFT
Const ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT

Declare Function SetWindowText Lib "Coredll" Alias "SetWindowTextW" (ByVal hwnd As Long, ByVal lpString As String) As Long
Declare Function GetWindowText Lib "Coredll" Alias "GetWindowTextW" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "Coredll" Alias "GetWindowTextLengthW" (ByVal hwnd As Long) As Long

' MessageBox() Flags
Const MB_OK = &H0&
Const MB_OKCANCEL = &H1&
Const MB_ABORTRETRYIGNORE = &H2&
Const MB_YESNOCANCEL = &H3&
Const MB_YESNO = &H4&
Const MB_RETRYCANCEL = &H5&

Const MB_ICONHAND = &H10&
Const MB_ICONQUESTION = &H20&
Const MB_ICONEXCLAMATION = &H30&
Const MB_ICONASTERISK = &H40&

Const MB_ICONINFORMATION = MB_ICONASTERISK
Const MB_ICONSTOP = MB_ICONHAND

Const MB_DEFBUTTON1 = &H0&
Const MB_DEFBUTTON2 = &H100&
Const MB_DEFBUTTON3 = &H200&

Const MB_APPLMODAL = &H0&
Const MB_SYSTEMMODAL = &H1000&
Const MB_TASKMODAL = &H2000&

Const MB_NOFOCUS = &H8000&
Const MB_SETFOREGROUND = &H10000
Const MB_DEFAULT_DESKTOP_ONLY = &H20000

Const MB_TYPEMASK = &HF&
Const MB_ICONMASK = &HF0&
Const MB_DEFMASK = &HF00&
Const MB_MODEMASK = &H3000&
Const MB_MISCMASK = &HC000&

Declare Function MessageBox Lib "Coredll" Alias "MessageBoxW" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Declare Function MessageBeep Lib "Coredll" Alias "MessageBeep" (ByVal wType As Long) As Long

Declare Function ShowCursor Lib "Coredll" Alias "ShowCursor" (ByVal bShow As Long) As Long
Declare Function SetCursorPos Lib "Coredll" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
Declare Function SetCursor Lib "Coredll" Alias "SetCursor" (ByVal hCursor As Long) As Long
Declare Function ClipCursor Lib "Coredll" Alias "ClipCursor" (lpRect As Long) As Long
Declare Function GetCursor Lib "Coredll" Alias "GetCursor" () As Long

Declare Function CreateCaret Lib "Coredll" Alias "CreateCaret" (ByVal hwnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function GetCaretBlinkTime Lib "Coredll" Alias "GetCaretBlinkTime" () As Long
Declare Function DestroyCaret Lib "Coredll" Alias "DestroyCaret" () As Long
Declare Function HideCaret Lib "Coredll" Alias "HideCaret" (ByVal hwnd As Long) As Long
Declare Function ShowCaret Lib "Coredll" Alias "ShowCaret" (ByVal hwnd As Long) As Long
Declare Function SetCaretPos Lib "Coredll" Alias "SetCaretPos" (ByVal x As Long, ByVal y As Long) As Long

Declare Function WindowFromPoint Lib "Coredll" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Declare Function ChildWindowFromPoint Lib "Coredll" Alias "ChildWindowFromPoint" (ByVal hWnd As Long, ByVal xPoint As Long, ByVal yPoint As Long) As Long

' Color Types
Const CTLCOLOR_MSGBOX = 0
Const CTLCOLOR_EDIT = 1
Const CTLCOLOR_LISTBOX = 2
Const CTLCOLOR_BTN = 3
Const CTLCOLOR_DLG = 4
Const CTLCOLOR_SCROLLBAR = 5
Const CTLCOLOR_STATIC = 6
Const CTLCOLOR_MAX = 8   '  three bits max

Const COLOR_SCROLLBAR = 0
Const COLOR_BACKGROUND = 1
Const COLOR_ACTIVECAPTION = 2
Const COLOR_INACTIVECAPTION = 3
Const COLOR_MENU = 4
Const COLOR_WINDOW = 5
Const COLOR_WINDOWFRAME = 6
Const COLOR_MENUTEXT = 7
Const COLOR_WINDOWTEXT = 8
Const COLOR_CAPTIONTEXT = 9
Const COLOR_ACTIVEBORDER = 10
Const COLOR_INACTIVEBORDER = 11
Const COLOR_APPWORKSPACE = 12
Const COLOR_HIGHLIGHT = 13
Const COLOR_HIGHLIGHTTEXT = 14
Const COLOR_BTNFACE = 15
Const COLOR_BTNSHADOW = 16
Const COLOR_GRAYTEXT = 17
Const COLOR_BTNTEXT = 18
Const COLOR_INACTIVECAPTIONTEXT = 19
Const COLOR_BTNHIGHLIGHT = 20

Declare Function GetSysColor Lib "Coredll" Alias "GetSysColor" (ByVal nIndex As Long) As Long
Declare Function SetSysColors Lib "Coredll" Alias "SetSysColors" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long

Declare Function GetWindowLong Lib "Coredll" Alias "GetWindowLongW" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "Coredll" Alias "SetWindowLongW" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetClassLong Lib "Coredll" Alias "GetClassLongW" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetClassLong Lib "Coredll" Alias "SetClassLongW" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function GetParent Lib "Coredll" Alias "GetParent" (ByVal hwnd As Long) As Long
Declare Function SetParent Lib "Coredll" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Declare Function FindWindow Lib "Coredll" Alias "FindWindowW" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function GetClassName Lib "Coredll" Alias "GetClassNameW" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Declare Function GetWindowThreadProcessId Lib "Coredll" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

' GetWindow() Constants
Const GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
Const GW_CHILD = 5
Const GW_MAX = 5

Declare Function GetWindow Lib "Coredll" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

' Menu flags for Add/Check/EnableMenuItem()
Const MF_INSERT = &H0&
Const MF_CHANGE = &H80&
Const MF_APPEND = &H100&
Const MF_DELETE = &H200&
Const MF_REMOVE = &H1000&

Const MF_BYCOMMAND = &H0&
Const MF_BYPOSITION = &H400&

Const MF_SEPARATOR = &H800&

Const MF_ENABLED = &H0&
Const MF_GRAYED = &H1&
Const MF_DISABLED = &H2&

Const MF_UNCHECKED = &H0&
Const MF_CHECKED = &H8&
Const MF_USECHECKBITMAPS = &H200&

Const MF_STRING = &H0&
Const MF_BITMAP = &H4&
Const MF_OWNERDRAW = &H100&

Const MF_POPUP = &H10&
Const MF_MENUBARBREAK = &H20&
Const MF_MENUBREAK = &H40&

Const MF_UNHILITE = &H0&
Const MF_HILITE = &H80&

Const MF_SYSMENU = &H2000&
Const MF_HELP = &H4000&
Const MF_MOUSESELECT = &H8000&


Const MF_END = &H80

' System Menu Command Values


Const SC_SIZE = &HF000&
Const SC_MOVE = &HF010&
Const SC_MINIMIZE = &HF020&
Const SC_MAXIMIZE = &HF030&
Const SC_NEXTWINDOW = &HF040&
Const SC_PREVWINDOW = &HF050&
Const SC_CLOSE = &HF060&
Const SC_VSCROLL = &HF070&
Const SC_HSCROLL = &HF080&
Const SC_MOUSEMENU = &HF090&
Const SC_KEYMENU = &HF100&
Const SC_ARRANGE = &HF110&
Const SC_RESTORE = &HF120&
Const SC_TASKLIST = &HF130&
Const SC_SCREENSAVE = &HF140&
Const SC_HOTKEY = &HF150&

' Obsolete names
Const SC_ICON = SC_MINIMIZE
Const SC_ZOOM = SC_MAXIMIZE

' Resource Loading Routines
Declare Function LoadBitmap Lib "Coredll" Alias "LoadBitmapW" (ByVal hInstance As Long, ByVal lpBitmapName As String) As Long
Declare Function LoadCursor Lib "Coredll" Alias "LoadCursorW" (ByVal hInstance As Long, ByVal lpCursorName As String) As Long
Declare Function CreateCursor Lib "Coredll" Alias "CreateCursor" (ByVal hInstance As Long, ByVal nXhotspot As Long, ByVal nYhotspot As Long, ByVal nWidth As Long, ByVal nHeight As Long, lpANDbitPlane As Byte, lpXORbitPlane As Byte) As Long
Declare Function DestroyCursor Lib "Coredll" Alias "DestroyCursor" (ByVal hCursor As Long) As Long

' Standard Cursor IDs
Const IDC_ARROW = 32512&
Const IDC_IBEAM = 32513&
Const IDC_WAIT = 32514&
Const IDC_CROSS = 32515&
Const IDC_UPARROW = 32516&
Const IDC_SIZE = 32640&
Const IDC_ICON = 32641&
Const IDC_SIZENWSE = 32642&
Const IDC_SIZENESW = 32643&
Const IDC_SIZEWE = 32644&
Const IDC_SIZENS = 32645&
Const IDC_SIZEALL = 32646&
Const IDC_NO = 32648&
Const IDC_APPSTARTING = 32650&


Declare Function LoadIcon Lib "Coredll" Alias "LoadIconW" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
Declare Function DestroyIcon Lib "Coredll" Alias "DestroyIcon" (ByVal hIcon As Long) As Long

' OEM Resource Ordinal Numbers
Const OBM_CLOSE = 32754
Const OBM_UPARROW = 32753
Const OBM_DNARROW = 32752
Const OBM_RGARROW = 32751
Const OBM_LFARROW = 32750
Const OBM_REDUCE = 32749
Const OBM_ZOOM = 32748
Const OBM_RESTORE = 32747
Const OBM_REDUCED = 32746
Const OBM_ZOOMD = 32745
Const OBM_RESTORED = 32744
Const OBM_UPARROWD = 32743
Const OBM_DNARROWD = 32742
Const OBM_RGARROWD = 32741
Const OBM_LFARROWD = 32740
Const OBM_MNARROW = 32739
Const OBM_COMBO = 32738
Const OBM_UPARROWI = 32737
Const OBM_DNARROWI = 32736
Const OBM_RGARROWI = 32735
Const OBM_LFARROWI = 32734

Const OBM_OLD_CLOSE = 32767
Const OBM_SIZE = 32766
Const OBM_OLD_UPARROW = 32765
Const OBM_OLD_DNARROW = 32764
Const OBM_OLD_RGARROW = 32763
Const OBM_OLD_LFARROW = 32762
Const OBM_BTSIZE = 32761
Const OBM_CHECK = 32760
Const OBM_CHECKBOXES = 32759
Const OBM_BTNCORNERS = 32758
Const OBM_OLD_REDUCE = 32757
Const OBM_OLD_ZOOM = 32756
Const OBM_OLD_RESTORE = 32755

Const OCR_NORMAL = 32512
Const OCR_IBEAM = 32513
Const OCR_WAIT = 32514
Const OCR_CROSS = 32515
Const OCR_UP = 32516
Const OCR_SIZE = 32640
Const OCR_ICON = 32641
Const OCR_SIZENWSE = 32642
Const OCR_SIZENESW = 32643
Const OCR_SIZEWE = 32644
Const OCR_SIZENS = 32645
Const OCR_SIZEALL = 32646
Const OCR_ICOCUR = 32647
Const OCR_NO = 32648 ' not in win3.1

Const OIC_SAMPLE = 32512
Const OIC_HAND = 32513
Const OIC_QUES = 32514
Const OIC_BANG = 32515
Const OIC_NOTE = 32516

Const ORD_LANGDRIVER = 1 '  The ordinal number for the entry point of
                                '  language drivers.

' Standard Icon IDs
Const IDI_APPLICATION = 32512&
Const IDI_HAND = 32513&
Const IDI_QUESTION = 32514&
Const IDI_EXCLAMATION = 32515&
Const IDI_ASTERISK = 32516&

Declare Function LoadString Lib "Coredll" Alias "LoadStringW" (ByVal hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, ByVal nBufferMax As Long) As Long

' Dialog Box Command IDs
Const IDOK = 1
Const IDCANCEL = 2
Const IDABORT = 3
Const IDRETRY = 4
Const IDIGNORE = 5
Const IDYES = 6
Const IDNO = 7

' Control Manager Structures and Definitions

' Edit Control Styles
Const ES_LEFT = &H0&
Const ES_CENTER = &H1&
Const ES_RIGHT = &H2&
Const ES_MULTILINE = &H4&
Const ES_UPPERCASE = &H8&
Const ES_LOWERCASE = &H10&
Const ES_PASSWORD = &H20&
Const ES_AUTOVSCROLL = &H40&
Const ES_AUTOHSCROLL = &H80&
Const ES_NOHIDESEL = &H100&
Const ES_OEMCONVERT = &H400&
Const ES_READONLY = &H800&
Const ES_WANTRETURN = &H1000&

' Edit Control Notification Codes
Const EN_SETFOCUS = &H100
Const EN_KILLFOCUS = &H200
Const EN_CHANGE = &H300
Const EN_UPDATE = &H400
Const EN_ERRSPACE = &H500
Const EN_MAXTEXT = &H501
Const EN_HSCROLL = &H601
Const EN_VSCROLL = &H602

' Edit Control Messages
Const EM_GETSEL = &HB0
Const EM_SETSEL = &HB1
Const EM_GETRECT = &HB2
Const EM_SETRECT = &HB3
Const EM_SETRECTNP = &HB4
Const EM_SCROLL = &HB5
Const EM_LINESCROLL = &HB6
Const EM_SCROLLCARET = &HB7
Const EM_GETMODIFY = &HB8
Const EM_SETMODIFY = &HB9
Const EM_GETLINECOUNT = &HBA
Const EM_LINEINDEX = &HBB
Const EM_SETHANDLE = &HBC
Const EM_GETHANDLE = &HBD
Const EM_GETTHUMB = &HBE
Const EM_LINELENGTH = &HC1
Const EM_REPLACESEL = &HC2
Const EM_GETLINE = &HC4
Const EM_LIMITTEXT = &HC5
Const EM_CANUNDO = &HC6
Const EM_UNDO = &HC7
Const EM_FMTLINES = &HC8
Const EM_LINEFROMCHAR = &HC9
Const EM_SETTABSTOPS = &HCB
Const EM_SETPASSWORDCHAR = &HCC
Const EM_EMPTYUNDOBUFFER = &HCD
Const EM_GETFIRSTVISIBLELINE = &HCE
Const EM_SETREADONLY = &HCF
Const EM_SETWORDBREAKPROC = &HD0
Const EM_GETWORDBREAKPROC = &HD1
Const EM_GETPASSWORDCHAR = &HD2

' EDITWORDBREAKPROC code values
Const WB_LEFT = 0
Const WB_RIGHT = 1
Const WB_ISDELIMITER = 2

' Button Control Styles
Const BS_PUSHBUTTON = &H0&
Const BS_DEFPUSHBUTTON = &H1&
Const BS_CHECKBOX = &H2&
Const BS_AUTOCHECKBOX = &H3&
Const BS_RADIOBUTTON = &H4&
Const BS_3STATE = &H5&
Const BS_AUTO3STATE = &H6&
Const BS_GROUPBOX = &H7&
Const BS_USERBUTTON = &H8&
Const BS_AUTORADIOBUTTON = &H9&
Const BS_OWNERDRAW = &HB&
Const BS_LEFTTEXT = &H20&

' User Button Notification Codes
Const BN_CLICKED = 0
Const BN_PAINT = 1
Const BN_HILITE = 2
Const BN_UNHILITE = 3
Const BN_DISABLE = 4
Const BN_DOUBLECLICKED = 5

' Button Control Messages
Const BM_GETCHECK = &HF0
Const BM_SETCHECK = &HF1
Const BM_GETSTATE = &HF2
Const BM_SETSTATE = &HF3
Const BM_SETSTYLE = &HF4

' Static Control Constants
Const SS_LEFT = &H0&
Const SS_CENTER = &H1&
Const SS_RIGHT = &H2&
Const SS_ICON = &H3&
Const SS_BLACKRECT = &H4&
Const SS_GRAYRECT = &H5&
Const SS_WHITERECT = &H6&
Const SS_BLACKFRAME = &H7&
Const SS_GRAYFRAME = &H8&
Const SS_WHITEFRAME = &H9&
Const SS_USERITEM = &HA&
Const SS_SIMPLE = &HB&
Const SS_LEFTNOWORDWRAP = &HC&
Const SS_NOPREFIX = &H80           '  Don't do "&" character translation

' Static Control Mesages
Const STM_SETICON = &H170
Const STM_GETICON = &H171
Const STM_MSGMAX = &H172

Const WC_DIALOG = 8002&

'  Get/SetWindowWord/Long offsets for use with WC_DIALOG windows
Const DWL_MSGRESULT = 0
Const DWL_DLGPROC = 4
Const DWL_USER = 8

' Dialog Manager Routines

' DlgDirList, DlgDirListComboBox flags values
Const DDL_READWRITE = &H0
Const DDL_READONLY = &H1
Const DDL_HIDDEN = &H2
Const DDL_SYSTEM = &H4
Const DDL_DIRECTORY = &H10
Const DDL_ARCHIVE = &H20

Const DDL_POSTMSGS = &H2000
Const DDL_DRIVES = &H4000
Const DDL_EXCLUSIVE = &H8000

' Dialog Styles
Const DS_ABSALIGN = &H1&
Const DS_SYSMODAL = &H2&
Const DS_LOCALEDIT = &H20          '  Edit items get Local storage.
Const DS_SETFONT = &H40            '  User specified font for Dlg controls
Const DS_MODALFRAME = &H80         '  Can be combined with WS_CAPTION
Const DS_NOIDLEMSG = &H100         '  WM_ENTERIDLE message will not be sent
Const DS_SETFOREGROUND = &H200     '  not in win3.1

Const DM_GETDEFID = WM_USER + 0
Const DM_SETDEFID = WM_USER + 1
Const DC_HASDEFID = &H534      '0x534B

' Dialog Codes
Const DLGC_WANTARROWS = &H1              '  Control wants arrow keys
Const DLGC_WANTTAB = &H2                 '  Control wants tab keys
Const DLGC_WANTALLKEYS = &H4             '  Control wants all keys
Const DLGC_WANTMESSAGE = &H4             '  Pass message to control
Const DLGC_HASSETSEL = &H8               '  Understands EM_SETSEL message
Const DLGC_DEFPUSHBUTTON = &H10          '  Default pushbutton
Const DLGC_UNDEFPUSHBUTTON = &H20        '  Non-default pushbutton
Const DLGC_RADIOBUTTON = &H40            '  Radio button
Const DLGC_WANTCHARS = &H80              '  Want WM_CHAR messages
Const DLGC_STATIC = &H100                '  Static item: don't include
Const DLGC_BUTTON = &H2000               '  Button item: can be checked

Const LB_CTLCODE = 0&

' Listbox Return Values
Const LB_OKAY = 0
Const LB_ERR = (-1)
Const LB_ERRSPACE = (-2)

' The idStaticPath parameter to DlgDirList can have the following values
' ORed if the list box should show other details of the files along with
' the name of the files;
' all other details also will be returned

' Listbox Notification Codes
Const LBN_ERRSPACE = (-2)
Const LBN_SELCHANGE = 1
Const LBN_DBLCLK = 2
Const LBN_SELCANCEL = 3
Const LBN_SETFOCUS = 4
Const LBN_KILLFOCUS = 5

' Listbox messages
Const LB_ADDSTRING = &H180
Const LB_INSERTSTRING = &H181
Const LB_DELETESTRING = &H182
Const LB_SELITEMRANGEEX = &H183
Const LB_RESETCONTENT = &H184
Const LB_SETSEL = &H185
Const LB_SETCURSEL = &H186
Const LB_GETSEL = &H187
Const LB_GETCURSEL = &H188
Const LB_GETTEXT = &H189
Const LB_GETTEXTLEN = &H18A
Const LB_GETCOUNT = &H18B
Const LB_SELECTSTRING = &H18C
Const LB_DIR = &H18D
Const LB_GETTOPINDEX = &H18E
Const LB_FINDSTRING = &H18F
Const LB_GETSELCOUNT = &H190
Const LB_GETSELITEMS = &H191
Const LB_SETTABSTOPS = &H192
Const LB_GETHORIZONTALEXTENT = &H193
Const LB_SETHORIZONTALEXTENT = &H194
Const LB_SETCOLUMNWIDTH = &H195
Const LB_ADDFILE = &H196
Const LB_SETTOPINDEX = &H197
Const LB_GETITEMRECT = &H198
Const LB_GETITEMDATA = &H199
Const LB_SETITEMDATA = &H19A
Const LB_SELITEMRANGE = &H19B
Const LB_SETANCHORINDEX = &H19C
Const LB_GETANCHORINDEX = &H19D
Const LB_SETCARETINDEX = &H19E
Const LB_GETCARETINDEX = &H19F
Const LB_SETITEMHEIGHT = &H1A0
Const LB_GETITEMHEIGHT = &H1A1
Const LB_FINDSTRINGEXACT = &H1A2
Const LB_SETLOCALE = &H1A5
Const LB_GETLOCALE = &H1A6
Const LB_SETCOUNT = &H1A7
Const LB_MSGMAX = &H1A8

' Listbox Styles
Const LBS_NOTIFY = &H1&
Const LBS_SORT = &H2&
Const LBS_NOREDRAW = &H4&
Const LBS_MULTIPLESEL = &H8&
Const LBS_OWNERDRAWFIXED = &H10&
Const LBS_OWNERDRAWVARIABLE = &H20&
Const LBS_HASSTRINGS = &H40&
Const LBS_USETABSTOPS = &H80&
Const LBS_NOINTEGRALHEIGHT = &H100&
Const LBS_MULTICOLUMN = &H200&
Const LBS_WANTKEYBOARDINPUT = &H400&
Const LBS_EXTENDEDSEL = &H800&
Const LBS_DISABLENOSCROLL = &H1000&
Const LBS_NODATA = &H2000&
Const LBS_STANDARD = (LBS_NOTIFY Or LBS_SORT Or WS_VSCROLL Or WS_BORDER)

' Combo Box return Values
Const CB_OKAY = 0
Const CB_ERR = (-1)
Const CB_ERRSPACE = (-2)

' Combo Box Notification Codes
Const CBN_ERRSPACE = (-1)
Const CBN_SELCHANGE = 1
Const CBN_DBLCLK = 2
Const CBN_SETFOCUS = 3
Const CBN_KILLFOCUS = 4
Const CBN_EDITCHANGE = 5
Const CBN_EDITUPDATE = 6
Const CBN_DROPDOWN = 7
Const CBN_CLOSEUP = 8
Const CBN_SELENDOK = 9
Const CBN_SELENDCANCEL = 10

' Combo Box styles
Const CBS_SIMPLE = &H1&
Const CBS_DROPDOWN = &H2&
Const CBS_DROPDOWNLIST = &H3&
Const CBS_OWNERDRAWFIXED = &H10&
Const CBS_OWNERDRAWVARIABLE = &H20&
Const CBS_AUTOHSCROLL = &H40&
Const CBS_OEMCONVERT = &H80&
Const CBS_SORT = &H100&
Const CBS_HASSTRINGS = &H200&
Const CBS_NOINTEGRALHEIGHT = &H400&
Const CBS_DISABLENOSCROLL = &H800&

' Combo Box messages
Const CB_GETEDITSEL = &H140
Const CB_LIMITTEXT = &H141
Const CB_SETEDITSEL = &H142
Const CB_ADDSTRING = &H143
Const CB_DELETESTRING = &H144
Const CB_DIR = &H145
Const CB_GETCOUNT = &H146
Const CB_GETCURSEL = &H147
Const CB_GETLBTEXT = &H148
Const CB_GETLBTEXTLEN = &H149
Const CB_INSERTSTRING = &H14A
Const CB_RESETCONTENT = &H14B
Const CB_FINDSTRING = &H14C
Const CB_SELECTSTRING = &H14D
Const CB_SETCURSEL = &H14E
Const CB_SHOWDROPDOWN = &H14F
Const CB_GETITEMDATA = &H150
Const CB_SETITEMDATA = &H151
Const CB_GETDROPPEDCONTROLRECT = &H152
Const CB_SETITEMHEIGHT = &H153
Const CB_GETITEMHEIGHT = &H154
Const CB_SETEXTENDEDUI = &H155
Const CB_GETEXTENDEDUI = &H156
Const CB_GETDROPPEDSTATE = &H157
Const CB_FINDSTRINGEXACT = &H158
Const CB_SETLOCALE = &H159
Const CB_GETLOCALE = &H15A
Const CB_MSGMAX = &H15B

' Scroll Bar Styles
Const SBS_HORZ = &H0&
Const SBS_VERT = &H1&
Const SBS_TOPALIGN = &H2&
Const SBS_LEFTALIGN = &H2&
Const SBS_BOTTOMALIGN = &H4&
Const SBS_RIGHTALIGN = &H4&
Const SBS_SIZEBOXTOPLEFTALIGN = &H2&
Const SBS_SIZEBOXBOTTOMRIGHTALIGN = &H4&
Const SBS_SIZEBOX = &H8&

'  Scroll bar messages
Const SBM_SETPOS = &HE0 ' not in win3.1
Const SBM_GETPOS = &HE1 ' not in win3.1
Const SBM_SETRANGE = &HE2 ' not in win3.1
Const SBM_SETRANGEREDRAW = &HE6 ' not in win3.1
Const SBM_GETRANGE = &HE3 ' not in win3.1
Const SBM_ENABLE_ARROWS = &HE4 ' not in win3.1

Const MDIS_ALLCHILDSTYLES = &H1

' wParam values for WM_MDITILE and WM_MDICASCADE messages.
Const MDITILE_VERTICAL = &H0
Const MDITILE_HORIZONTAL = &H1
Const MDITILE_SKIPDISABLED = &H2


' Commands to pass WinHelp()
Const HELP_CONTEXT = &H1          '  Display topic in ulTopic
Const HELP_QUIT = &H2             '  Terminate help
Const HELP_INDEX = &H3            '  Display index
Const HELP_CONTENTS = &H3&
Const HELP_HELPONHELP = &H4       '  Display help on using help
Const HELP_SETINDEX = &H5         '  Set current Index for multi index help
Const HELP_SETCONTENTS = &H5&
Const HELP_CONTEXTPOPUP = &H8&
Const HELP_FORCEFILE = &H9&
Const HELP_KEY = &H101            '  Display topic for keyword in offabData
Const HELP_COMMAND = &H102&
Const HELP_PARTIALKEY = &H105&
Const HELP_MULTIKEY = &H201&
Const HELP_SETWINPOS = &H203&


' Parameter for SystemParametersInfo()
Const SPI_GETBEEP = 1
Const SPI_SETBEEP = 2
Const SPI_GETMOUSE = 3
Const SPI_SETMOUSE = 4
Const SPI_GETBORDER = 5
Const SPI_SETBORDER = 6
Const SPI_GETKEYBOARDSPEED = 10
Const SPI_SETKEYBOARDSPEED = 11
Const SPI_LANGDRIVER = 12
Const SPI_ICONHORIZONTALSPACING = 13
Const SPI_GETSCREENSAVETIMEOUT = 14
Const SPI_SETSCREENSAVETIMEOUT = 15
Const SPI_GETSCREENSAVEACTIVE = 16
Const SPI_SETSCREENSAVEACTIVE = 17
Const SPI_GETGRIDGRANULARITY = 18
Const SPI_SETGRIDGRANULARITY = 19
Const SPI_SETDESKWALLPAPER = 20
Const SPI_SETDESKPATTERN = 21
Const SPI_GETKEYBOARDDELAY = 22
Const SPI_SETKEYBOARDDELAY = 23
Const SPI_ICONVERTICALSPACING = 24
Const SPI_GETICONTITLEWRAP = 25
Const SPI_SETICONTITLEWRAP = 26
Const SPI_GETMENUDROPALIGNMENT = 27
Const SPI_SETMENUDROPALIGNMENT = 28
Const SPI_SETDOUBLECLKWIDTH = 29
Const SPI_SETDOUBLECLKHEIGHT = 30
Const SPI_GETICONTITLELOGFONT = 31
Const SPI_SETDOUBLECLICKTIME = 32
Const SPI_SETMOUSEBUTTONSWAP = 33
Const SPI_SETICONTITLELOGFONT = 34
Const SPI_GETFASTTASKSWITCH = 35
Const SPI_SETFASTTASKSWITCH = 36
Const SPI_SETDRAGFULLWINDOWS = 37
Const SPI_GETDRAGFULLWINDOWS = 38
Const SPI_GETNONCLIENTMETRICS = 41
Const SPI_SETNONCLIENTMETRICS = 42
Const SPI_GETMINIMIZEDMETRICS = 43
Const SPI_SETMINIMIZEDMETRICS = 44
Const SPI_GETICONMETRICS = 45
Const SPI_SETICONMETRICS = 46
Const SPI_SETWORKAREA = 47
Const SPI_GETWORKAREA = 48
Const SPI_SETPENWINDOWS = 49
Const SPI_GETFILTERKEYS = 50
Const SPI_SETFILTERKEYS = 51
Const SPI_GETTOGGLEKEYS = 52
Const SPI_SETTOGGLEKEYS = 53
Const SPI_GETMOUSEKEYS = 54
Const SPI_SETMOUSEKEYS = 55
Const SPI_GETSHOWSOUNDS = 56
Const SPI_SETSHOWSOUNDS = 57
Const SPI_GETSTICKYKEYS = 58
Const SPI_SETSTICKYKEYS = 59
Const SPI_GETACCESSTIMEOUT = 60
Const SPI_SETACCESSTIMEOUT = 61
Const SPI_GETSERIALKEYS = 62
Const SPI_SETSERIALKEYS = 63
Const SPI_GETSOUNDSENTRY = 64
Const SPI_SETSOUNDSENTRY = 65
Const SPI_GETHIGHCONTRAST = 66
Const SPI_SETHIGHCONTRAST = 67
Const SPI_GETKEYBOARDPREF = 68
Const SPI_SETKEYBOARDPREF = 69
Const SPI_GETSCREENREADER = 70
Const SPI_SETSCREENREADER = 71
Const SPI_GETANIMATION = 72
Const SPI_SETANIMATION = 73
Const SPI_GETFONTSMOOTHING = 74
Const SPI_SETFONTSMOOTHING = 75
Const SPI_SETDRAGWIDTH = 76
Const SPI_SETDRAGHEIGHT = 77
Const SPI_SETHANDHELD = 78
Const SPI_GETLOWPOWERTIMEOUT = 79
Const SPI_GETPOWEROFFTIMEOUT = 80
Const SPI_SETLOWPOWERTIMEOUT = 81
Const SPI_SETPOWEROFFTIMEOUT = 82
Const SPI_GETLOWPOWERACTIVE = 83
Const SPI_GETPOWEROFFACTIVE = 84
Const SPI_SETLOWPOWERACTIVE = 85
Const SPI_SETPOWEROFFACTIVE = 86
Const SPI_SETCURSORS = 87
Const SPI_SETICONS = 88
Const SPI_GETDEFAULTINPUTLANG = 89
Const SPI_SETDEFAULTINPUTLANG = 90
Const SPI_SETLANGTOGGLE = 91
Const SPI_GETWINDOWSEXTENSION = 92
Const SPI_SETMOUSETRAILS = 93
Const SPI_GETMOUSETRAILS = 94
Const SPI_SCREENSAVERRUNNING = 97

' SystemParametersInfo flags
Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2

Declare Function SystemParametersInfo Lib "Coredll" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Long, ByVal fuWinIni As Long) As Long

'  DDE window messages
Const WM_DDE_FIRST = &H3E0
Const WM_DDE_INITIATE = (WM_DDE_FIRST)
Const WM_DDE_TERMINATE = (WM_DDE_FIRST + 1)
Const WM_DDE_ADVISE = (WM_DDE_FIRST + 2)
Const WM_DDE_UNADVISE = (WM_DDE_FIRST + 3)
Const WM_DDE_ACK = (WM_DDE_FIRST + 4)
Const WM_DDE_DATA = (WM_DDE_FIRST + 5)
Const WM_DDE_REQUEST = (WM_DDE_FIRST + 6)
Const WM_DDE_POKE = (WM_DDE_FIRST + 7)
Const WM_DDE_EXECUTE = (WM_DDE_FIRST + 8)
Const WM_DDE_LAST = (WM_DDE_FIRST + 8)

'  conversation states (usState)
Const XST_NULL = 0  '  quiescent states
Const XST_INCOMPLETE = 1
Const XST_CONNECTED = 2
Const XST_INIT1 = 3  '  mid-initiation states
Const XST_INIT2 = 4
Const XST_REQSENT = 5  '  active conversation states
Const XST_DATARCVD = 6
Const XST_POKESENT = 7
Const XST_POKEACKRCVD = 8
Const XST_EXECSENT = 9
Const XST_EXECACKRCVD = 10
Const XST_ADVSENT = 11
Const XST_UNADVSENT = 12
Const XST_ADVACKRCVD = 13
Const XST_UNADVACKRCVD = 14
Const XST_ADVDATASENT = 15
Const XST_ADVDATAACKRCVD = 16

'  used in LOWORD(dwData1) of XTYP_ADVREQ callbacks...
Const CADV_LATEACK = &HFFFF

'  conversation status bits (fsStatus)
Const ST_CONNECTED = &H1
Const ST_ADVISE = &H2
Const ST_ISLOCAL = &H4
Const ST_BLOCKED = &H8
Const ST_CLIENT = &H10
Const ST_TERMINATED = &H20
Const ST_INLIST = &H40
Const ST_BLOCKNEXT = &H80
Const ST_ISSELF = &H100

'  DDE constants for wStatus field
Const DDE_FACK = &H8000
Const DDE_FBUSY = &H4000
Const DDE_FDEFERUPD = &H4000
Const DDE_FACKREQ = &H8000
Const DDE_FRELEASE = &H2000
Const DDE_FREQUESTED = &H1000
Const DDE_FAPPSTATUS = &HFF
Const DDE_FNOTPROCESSED = &H0

Const DDE_FACKRESERVED = (Not (DDE_FACK Or DDE_FBUSY Or DDE_FAPPSTATUS))
Const DDE_FADVRESERVED = (Not (DDE_FACKREQ Or DDE_FDEFERUPD))
Const DDE_FDATRESERVED = (Not (DDE_FACKREQ Or DDE_FRELEASE Or DDE_FREQUESTED))
Const DDE_FPOKRESERVED = (Not (DDE_FRELEASE))

'  message filter hook types
Const MSGF_DDEMGR = &H8001

'  codepage constants
Const CP_WINANSI = 1004  '  default codepage for windows old DDE convs.
Const CP_WINUNICODE = 1200

'  transaction types
Const XTYPF_NOBLOCK = &H2     '  CBR_BLOCK will not work
Const XTYPF_NODATA = &H4     '  DDE_FDEFERUPD
Const XTYPF_ACKREQ = &H8     '  DDE_FACKREQ

Const XCLASS_MASK = &HFC00
Const XCLASS_BOOL = &H1000
Const XCLASS_DATA = &H2000
Const XCLASS_FLAGS = &H4000
Const XCLASS_NOTIFICATION = &H8000

Const XTYP_ERROR = (&H0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_ADVDATA = (&H10 Or XCLASS_FLAGS)
Const XTYP_ADVREQ = (&H20 Or XCLASS_DATA Or XTYPF_NOBLOCK)
Const XTYP_ADVSTART = (&H30 Or XCLASS_BOOL)
Const XTYP_ADVSTOP = (&H40 Or XCLASS_NOTIFICATION)
Const XTYP_EXECUTE = (&H50 Or XCLASS_FLAGS)
Const XTYP_CONNECT = (&H60 Or XCLASS_BOOL Or XTYPF_NOBLOCK)
Const XTYP_CONNECT_CONFIRM = (&H70 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_XACT_COMPLETE = (&H80 Or XCLASS_NOTIFICATION)
Const XTYP_POKE = (&H90 Or XCLASS_FLAGS)
Const XTYP_REGISTER = (&HA0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_REQUEST = (&HB0 Or XCLASS_DATA)
Const XTYP_DISCONNECT = (&HC0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_UNREGISTER = (&HD0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)
Const XTYP_WILDCONNECT = (&HE0 Or XCLASS_DATA Or XTYPF_NOBLOCK)

Const XTYP_MASK = &HF0
Const XTYP_SHIFT = 4  '  shift to turn XTYP_ into an index

'  Timeout constants
Const TIMEOUT_ASYNC = &HFFFF

'  Transaction ID constants
Const QID_SYNC = &HFFFF

' Public strings used in DDE
Const SZDDESYS_TOPIC = "System"
Const SZDDESYS_ITEM_TOPICS = "Topics"
Const SZDDESYS_ITEM_SYSITEMS = "SysItems"
Const SZDDESYS_ITEM_RTNMSG = "ReturnMessage"
Const SZDDESYS_ITEM_STATUS = "Status"
Const SZDDESYS_ITEM_FORMATS = "Formats"
Const SZDDESYS_ITEM_HELP = "Help"
Const SZDDE_ITEM_ITEMLIST = "TopicItemList"

Const CBR_BLOCK = &HFFFF

' Callback filter flags for use with standard apps.
Const CBF_FAIL_SELFCONNECTIONS = &H1000
Const CBF_FAIL_CONNECTIONS = &H2000
Const CBF_FAIL_ADVISES = &H4000
Const CBF_FAIL_EXECUTES = &H8000
Const CBF_FAIL_POKES = &H10000
Const CBF_FAIL_REQUESTS = &H20000
Const CBF_FAIL_ALLSVRXACTIONS = &H3F000

Const CBF_SKIP_CONNECT_CONFIRMS = &H40000
Const CBF_SKIP_REGISTRATIONS = &H80000
Const CBF_SKIP_UNREGISTRATIONS = &H100000
Const CBF_SKIP_DISCONNECTS = &H200000
Const CBF_SKIP_ALLNOTIFICATIONS = &H3C0000

' Application command flags
Const APPCMD_CLIENTONLY = &H10&
Const APPCMD_FILTERINITS = &H20&
Const APPCMD_MASK = &HFF0&

' Application classification flags
Const APPCLASS_STANDARD = &H0&
Const APPCLASS_MASK = &HF&

Const EC_ENABLEALL = 0
Const EC_ENABLEONE = ST_BLOCKNEXT
Const EC_DISABLE = ST_BLOCKED
Const EC_QUERYWAITING = 2

Const DNS_REGISTER = &H1
Const DNS_UNREGISTER = &H2
Const DNS_FILTERON = &H4
Const DNS_FILTEROFF = &H8

Const HDATA_APPOWNED = &H1

Const DMLERR_NO_ERROR = 0                           '  must be 0

Const DMLERR_FIRST = &H4000

Const DMLERR_ADVACKTIMEOUT = &H4000
Const DMLERR_BUSY = &H4001
Const DMLERR_DATAACKTIMEOUT = &H4002
Const DMLERR_DLL_NOT_INITIALIZED = &H4003
Const DMLERR_DLL_USAGE = &H4004
Const DMLERR_EXECACKTIMEOUT = &H4005
Const DMLERR_INVALIDPARAMETER = &H4006
Const DMLERR_LOW_MEMORY = &H4007
Const DMLERR_MEMORY_ERROR = &H4008
Const DMLERR_NOTPROCESSED = &H4009
Const DMLERR_NO_CONV_ESTABLISHED = &H400A
Const DMLERR_POKEACKTIMEOUT = &H400B
Const DMLERR_POSTMSG_FAILED = &H400C
Const DMLERR_REENTRANCY = &H400D
Const DMLERR_SERVER_DIED = &H400E
Const DMLERR_SYS_ERROR = &H400F
Const DMLERR_UNADVACKTIMEOUT = &H4010
Const DMLERR_UNFOUND_QUEUE_ID = &H4011

Const DMLERR_LAST = &H4011


Const MAX_MONITORS = 4
Const APPCLASS_MONITOR = &H1&
Const XTYP_MONITOR = (&HF0 Or XCLASS_NOTIFICATION Or XTYPF_NOBLOCK)

' Callback filter flags for use with MONITOR apps - 0 implies no monitor callbacks
Const MF_HSZ_INFO = &H1000000
Const MF_SENDMSGS = &H2000000
Const MF_POSTMSGS = &H4000000
Const MF_CALLBACKS = &H8000000
Const MF_ERRORS = &H10000000
Const MF_LINKS = &H20000000
Const MF_CONV = &H40000000

Const MF_MASK = &HFF000000

' -----------------------------------------
' Win32 API error code definitions
' -----------------------------------------
' This section contains the error code definitions for the Win32 API functions.

' NO_ERROR
Const NO_ERROR = 0 '  dderror

' The configuration registry database operation completed successfully.
Const ERROR_SUCCESS = 0&

'   Incorrect function.
Const ERROR_INVALID_FUNCTION = 1 '  dderror

'   The system cannot find the file specified.
Const ERROR_FILE_NOT_FOUND = 2&

'   The system cannot find the path specified.
Const ERROR_PATH_NOT_FOUND = 3&

'   The system cannot open the file.
Const ERROR_TOO_MANY_OPEN_FILES = 4&

'   Access is denied.
Const ERROR_ACCESS_DENIED = 5&

'   The handle is invalid.
Const ERROR_INVALID_HANDLE = 6&

'   The storage control blocks were destroyed.
Const ERROR_ARENA_TRASHED = 7&

'   Not enough storage is available to process this command.
Const ERROR_NOT_ENOUGH_MEMORY = 8 '  dderror

'   The storage control block address is invalid.
Const ERROR_INVALID_BLOCK = 9&

'   The environment is incorrect.
Const ERROR_BAD_ENVIRONMENT = 10&

'   An attempt was made to load a program with an
'   incorrect format.
Const ERROR_BAD_FORMAT = 11&

'   The access code is invalid.
Const ERROR_INVALID_ACCESS = 12&

'   The data is invalid.
Const ERROR_INVALID_DATA = 13&

'   Not enough storage is available to complete this operation.
Const ERROR_OUTOFMEMORY = 14&

'   The system cannot find the drive specified.
Const ERROR_INVALID_DRIVE = 15&

'   The directory cannot be removed.
Const ERROR_CURRENT_DIRECTORY = 16&

'   The system cannot move the file
'   to a different disk drive.
Const ERROR_NOT_SAME_DEVICE = 17&

'   There are no more files.
Const ERROR_NO_MORE_FILES = 18&

'   The media is write protected.
Const ERROR_WRITE_PROTECT = 19&

'   The system cannot find the device specified.
Const ERROR_BAD_UNIT = 20&

'   The device is not ready.
Const ERROR_NOT_READY = 21&

'   The device does not recognize the command.
Const ERROR_BAD_COMMAND = 22&

'   Data error (cyclic redundancy check)
Const ERROR_CRC = 23&

'   The program issued a command but the
'   command length is incorrect.
Const ERROR_BAD_LENGTH = 24&

'   The drive cannot locate a specific
'   area or track on the disk.
Const ERROR_SEEK = 25&

'   The specified disk or diskette cannot be accessed.
Const ERROR_NOT_DOS_DISK = 26&

'   The drive cannot find the sector requested.
Const ERROR_SECTOR_NOT_FOUND = 27&

'   The printer is out of paper.
Const ERROR_OUT_OF_PAPER = 28&

'   The system cannot write to the specified device.
Const ERROR_WRITE_FAULT = 29&

'   The system cannot read from the specified device.
Const ERROR_READ_FAULT = 30&

'   A device attached to the system is not functioning.
Const ERROR_GEN_FAILURE = 31&

'   The process cannot access the file because
'   it is being used by another process.
Const ERROR_SHARING_VIOLATION = 32&

'   The process cannot access the file because
'   another process has locked a portion of the file.
Const ERROR_LOCK_VIOLATION = 33&

'   The wrong diskette is in the drive.
'   Insert %2 (Volume Serial Number: %3)
'   into drive %1.
Const ERROR_WRONG_DISK = 34&

'   Too many files opened for sharing.
Const ERROR_SHARING_BUFFER_EXCEEDED = 36&

'   Reached end of file.
Const ERROR_HANDLE_EOF = 38&

'   The disk is full.
Const ERROR_HANDLE_DISK_FULL = 39&

'   The network request is not supported.
Const ERROR_NOT_SUPPORTED = 50&

'   The remote computer is not available.
Const ERROR_REM_NOT_LIST = 51&

'   A duplicate name exists on the network.
Const ERROR_DUP_NAME = 52&

'   The network path was not found.
Const ERROR_BAD_NETPATH = 53&

'   The network is busy.
Const ERROR_NETWORK_BUSY = 54&

'   The specified network resource or device is no longer
'   available.
Const ERROR_DEV_NOT_EXIST = 55 '  dderror

'   The network BIOS command limit has been reached.
Const ERROR_TOO_MANY_CMDS = 56&

'   A network adapter hardware error occurred.
Const ERROR_ADAP_HDW_ERR = 57&

'   The specified server cannot perform the requested
'   operation.
Const ERROR_BAD_NET_RESP = 58&

'   An unexpected network error occurred.
Const ERROR_UNEXP_NET_ERR = 59&

'   The remote adapter is not compatible.
Const ERROR_BAD_REM_ADAP = 60&

'   The printer queue is full.
Const ERROR_PRINTQ_FULL = 61&

'   Space to store the file waiting to be printed is
'   not available on the server.
Const ERROR_NO_SPOOL_SPACE = 62&

'   Your file waiting to be printed was deleted.
Const ERROR_PRINT_CANCELLED = 63&

'   The specified network name is no longer available.
Const ERROR_NETNAME_DELETED = 64&

'   Network access is denied.
Const ERROR_NETWORK_ACCESS_DENIED = 65&

'   The network resource type is not correct.
Const ERROR_BAD_DEV_TYPE = 66&

'   The network name cannot be found.
Const ERROR_BAD_NET_NAME = 67&

'   The name limit for the local computer network
'   adapter card was exceeded.
Const ERROR_TOO_MANY_NAMES = 68&

'   The network BIOS session limit was exceeded.
Const ERROR_TOO_MANY_SESS = 69&

'   The remote server has been paused or is in the
'   process of being started.
Const ERROR_SHARING_PAUSED = 70&

'   The network request was not accepted.
Const ERROR_REQ_NOT_ACCEP = 71&

'   The specified printer or disk device has been paused.
Const ERROR_REDIR_PAUSED = 72&

'   The file exists.
Const ERROR_FILE_EXISTS = 80&

'   The directory or file cannot be created.
Const ERROR_CANNOT_MAKE = 82&

'   Fail on INT 24
Const ERROR_FAIL_I24 = 83&

'   Storage to process this request is not available.
Const ERROR_OUT_OF_STRUCTURES = 84&

'   The local device name is already in use.
Const ERROR_ALREADY_ASSIGNED = 85&

'   The specified network password is not correct.
Const ERROR_INVALID_PASSWORD = 86&

'   The parameter is incorrect.
Const ERROR_INVALID_PARAMETER = 87 '  dderror

'   A write fault occurred on the network.
Const ERROR_NET_WRITE_FAULT = 88&

'   The system cannot start another process at
'   this time.
Const ERROR_NO_PROC_SLOTS = 89&

'   Cannot create another system semaphore.
Const ERROR_TOO_MANY_SEMAPHORES = 100&

'   The exclusive semaphore is owned by another process.
Const ERROR_EXCL_SEM_ALREADY_OWNED = 101&

'   The semaphore is set and cannot be closed.
Const ERROR_SEM_IS_SET = 102&

'   The semaphore cannot be set again.
Const ERROR_TOO_MANY_SEM_REQUESTS = 103&

'   Cannot request exclusive semaphores at interrupt time.
Const ERROR_INVALID_AT_INTERRUPT_TIME = 104&

'   The previous ownership of this semaphore has ended.
Const ERROR_SEM_OWNER_DIED = 105&

'   Insert the diskette for drive %1.
Const ERROR_SEM_USER_LIMIT = 106&

'   Program stopped because alternate diskette was not inserted.
Const ERROR_DISK_CHANGE = 107&

'   The disk is in use or locked by
'   another process.
Const ERROR_DRIVE_LOCKED = 108&

'   The pipe has been ended.
Const ERROR_BROKEN_PIPE = 109&

'   The system cannot open the
'   device or file specified.
Const ERROR_OPEN_FAILED = 110&

'   The file name is too long.
Const ERROR_BUFFER_OVERFLOW = 111&

'   There is not enough space on the disk.
Const ERROR_DISK_FULL = 112&

'   No more internal file identifiers available.
Const ERROR_NO_MORE_SEARCH_HANDLES = 113&

'   The target internal file identifier is incorrect.
Const ERROR_INVALID_TARGET_HANDLE = 114&

'   The IOCTL call made by the application program is
'   not correct.
Const ERROR_INVALID_CATEGORY = 117&

'   The verify-on-write switch parameter value is not
'   correct.
Const ERROR_INVALID_VERIFY_SWITCH = 118&

'   The system does not support the command requested.
Const ERROR_BAD_DRIVER_LEVEL = 119&

'   This function is only valid in Windows NT mode.
Const ERROR_CALL_NOT_IMPLEMENTED = 120&

'   The semaphore timeout period has expired.
Const ERROR_SEM_TIMEOUT = 121&

'   The data area passed to a system call is too
'   small.
Const ERROR_INSUFFICIENT_BUFFER = 122 '  dderror

'   The filename, directory name, or volume label syntax is incorrect.
Const ERROR_INVALID_NAME = 123&

'   The system call level is not correct.
Const ERROR_INVALID_LEVEL = 124&

'   The disk has no volume label.
Const ERROR_NO_VOLUME_LABEL = 125&

'   The specified module could not be found.
Const ERROR_MOD_NOT_FOUND = 126&

'   The specified procedure could not be found.
Const ERROR_PROC_NOT_FOUND = 127&

'   There are no child processes to wait for.
Const ERROR_WAIT_NO_CHILDREN = 128&

'   The %1 application cannot be run in Windows NT mode.
Const ERROR_CHILD_NOT_COMPLETE = 129&

'   Attempt to use a file handle to an open disk partition for an
'   operation other than raw disk I/O.
Const ERROR_DIRECT_ACCESS_HANDLE = 130&

'   An attempt was made to move the file pointer before the beginning of the file.
Const ERROR_NEGATIVE_SEEK = 131&

'   The file pointer cannot be set on the specified device or file.
Const ERROR_SEEK_ON_DEVICE = 132&

'   A JOIN or SUBST command
'   cannot be used for a drive that
'   contains previously joined drives.
Const ERROR_IS_JOIN_TARGET = 133&

'   An attempt was made to use a
'   JOIN or SUBST command on a drive that has
'   already been joined.
Const ERROR_IS_JOINED = 134&

'   An attempt was made to use a
'   JOIN or SUBST command on a drive that has
'   already been substituted.
Const ERROR_IS_SUBSTED = 135&

'   The system tried to delete
'   the JOIN of a drive that is not joined.
Const ERROR_NOT_JOINED = 136&

'   The system tried to delete the
'   substitution of a drive that is not substituted.
Const ERROR_NOT_SUBSTED = 137&

'   The system tried to join a drive
'   to a directory on a joined drive.
Const ERROR_JOIN_TO_JOIN = 138&

'   The system tried to substitute a
'   drive to a directory on a substituted drive.
Const ERROR_SUBST_TO_SUBST = 139&

'   The system tried to join a drive to
'   a directory on a substituted drive.
Const ERROR_JOIN_TO_SUBST = 140&

'   The system tried to SUBST a drive
'   to a directory on a joined drive.
Const ERROR_SUBST_TO_JOIN = 141&

'   The system cannot perform a JOIN or SUBST at this time.
Const ERROR_BUSY_DRIVE = 142&

'   The system cannot join or substitute a
'   drive to or for a directory on the same drive.
Const ERROR_SAME_DRIVE = 143&

'   The directory is not a subdirectory of the root directory.
Const ERROR_DIR_NOT_ROOT = 144&

'   The directory is not empty.
Const ERROR_DIR_NOT_EMPTY = 145&

'   The path specified is being used in
'   a substitute.
Const ERROR_IS_SUBST_PATH = 146&

'   Not enough resources are available to
'   process this command.
Const ERROR_IS_JOIN_PATH = 147&

'   The path specified cannot be used at this time.
Const ERROR_PATH_BUSY = 148&

'   An attempt was made to join
'   or substitute a drive for which a directory
'   on the drive is the target of a previous
'   substitute.
Const ERROR_IS_SUBST_TARGET = 149&

'   System trace information was not specified in your
'   CONFIG.SYS file, or tracing is disallowed.
Const ERROR_SYSTEM_TRACE = 150&

'   The number of specified semaphore events for
'   DosMuxSemWait is not correct.
Const ERROR_INVALID_EVENT_COUNT = 151&

'   DosMuxSemWait did not execute; too many semaphores
'   are already set.
Const ERROR_TOO_MANY_MUXWAITERS = 152&

'   The DosMuxSemWait list is not correct.
Const ERROR_INVALID_LIST_FORMAT = 153&

'   The volume label you entered exceeds the
'   11 character limit.  The first 11 characters were written
'   to disk.  Any characters that exceeded the 11 character limit
'   were automatically deleted.
Const ERROR_LABEL_TOO_LONG = 154&

'   Cannot create another thread.
Const ERROR_TOO_MANY_TCBS = 155&

'   The recipient process has refused the signal.
Const ERROR_SIGNAL_REFUSED = 156&

'   The segment is already discarded and cannot be locked.
Const ERROR_DISCARDED = 157&

'   The segment is already unlocked.
Const ERROR_NOT_LOCKED = 158&

'   The address for the thread ID is not correct.
Const ERROR_BAD_THREADID_ADDR = 159&

'   The argument string passed to DosExecPgm is not correct.
Const ERROR_BAD_ARGUMENTS = 160&

'   The specified path is invalid.
Const ERROR_BAD_PATHNAME = 161&

'   A signal is already pending.
Const ERROR_SIGNAL_PENDING = 162&

'   No more threads can be created in the system.
Const ERROR_MAX_THRDS_REACHED = 164&

'   Unable to lock a region of a file.
Const ERROR_LOCK_FAILED = 167&

'   The requested resource is in use.
Const ERROR_BUSY = 170&

'   A lock request was not outstanding for the supplied cancel region.
Const ERROR_CANCEL_VIOLATION = 173&

'   The file system does not support atomic changes to the lock type.
Const ERROR_ATOMIC_LOCKS_NOT_SUPPORTED = 174&

'   The system detected a segment number that was not correct.
Const ERROR_INVALID_SEGMENT_NUMBER = 180&

'   The operating system cannot run %1.
Const ERROR_INVALID_ORDINAL = 182&

'   Cannot create a file when that file already exists.
Const ERROR_ALREADY_EXISTS = 183&

'   The flag passed is not correct.
Const ERROR_INVALID_FLAG_NUMBER = 186&

'   The specified system semaphore name was not found.
Const ERROR_SEM_NOT_FOUND = 187&

'   The operating system cannot run %1.
Const ERROR_INVALID_STARTING_CODESEG = 188&

'   The operating system cannot run %1.
Const ERROR_INVALID_STACKSEG = 189&

'   The operating system cannot run %1.
Const ERROR_INVALID_MODULETYPE = 190&

'   Cannot run %1 in Windows NT mode.
Const ERROR_INVALID_EXE_SIGNATURE = 191&

'   The operating system cannot run %1.
Const ERROR_EXE_MARKED_INVALID = 192&

'   %1 is not a valid Windows NT application.
Const ERROR_BAD_EXE_FORMAT = 193&

'   The operating system cannot run %1.
Const ERROR_ITERATED_DATA_EXCEEDS_64k = 194&

'   The operating system cannot run %1.
Const ERROR_INVALID_MINALLOCSIZE = 195&

'   The operating system cannot run this
'   application program.
Const ERROR_DYNLINK_FROM_INVALID_RING = 196&

'   The operating system is not presently
'   configured to run this application.
Const ERROR_IOPL_NOT_ENABLED = 197&

'   The operating system cannot run %1.
Const ERROR_INVALID_SEGDPL = 198&

'   The operating system cannot run this
'   application program.
Const ERROR_AUTODATASEG_EXCEEDS_64k = 199&

'   The code segment cannot be greater than or equal to 64KB.
Const ERROR_RING2SEG_MUST_BE_MOVABLE = 200&

'   The operating system cannot run %1.
Const ERROR_RELOC_CHAIN_XEEDS_SEGLIM = 201&

'   The operating system cannot run %1.
Const ERROR_INFLOOP_IN_RELOC_CHAIN = 202&

'   The system could not find the environment
'   option that was entered.
Const ERROR_ENVVAR_NOT_FOUND = 203&

'   No process in the command subtree has a
'   signal handler.
Const ERROR_NO_SIGNAL_SENT = 205&

'   The filename or extension is too long.
Const ERROR_FILENAME_EXCED_RANGE = 206&

'   The ring 2 stack is in use.
Const ERROR_RING2_STACK_IN_USE = 207&

'   The Global filename characters,  or ?, are entered
'   incorrectly or too many Global filename characters are specified.
Const ERROR_META_EXPANSION_TOO_LONG = 208&

'   The signal being posted is not correct.
Const ERROR_INVALID_SIGNAL_NUMBER = 209&

'   The signal handler cannot be set.
Const ERROR_THREAD_1_INACTIVE = 210&

'   The segment is locked and cannot be reallocated.
Const ERROR_LOCKED = 212&

'   Too many dynamic link modules are attached to this
'   program or dynamic link module.
Const ERROR_TOO_MANY_MODULES = 214&

'   Can't nest calls to LoadModule.
Const ERROR_NESTING_NOT_ALLOWED = 215&

'   The pipe state is invalid.
Const ERROR_BAD_PIPE = 230&

'   All pipe instances are busy.
Const ERROR_PIPE_BUSY = 231&

'   The pipe is being closed.
Const ERROR_NO_DATA = 232&

'   No process is on the other end of the pipe.
Const ERROR_PIPE_NOT_CONNECTED = 233&

'   More data is available.
Const ERROR_MORE_DATA = 234 '  dderror

'   The session was cancelled.
Const ERROR_VC_DISCONNECTED = 240&

'   The specified extended attribute name was invalid.
Const ERROR_INVALID_EA_NAME = 254&

'   The extended attributes are inconsistent.
Const ERROR_EA_LIST_INCONSISTENT = 255&

'   No more data is available.
Const ERROR_NO_MORE_ITEMS = 259&

'   The Copy API cannot be used.
Const ERROR_CANNOT_COPY = 266&

'   The directory name is invalid.
Const ERROR_DIRECTORY = 267&

'   The extended attributes did not fit in the buffer.
Const ERROR_EAS_DIDNT_FIT = 275&

'   The extended attribute file on the mounted file system is corrupt.
Const ERROR_EA_FILE_CORRUPT = 276&

'   The extended attribute table file is full.
Const ERROR_EA_TABLE_FULL = 277&

'   The specified extended attribute handle is invalid.
Const ERROR_INVALID_EA_HANDLE = 278&

'   The mounted file system does not support extended attributes.
Const ERROR_EAS_NOT_SUPPORTED = 282&

'   Attempt to release mutex not owned by caller.
Const ERROR_NOT_OWNER = 288&

'   Too many posts were made to a semaphore.
Const ERROR_TOO_MANY_POSTS = 298&

'   The system cannot find message for message number 0x%1
'   in message file for %2.
Const ERROR_MR_MID_NOT_FOUND = 317&

'   Attempt to access invalid address.
Const ERROR_INVALID_ADDRESS = 487&

'   Arithmetic result exceeded 32 bits.
Const ERROR_ARITHMETIC_OVERFLOW = 534&

'   There is a process on other end of the pipe.
Const ERROR_PIPE_CONNECTED = 535&

'   Waiting for a process to open the other end of the pipe.
Const ERROR_PIPE_LISTENING = 536&

'   Access to the extended attribute was denied.
Const ERROR_EA_ACCESS_DENIED = 994&

'   The I/O operation has been aborted because of either a thread exit
'   or an application request.
Const ERROR_OPERATION_ABORTED = 995&

'   Overlapped I/O event is not in a signalled state.
Const ERROR_IO_INCOMPLETE = 996&

'   Overlapped I/O operation is in progress.
Const ERROR_IO_PENDING = 997 '  dderror

'   Invalid access to memory location.
Const ERROR_NOACCESS = 998&

'   Error performing inpage operation.
Const ERROR_SWAPERROR = 999&

'   Recursion too deep, stack overflowed.
Const ERROR_STACK_OVERFLOW = 1001&

'   The window cannot act on the sent message.
Const ERROR_INVALID_MESSAGE = 1002&

'   Cannot complete this function.
Const ERROR_CAN_NOT_COMPLETE = 1003&

'   Invalid flags.
Const ERROR_INVALID_FLAGS = 1004&

'   The volume does not contain a recognized file system.
'   Please make sure that all required file system drivers are loaded and that the
'   volume is not corrupt.
Const ERROR_UNRECOGNIZED_VOLUME = 1005&

'   The volume for a file has been externally altered such that the
'   opened file is no longer valid.
Const ERROR_FILE_INVALID = 1006&

'   The requested operation cannot be performed in full-screen mode.
Const ERROR_FULLSCREEN_MODE = 1007&

'   An attempt was made to reference a token that does not exist.
Const ERROR_NO_TOKEN = 1008&

'   The configuration registry database is corrupt.
Const ERROR_BADDB = 1009&

'   The configuration registry key is invalid.
Const ERROR_BADKEY = 1010&

'   The configuration registry key could not be opened.
Const ERROR_CANTOPEN = 1011&

'   The configuration registry key could not be read.
Const ERROR_CANTREAD = 1012&

'   The configuration registry key could not be written.
Const ERROR_CANTWRITE = 1013&

'   One of the files in the Registry database had to be recovered
'   by use of a log or alternate copy.  The recovery was successful.
Const ERROR_REGISTRY_RECOVERED = 1014&

'   The Registry is corrupt. The structure of one of the files that contains
'   Registry data is corrupt, or the system's image of the file in memory
'   is corrupt, or the file could not be recovered because the alternate
'   copy or log was absent or corrupt.
Const ERROR_REGISTRY_CORRUPT = 1015&

'   An I/O operation initiated by the Registry failed unrecoverably.
'   The Registry could not read in, or write out, or flush, one of the files
'   that contain the system's image of the Registry.
Const ERROR_REGISTRY_IO_FAILED = 1016&

'   The system has attempted to load or restore a file into the Registry, but the
'   specified file is not in a Registry file format.
Const ERROR_NOT_REGISTRY_FILE = 1017&

'   Illegal operation attempted on a Registry key which has been marked for deletion.
Const ERROR_KEY_DELETED = 1018&

'   System could not allocate the required space in a Registry log.
Const ERROR_NO_LOG_SPACE = 1019&

'   Cannot create a symbolic link in a Registry key that already
'   has subkeys or values.
Const ERROR_KEY_HAS_CHILDREN = 1020&

'   Cannot create a stable subkey under a volatile parent key.
Const ERROR_CHILD_MUST_BE_VOLATILE = 1021&

'   A notify change request is being completed and the information
'   is not being returned in the caller's buffer. The caller now
'   needs to enumerate the files to find the changes.
Const ERROR_NOTIFY_ENUM_DIR = 1022&

'   A stop control has been sent to a service which other running services
'   are dependent on.
Const ERROR_DEPENDENT_SERVICES_RUNNING = 1051&

'   The requested control is not valid for this service
Const ERROR_INVALID_SERVICE_CONTROL = 1052&

'   The service did not respond to the start or control request in a timely
'   fashion.
Const ERROR_SERVICE_REQUEST_TIMEOUT = 1053&

'   A thread could not be created for the service.
Const ERROR_SERVICE_NO_THREAD = 1054&

'   The service database is locked.
Const ERROR_SERVICE_DATABASE_LOCKED = 1055&

'   An instance of the service is already running.
Const ERROR_SERVICE_ALREADY_RUNNING = 1056&

'   The account name is invalid or does not exist.
Const ERROR_INVALID_SERVICE_ACCOUNT = 1057&

'   The specified service is disabled and cannot be started.
Const ERROR_SERVICE_DISABLED = 1058&

'   Circular service dependency was specified.
Const ERROR_CIRCULAR_DEPENDENCY = 1059&

'   The specified service does not exist as an installed service.
Const ERROR_SERVICE_DOES_NOT_EXIST = 1060&

'   The service cannot accept control messages at this time.
Const ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061&

'   The service has not been started.
Const ERROR_SERVICE_NOT_ACTIVE = 1062&

'   The service process could not connect to the service controller.
Const ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = 1063&

'   An exception occurred in the service when handling the control request.
Const ERROR_EXCEPTION_IN_SERVICE = 1064&

'   The database specified does not exist.
Const ERROR_DATABASE_DOES_NOT_EXIST = 1065&

'   The service has returned a service-specific error code.
Const ERROR_SERVICE_SPECIFIC_ERROR = 1066&

'   The process terminated unexpectedly.
Const ERROR_PROCESS_ABORTED = 1067&

'   The dependency service or group failed to start.
Const ERROR_SERVICE_DEPENDENCY_FAIL = 1068&

'   The service did not start due to a logon failure.
Const ERROR_SERVICE_LOGON_FAILED = 1069&

'   After starting, the service hung in a start-pending state.
Const ERROR_SERVICE_START_HANG = 1070&

'   The specified service database lock is invalid.
Const ERROR_INVALID_SERVICE_LOCK = 1071&

'   The specified service has been marked for deletion.
Const ERROR_SERVICE_MARKED_FOR_DELETE = 1072&

'   The specified service already exists.
Const ERROR_SERVICE_EXISTS = 1073&

'   The system is currently running with the last-known-good configuration.
Const ERROR_ALREADY_RUNNING_LKG = 1074&

'   The dependency service does not exist or has been marked for
'   deletion.
Const ERROR_SERVICE_DEPENDENCY_DELETED = 1075&

'   The current boot has already been accepted for use as the
'   last-known-good control set.
Const ERROR_BOOT_ALREADY_ACCEPTED = 1076&

'   No attempts to start the service have been made since the last boot.
Const ERROR_SERVICE_NEVER_STARTED = 1077&

'   The name is already in use as either a service name or a service display
'   name.
Const ERROR_DUPLICATE_SERVICE_NAME = 1078&

'   The physical end of the tape has been reached.
Const ERROR_END_OF_MEDIA = 1100&

'   A tape access reached a filemark.
Const ERROR_FILEMARK_DETECTED = 1101&

'   Beginning of tape or partition was encountered.
Const ERROR_BEGINNING_OF_MEDIA = 1102&

'   A tape access reached the end of a set of files.
Const ERROR_SETMARK_DETECTED = 1103&

'   No more data is on the tape.
Const ERROR_NO_DATA_DETECTED = 1104&

'   Tape could not be partitioned.
Const ERROR_PARTITION_FAILURE = 1105&

'   When accessing a new tape of a multivolume partition, the current
'   blocksize is incorrect.
Const ERROR_INVALID_BLOCK_LENGTH = 1106&

'   Tape partition information could not be found when loading a tape.
Const ERROR_DEVICE_NOT_PARTITIONED = 1107&

'   Unable to lock the media eject mechanism.
Const ERROR_UNABLE_TO_LOCK_MEDIA = 1108&

'   Unable to unload the media.
Const ERROR_UNABLE_TO_UNLOAD_MEDIA = 1109&

'   Media in drive may have changed.
Const ERROR_MEDIA_CHANGED = 1110&

'   The I/O bus was reset.
Const ERROR_BUS_RESET = 1111&

'   No media in drive.
Const ERROR_NO_MEDIA_IN_DRIVE = 1112&

'   No mapping for the Unicode character exists in the target multi-byte code page.
Const ERROR_NO_UNICODE_TRANSLATION = 1113&

'   A dynamic link library (DLL) initialization routine failed.
Const ERROR_DLL_INIT_FAILED = 1114&

'   A system shutdown is in progress.
Const ERROR_SHUTDOWN_IN_PROGRESS = 1115&

'   Unable to abort the system shutdown because no shutdown was in progress.
Const ERROR_NO_SHUTDOWN_IN_PROGRESS = 1116&

'   The request could not be performed because of an I/O device error.
Const ERROR_IO_DEVICE = 1117&

'   No serial device was successfully initialized.  The serial driver will unload.
Const ERROR_SERIAL_NO_DEVICE = 1118&

'   Unable to open a device that was sharing an interrupt request (IRQ)
'   with other devices. At least one other device that uses that IRQ
'   was already opened.
Const ERROR_IRQ_BUSY = 1119&

'   A serial I/O operation was completed by another write to the serial port.
'   (The IOCTL_SERIAL_XOFF_COUNTER reached zero.)
Const ERROR_MORE_WRITES = 1120&

'   A serial I/O operation completed because the time-out period expired.
'   (The IOCTL_SERIAL_XOFF_COUNTER did not reach zero.)
Const ERROR_COUNTER_TIMEOUT = 1121&

'   No ID address mark was found on the floppy disk.
Const ERROR_FLOPPY_ID_MARK_NOT_FOUND = 1122&

'   Mismatch between the floppy disk sector ID field and the floppy disk
'   controller track address.
Const ERROR_FLOPPY_WRONG_CYLINDER = 1123&

'   The floppy disk controller reported an error that is not recognized
'   by the floppy disk driver.
Const ERROR_FLOPPY_UNKNOWN_ERROR = 1124&

'   The floppy disk controller returned inconsistent results in its registers.
Const ERROR_FLOPPY_BAD_REGISTERS = 1125&

'   While accessing the hard disk, a recalibrate operation failed, even after retries.
Const ERROR_DISK_RECALIBRATE_FAILED = 1126&

'   While accessing the hard disk, a disk operation failed even after retries.
Const ERROR_DISK_OPERATION_FAILED = 1127&

'   While accessing the hard disk, a disk controller reset was needed, but
'   even that failed.
Const ERROR_DISK_RESET_FAILED = 1128&

'   Physical end of tape encountered.
Const ERROR_EOM_OVERFLOW = 1129&

'   Not enough server storage is available to process this command.
Const ERROR_NOT_ENOUGH_SERVER_MEMORY = 1130&

'   A potential deadlock condition has been detected.
Const ERROR_POSSIBLE_DEADLOCK = 1131&

'   The base address or the file offset specified does not have the proper
'   alignment.
Const ERROR_MAPPED_ALIGNMENT = 1132&

' NEW for Win32
Const ERROR_INVALID_PIXEL_FORMAT = 2000
Const ERROR_BAD_DRIVER = 2001
Const ERROR_INVALID_WINDOW_STYLE = 2002
Const ERROR_METAFILE_NOT_SUPPORTED = 2003
Const ERROR_TRANSFORM_NOT_SUPPORTED = 2004
Const ERROR_CLIPPING_NOT_SUPPORTED = 2005
Const ERROR_UNKNOWN_PRINT_MONITOR = 3000
Const ERROR_PRINTER_DRIVER_IN_USE = 3001
Const ERROR_SPOOL_FILE_NOT_FOUND = 3002
Const ERROR_SPL_NO_STARTDOC = 3003
Const ERROR_SPL_NO_ADDJOB = 3004
Const ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED = 3005
Const ERROR_PRINT_MONITOR_ALREADY_INSTALLED = 3006
Const ERROR_WINS_INTERNAL = 4000
Const ERROR_CAN_NOT_DEL_LOCAL_WINS = 4001
Const ERROR_STATIC_INIT = 4002
Const ERROR_INC_BACKUP = 4003
Const ERROR_FULL_BACKUP = 4004
Const ERROR_REC_NON_EXISTENT = 4005
Const ERROR_RPL_NOT_ALLOWED = 4006
Const SEVERITY_SUCCESS = 0
Const SEVERITY_ERROR = 1
Const FACILITY_NT_BIT = &H10000000
Const NOERROR = 0
Const E_UNEXPECTED = &H8000FFFF
Const E_NOTIMPL = &H80004001
Const E_OUTOFMEMORY = &H8007000E
Const E_INVALIDARG = &H80070057
Const E_NOINTERFACE = &H80004002
Const E_POINTER = &H80004003
Const E_HANDLE = &H80070006
Const E_ABORT = &H80004004
Const E_FAIL = &H80004005
Const E_ACCESSDENIED = &H80070005
Const CO_E_INIT_TLS = &H80004006
Const CO_E_INIT_SHARED_ALLOCATOR = &H80004007
Const CO_E_INIT_MEMORY_ALLOCATOR = &H80004008
Const CO_E_INIT_CLASS_CACHE = &H80004009
Const CO_E_INIT_RPC_CHANNEL = &H8000400A
Const CO_E_INIT_TLS_SET_CHANNEL_CONTROL = &H8000400B
Const CO_E_INIT_TLS_CHANNEL_CONTROL = &H8000400C
Const CO_E_INIT_UNACCEPTED_USER_ALLOCATOR = &H8000400D
Const CO_E_INIT_SCM_MUTEX_EXISTS = &H8000400E
Const CO_E_INIT_SCM_FILE_MAPPING_EXISTS = &H8000400F
Const CO_E_INIT_SCM_MAP_VIEW_OF_FILE = &H80004010
Const CO_E_INIT_SCM_EXEC_FAILURE = &H80004011
Const CO_E_INIT_ONLY_SINGLE_THREADED = &H80004012
Const S_OK = &H0
Const S_FALSE = &H1
Const OLE_E_FIRST = &H80040000
Const OLE_E_LAST = &H800400FF
Const OLE_S_FIRST = &H40000
Const OLE_S_LAST = &H400FF
Const OLE_E_OLEVERB = &H80040000
Const OLE_E_ADVF = &H80040001
Const OLE_E_ENUM_NOMORE = &H80040002
Const OLE_E_ADVISENOTSUPPORTED = &H80040003
Const OLE_E_NOCONNECTION = &H80040004
Const OLE_E_NOTRUNNING = &H80040005
Const OLE_E_NOCACHE = &H80040006
Const OLE_E_BLANK = &H80040007
Const OLE_E_CLASSDIFF = &H80040008
Const OLE_E_CANT_GETMONIKER = &H80040009
Const OLE_E_CANT_BINDTOSOURCE = &H8004000A
Const OLE_E_STATIC = &H8004000B
Const OLE_E_PROMPTSAVECANCELLED = &H8004000C
Const OLE_E_INVALIDRECT = &H8004000D
Const OLE_E_WRONGCOMPOBJ = &H8004000E
Const OLE_E_INVALIDHWND = &H8004000F
Const OLE_E_NOT_INPLACEACTIVE = &H80040010
Const OLE_E_CANTCONVERT = &H80040011
Const OLE_E_NOSTORAGE = &H80040012
Const DV_E_FORMATETC = &H80040064
Const DV_E_DVTARGETDEVICE = &H80040065
Const DV_E_STGMEDIUM = &H80040066
Const DV_E_STATDATA = &H80040067
Const DV_E_LINDEX = &H80040068
Const DV_E_TYMED = &H80040069
Const DV_E_CLIPFORMAT = &H8004006A
Const DV_E_DVASPECT = &H8004006B
Const DV_E_DVTARGETDEVICE_SIZE = &H8004006C
Const DV_E_NOIVIEWOBJECT = &H8004006D
Const DRAGDROP_E_FIRST = &H80040100
Const DRAGDROP_E_LAST = &H8004010F
Const DRAGDROP_S_FIRST = &H40100
Const DRAGDROP_S_LAST = &H4010F
Const DRAGDROP_E_NOTREGISTERED = &H80040100
Const DRAGDROP_E_ALREADYREGISTERED = &H80040101
Const DRAGDROP_E_INVALIDHWND = &H80040102
Const CLASSFACTORY_E_FIRST = &H80040110
Const CLASSFACTORY_E_LAST = &H8004011F
Const CLASSFACTORY_S_FIRST = &H40110
Const CLASSFACTORY_S_LAST = &H4011F
Const CLASS_E_NOAGGREGATION = &H80040110
Const CLASS_E_CLASSNOTAVAILABLE = &H80040111
Const MARSHAL_E_FIRST = &H80040120
Const MARSHAL_E_LAST = &H8004012F
Const MARSHAL_S_FIRST = &H40120
Const MARSHAL_S_LAST = &H4012F
Const DATA_E_FIRST = &H80040130
Const DATA_E_LAST = &H8004013F
Const DATA_S_FIRST = &H40130
Const DATA_S_LAST = &H4013F
Const VIEW_E_FIRST = &H80040140
Const VIEW_E_LAST = &H8004014F
Const VIEW_S_FIRST = &H40140
Const VIEW_S_LAST = &H4014F
Const VIEW_E_DRAW = &H80040140
Const REGDB_E_FIRST = &H80040150
Const REGDB_E_LAST = &H8004015F
Const REGDB_S_FIRST = &H40150
Const REGDB_S_LAST = &H4015F
Const REGDB_E_READREGDB = &H80040150
Const REGDB_E_WRITEREGDB = &H80040151
Const REGDB_E_KEYMISSING = &H80040152
Const REGDB_E_INVALIDVALUE = &H80040153
Const REGDB_E_CLASSNOTREG = &H80040154
Const REGDB_E_IIDNOTREG = &H80040155
Const CACHE_E_FIRST = &H80040170
Const CACHE_E_LAST = &H8004017F
Const CACHE_S_FIRST = &H40170
Const CACHE_S_LAST = &H4017F
Const CACHE_E_NOCACHE_UPDATED = &H80040170
Const OLEOBJ_E_FIRST = &H80040180
Const OLEOBJ_E_LAST = &H8004018F
Const OLEOBJ_S_FIRST = &H40180
Const OLEOBJ_S_LAST = &H4018F
Const OLEOBJ_E_NOVERBS = &H80040180
Const OLEOBJ_E_INVALIDVERB = &H80040181
Const CLIENTSITE_E_FIRST = &H80040190
Const CLIENTSITE_E_LAST = &H8004019F
Const CLIENTSITE_S_FIRST = &H40190
Const CLIENTSITE_S_LAST = &H4019F
Const INPLACE_E_NOTUNDOABLE = &H800401A0
Const INPLACE_E_NOTOOLSPACE = &H800401A1
Const INPLACE_E_FIRST = &H800401A0
Const INPLACE_E_LAST = &H800401AF
Const INPLACE_S_FIRST = &H401A0
Const INPLACE_S_LAST = &H401AF
Const ENUM_E_FIRST = &H800401B0
Const ENUM_E_LAST = &H800401BF
Const ENUM_S_FIRST = &H401B0
Const ENUM_S_LAST = &H401BF
Const CONVERT10_E_FIRST = &H800401C0
Const CONVERT10_E_LAST = &H800401CF
Const CONVERT10_S_FIRST = &H401C0
Const CONVERT10_S_LAST = &H401CF
Const CONVERT10_E_OLESTREAM_GET = &H800401C0
Const CONVERT10_E_OLESTREAM_PUT = &H800401C1
Const CONVERT10_E_OLESTREAM_FMT = &H800401C2
Const CONVERT10_E_OLESTREAM_BITMAP_TO_DIB = &H800401C3
Const CONVERT10_E_STG_FMT = &H800401C4
Const CONVERT10_E_STG_NO_STD_STREAM = &H800401C5
Const CONVERT10_E_STG_DIB_TO_BITMAP = &H800401C6
Const CLIPBRD_E_FIRST = &H800401D0
Const CLIPBRD_E_LAST = &H800401DF
Const CLIPBRD_S_FIRST = &H401D0
Const CLIPBRD_S_LAST = &H401DF
Const CLIPBRD_E_CANT_OPEN = &H800401D0
Const CLIPBRD_E_CANT_EMPTY = &H800401D1
Const CLIPBRD_E_CANT_SET = &H800401D2
Const CLIPBRD_E_BAD_DATA = &H800401D3
Const CLIPBRD_E_CANT_CLOSE = &H800401D4
Const MK_E_FIRST = &H800401E0
Const MK_E_LAST = &H800401EF
Const MK_S_FIRST = &H401E0
Const MK_S_LAST = &H401EF
Const MK_E_CONNECTMANUALLY = &H800401E0
Const MK_E_EXCEEDEDDEADLINE = &H800401E1
Const MK_E_NEEDGENERIC = &H800401E2
Const MK_E_UNAVAILABLE = &H800401E3
Const MK_E_SYNTAX = &H800401E4
Const MK_E_NOOBJECT = &H800401E5
Const MK_E_INVALIDEXTENSION = &H800401E6
Const MK_E_INTERMEDIATEINTERFACENOTSUPPORTED = &H800401E7
Const MK_E_NOTBINDABLE = &H800401E8
Const MK_E_NOTBOUND = &H800401E9
Const MK_E_CANTOPENFILE = &H800401EA
Const MK_E_MUSTBOTHERUSER = &H800401EB
Const MK_E_NOINVERSE = &H800401EC
Const MK_E_NOSTORAGE = &H800401ED
Const MK_E_NOPREFIX = &H800401EE
Const MK_E_ENUMERATION_FAILED = &H800401EF
Const CO_E_FIRST = &H800401F0
Const CO_E_LAST = &H800401FF
Const CO_S_FIRST = &H401F0
Const CO_S_LAST = &H401FF
Const CO_E_NOTINITIALIZED = &H800401F0
Const CO_E_ALREADYINITIALIZED = &H800401F1
Const CO_E_CANTDETERMINECLASS = &H800401F2
Const CO_E_CLASSSTRING = &H800401F3
Const CO_E_IIDSTRING = &H800401F4
Const CO_E_APPNOTFOUND = &H800401F5
Const CO_E_APPSINGLEUSE = &H800401F6
Const CO_E_ERRORINAPP = &H800401F7
Const CO_E_DLLNOTFOUND = &H800401F8
Const CO_E_ERRORINDLL = &H800401F9
Const CO_E_WRONGOSFORAPP = &H800401FA
Const CO_E_OBJNOTREG = &H800401FB
Const CO_E_OBJISREG = &H800401FC
Const CO_E_OBJNOTCONNECTED = &H800401FD
Const CO_E_APPDIDNTREG = &H800401FE
Const CO_E_RELEASED = &H800401FF
Const OLE_S_USEREG = &H40000
Const OLE_S_STATIC = &H40001
Const OLE_S_MAC_CLIPFORMAT = &H40002
Const DRAGDROP_S_DROP = &H40100
Const DRAGDROP_S_CANCEL = &H40101
Const DRAGDROP_S_USEDEFAULTCURSORS = &H40102
Const DATA_S_SAMEFORMATETC = &H40130
Const VIEW_S_ALREADY_FROZEN = &H40140
Const CACHE_S_FORMATETC_NOTSUPPORTED = &H40170
Const CACHE_S_SAMECACHE = &H40171
Const CACHE_S_SOMECACHES_NOTUPDATED = &H40172
Const OLEOBJ_S_INVALIDVERB = &H40180
Const OLEOBJ_S_CANNOT_DOVERB_NOW = &H40181
Const OLEOBJ_S_INVALIDHWND = &H40182
Const INPLACE_S_TRUNCATED = &H401A0
Const CONVERT10_S_NO_PRESENTATION = &H401C0
Const MK_S_REDUCED_TO_SELF = &H401E2
Const MK_S_ME = &H401E4
Const MK_S_HIM = &H401E5
Const MK_S_US = &H401E6
Const MK_S_MONIKERALREADYREGISTERED = &H401E7
Const CO_E_CLASS_CREATE_FAILED = &H80080001
Const CO_E_SCM_ERROR = &H80080002
Const CO_E_SCM_RPC_FAILURE = &H80080003
Const CO_E_BAD_PATH = &H80080004
Const CO_E_SERVER_EXEC_FAILURE = &H80080005
Const CO_E_OBJSRV_RPC_FAILURE = &H80080006
Const MK_E_NO_NORMALIZED = &H80080007
Const CO_E_SERVER_STOPPING = &H80080008
Const MEM_E_INVALID_ROOT = &H80080009
Const MEM_E_INVALID_LINK = &H80080010
Const MEM_E_INVALID_SIZE = &H80080011
Const DISP_E_UNKNOWNINTERFACE = &H80020001
Const DISP_E_MEMBERNOTFOUND = &H80020003
Const DISP_E_PARAMNOTFOUND = &H80020004
Const DISP_E_TYPEMISMATCH = &H80020005
Const DISP_E_UNKNOWNNAME = &H80020006
Const DISP_E_NONAMEDARGS = &H80020007
Const DISP_E_BADVARTYPE = &H80020008
Const DISP_E_EXCEPTION = &H80020009
Const DISP_E_OVERFLOW = &H8002000A
Const DISP_E_BADINDEX = &H8002000B
Const DISP_E_UNKNOWNLCID = &H8002000C
Const DISP_E_ARRAYISLOCKED = &H8002000D
Const DISP_E_BADPARAMCOUNT = &H8002000E
Const DISP_E_PARAMNOTOPTIONAL = &H8002000F
Const DISP_E_BADCALLEE = &H80020010
Const DISP_E_NOTACOLLECTION = &H80020011
Const TYPE_E_BUFFERTOOSMALL = &H80028016
Const TYPE_E_INVDATAREAD = &H80028018
Const TYPE_E_UNSUPFORMAT = &H80028019
Const TYPE_E_REGISTRYACCESS = &H8002801C
Const TYPE_E_LIBNOTREGISTERED = &H8002801D
Const TYPE_E_UNDEFINEDTYPE = &H80028027
Const TYPE_E_QUALIFIEDNAMEDISALLOWED = &H80028028
Const TYPE_E_INVALIDSTATE = &H80028029
Const TYPE_E_WRONGTYPEKIND = &H8002802A
Const TYPE_E_ELEMENTNOTFOUND = &H8002802B
Const TYPE_E_AMBIGUOUSNAME = &H8002802C
Const TYPE_E_NAMECONFLICT = &H8002802D
Const TYPE_E_UNKNOWNLCID = &H8002802E
Const TYPE_E_DLLFUNCTIONNOTFOUND = &H8002802F
Const TYPE_E_BADMODULEKIND = &H800288BD
Const TYPE_E_SIZETOOBIG = &H800288C5
Const TYPE_E_DUPLICATEID = &H800288C6
Const TYPE_E_INVALIDID = &H800288CF
Const TYPE_E_TYPEMISMATCH = &H80028CA0
Const TYPE_E_OUTOFBOUNDS = &H80028CA1
Const TYPE_E_IOERROR = &H80028CA2
Const TYPE_E_CANTCREATETMPFILE = &H80028CA3
Const TYPE_E_CANTLOADLIBRARY = &H80029C4A
Const TYPE_E_INCONSISTENTPROPFUNCS = &H80029C83
Const TYPE_E_CIRCULARTYPE = &H80029C84
Const STG_E_INVALIDFUNCTION = &H80030001
Const STG_E_FILENOTFOUND = &H80030002
Const STG_E_PATHNOTFOUND = &H80030003
Const STG_E_TOOMANYOPENFILES = &H80030004
Const STG_E_ACCESSDENIED = &H80030005
Const STG_E_INVALIDHANDLE = &H80030006
Const STG_E_INSUFFICIENTMEMORY = &H80030008
Const STG_E_INVALIDPOINTER = &H80030009
Const STG_E_NOMOREFILES = &H80030012
Const STG_E_DISKISWRITEPROTECTED = &H80030013
Const STG_E_SEEKERROR = &H80030019
Const STG_E_WRITEFAULT = &H8003001D
Const STG_E_READFAULT = &H8003001E
Const STG_E_SHAREVIOLATION = &H80030020
Const STG_E_LOCKVIOLATION = &H80030021
Const STG_E_FILEALREADYEXISTS = &H80030050
Const STG_E_INVALIDPARAMETER = &H80030057
Const STG_E_MEDIUMFULL = &H80030070
Const STG_E_ABNORMALAPIEXIT = &H800300FA
Const STG_E_INVALIDHEADER = &H800300FB
Const STG_E_INVALIDNAME = &H800300FC
Const STG_E_UNKNOWN = &H800300FD
Const STG_E_UNIMPLEMENTEDFUNCTION = &H800300FE
Const STG_E_INVALIDFLAG = &H800300FF
Const STG_E_INUSE = &H80030100
Const STG_E_NOTCURRENT = &H80030101
Const STG_E_REVERTED = &H80030102
Const STG_E_CANTSAVE = &H80030103
Const STG_E_OLDFORMAT = &H80030104
Const STG_E_OLDDLL = &H80030105
Const STG_E_SHAREREQUIRED = &H80030106
Const STG_E_NOTFILEBASEDSTORAGE = &H80030107
Const STG_E_EXTANTMARSHALLINGS = &H80030108
Const STG_S_CONVERTED = &H30200
Const RPC_E_CALL_REJECTED = &H80010001
Const RPC_E_CALL_CANCELED = &H80010002
Const RPC_E_CANTPOST_INSENDCALL = &H80010003
Const RPC_E_CANTCALLOUT_INASYNCCALL = &H80010004
Const RPC_E_CANTCALLOUT_INEXTERNALCALL = &H80010005
Const RPC_E_CONNECTION_TERMINATED = &H80010006
Const RPC_E_SERVER_DIED = &H80010007
Const RPC_E_CLIENT_DIED = &H80010008
Const RPC_E_INVALID_DATAPACKET = &H80010009
Const RPC_E_CANTTRANSMIT_CALL = &H8001000A
Const RPC_E_CLIENT_CANTMARSHAL_DATA = &H8001000B
Const RPC_E_CLIENT_CANTUNMARSHAL_DATA = &H8001000C
Const RPC_E_SERVER_CANTMARSHAL_DATA = &H8001000D
Const RPC_E_SERVER_CANTUNMARSHAL_DATA = &H8001000E
Const RPC_E_INVALID_DATA = &H8001000F
Const RPC_E_INVALID_PARAMETER = &H80010010
Const RPC_E_CANTCALLOUT_AGAIN = &H80010011
Const RPC_E_SERVER_DIED_DNE = &H80010012
Const RPC_E_SYS_CALL_FAILED = &H80010100
Const RPC_E_OUT_OF_RESOURCES = &H80010101
Const RPC_E_ATTEMPTED_MULTITHREAD = &H80010102
Const RPC_E_NOT_REGISTERED = &H80010103
Const RPC_E_FAULT = &H80010104
Const RPC_E_SERVERFAULT = &H80010105
Const RPC_E_CHANGED_MODE = &H80010106
Const RPC_E_INVALIDMETHOD = &H80010107
Const RPC_E_DISCONNECTED = &H80010108
Const RPC_E_RETRY = &H80010109
Const RPC_E_SERVERCALL_RETRYLATER = &H8001010A
Const RPC_E_SERVERCALL_REJECTED = &H8001010B
Const RPC_E_INVALID_CALLDATA = &H8001010C
Const RPC_E_CANTCALLOUT_ININPUTSYNCCALL = &H8001010D
Const RPC_E_WRONG_THREAD = &H8001010E
Const RPC_E_THREAD_NOT_INIT = &H8001010F
Const RPC_E_UNEXPECTED = &H8001FFFF


' /////////////////////////
'                        //
'  Winnet32 Status Codes //
'                        //
' /////////////////////////

'   The specified username is invalid.
Const ERROR_BAD_USERNAME = 2202&

'   This network connection does not exist.
Const ERROR_NOT_CONNECTED = 2250&

'   This network connection has files open or requests pending.
Const ERROR_OPEN_FILES = 2401&

'   The device is in use by an active process and cannot be disconnected.
Const ERROR_DEVICE_IN_USE = 2404&

'   The specified device name is invalid.
Const ERROR_BAD_DEVICE = 1200&

'   The device is not currently connected but it is a remembered connection.
Const ERROR_CONNECTION_UNAVAIL = 1201&

'   An attempt was made to remember a device that had previously been remembered.
Const ERROR_DEVICE_ALREADY_REMEMBERED = 1202&

'   No network provider accepted the given network path.
Const ERROR_NO_NET_OR_BAD_PATH = 1203&

'   The specified network provider name is invalid.
Const ERROR_BAD_PROVIDER = 1204&

'   Unable to open the network connection profile.
Const ERROR_CANNOT_OPEN_PROFILE = 1205&

'   The network connection profile is corrupt.
Const ERROR_BAD_PROFILE = 1206&

'   Cannot enumerate a non-container.
Const ERROR_NOT_CONTAINER = 1207&

'   An extended error has occurred.
Const ERROR_EXTENDED_ERROR = 1208&

'   The format of the specified group name is invalid.
Const ERROR_INVALID_GROUPNAME = 1209&

'   The format of the specified computer name is invalid.
Const ERROR_INVALID_COMPUTERNAME = 1210&

'   The format of the specified event name is invalid.
Const ERROR_INVALID_EVENTNAME = 1211&

'   The format of the specified domain name is invalid.
Const ERROR_INVALID_DOMAINNAME = 1212&

'   The format of the specified service name is invalid.
Const ERROR_INVALID_SERVICENAME = 1213&

'   The format of the specified network name is invalid.
Const ERROR_INVALID_NETNAME = 1214&

'   The format of the specified share name is invalid.
Const ERROR_INVALID_SHARENAME = 1215&

'   The format of the specified password is invalid.
Const ERROR_INVALID_PASSWORDNAME = 1216&

'   The format of the specified message name is invalid.
Const ERROR_INVALID_MESSAGENAME = 1217&

'   The format of the specified message destination is invalid.
Const ERROR_INVALID_MESSAGEDEST = 1218&

'   The credentials supplied conflict with an existing set of credentials.
Const ERROR_SESSION_CREDENTIAL_CONFLICT = 1219&

'   An attempt was made to establish a session to a Lan Manager server, but there
'   are already too many sessions established to that server.
Const ERROR_REMOTE_SESSION_LIMIT_EXCEEDED = 1220&

'   The workgroup or domain name is already in use by another computer on the
'   network.
Const ERROR_DUP_DOMAINNAME = 1221&

'   The network is not present or not started.
Const ERROR_NO_NETWORK = 1222&


' /////////////////////////
'                        //
'  Security Status Codes //
'                        //
' /////////////////////////

'   Not all privileges referenced are assigned to the caller.
Const ERROR_NOT_ALL_ASSIGNED = 1300&

'   Some mapping between account names and security IDs was not done.
Const ERROR_SOME_NOT_MAPPED = 1301&

'   No system quota limits are specifically set for this account.
Const ERROR_NO_QUOTAS_FOR_ACCOUNT = 1302&

'   No encryption key is available.  A well-known encryption key was returned.
Const ERROR_LOCAL_USER_SESSION_KEY = 1303&

'   The NT password is too complex to be converted to a LAN Manager
'   password.  The LAN Manager password returned is a NULL string.
Const ERROR_NULL_LM_PASSWORD = 1304&

'   The revision level is unknown.
Const ERROR_UNKNOWN_REVISION = 1305&

'   Indicates two revision levels are incompatible.
Const ERROR_REVISION_MISMATCH = 1306&

'   This security ID may not be assigned as the owner of this object.
Const ERROR_INVALID_OWNER = 1307&

'   This security ID may not be assigned as the primary group of an object.
Const ERROR_INVALID_PRIMARY_GROUP = 1308&

'   An attempt has been made to operate on an impersonation token
'   by a thread that is not currently impersonating a client.
Const ERROR_NO_IMPERSONATION_TOKEN = 1309&

'   The group may not be disabled.
Const ERROR_CANT_DISABLE_MANDATORY = 1310&

'   There are currently no logon servers available to service the logon
'   request.
Const ERROR_NO_LOGON_SERVERS = 1311&

'    A specified logon session does not exist.  It may already have
'    been terminated.
Const ERROR_NO_SUCH_LOGON_SESSION = 1312&

'    A specified privilege does not exist.
Const ERROR_NO_SUCH_PRIVILEGE = 1313&

'    A required privilege is not held by the client.
Const ERROR_PRIVILEGE_NOT_HELD = 1314&

'   The name provided is not a properly formed account name.
Const ERROR_INVALID_ACCOUNT_NAME = 1315&

'   The specified user already exists.
Const ERROR_USER_EXISTS = 1316&

'   The specified user does not exist.
Const ERROR_NO_SUCH_USER = 1317&

'   The specified group already exists.
Const ERROR_GROUP_EXISTS = 1318&

'   The specified group does not exist.
Const ERROR_NO_SUCH_GROUP = 1319&

'   Either the specified user account is already a member of the specified
'   group, or the specified group cannot be deleted because it contains
'   a member.
Const ERROR_MEMBER_IN_GROUP = 1320&

'   The specified user account is not a member of the specified group account.
Const ERROR_MEMBER_NOT_IN_GROUP = 1321&

'   The last remaining administration account cannot be disabled
'   or deleted.
Const ERROR_LAST_ADMIN = 1322&

'   Unable to update the password.  The value provided as the current
'   password is incorrect.
Const ERROR_WRONG_PASSWORD = 1323&

'   Unable to update the password.  The value provided for the new password
'   contains values that are not allowed in passwords.
Const ERROR_ILL_FORMED_PASSWORD = 1324&

'   Unable to update the password because a password update rule has been
'   violated.
Const ERROR_PASSWORD_RESTRICTION = 1325&

'   Logon failure: unknown user name or bad password.
Const ERROR_LOGON_FAILURE = 1326&

'   Logon failure: user account restriction.
Const ERROR_ACCOUNT_RESTRICTION = 1327&

'   Logon failure: account logon time restriction violation.
Const ERROR_INVALID_LOGON_HOURS = 1328&

'   Logon failure: user not allowed to log on to this computer.
Const ERROR_INVALID_WORKSTATION = 1329&

'   Logon failure: the specified account password has expired.
Const ERROR_PASSWORD_EXPIRED = 1330&

'   Logon failure: account currently disabled.
Const ERROR_ACCOUNT_DISABLED = 1331&

'   No mapping between account names and security IDs was done.
Const ERROR_NONE_MAPPED = 1332&

'   Too many local user identifiers (LUIDs) were requested at one time.
Const ERROR_TOO_MANY_LUIDS_REQUESTED = 1333&

'   No more local user identifiers (LUIDs) are available.
Const ERROR_LUIDS_EXHAUSTED = 1334&

'   The subauthority part of a security ID is invalid for this particular use.
Const ERROR_INVALID_SUB_AUTHORITY = 1335&

'   The access control list (ACL) structure is invalid.
Const ERROR_INVALID_ACL = 1336&

'   The security ID structure is invalid.
Const ERROR_INVALID_SID = 1337&

'   The security descriptor structure is invalid.
Const ERROR_INVALID_SECURITY_DESCR = 1338&

'   The inherited access control list (ACL) or access control entry (ACE)
'   could not be built.
Const ERROR_BAD_INHERITANCE_ACL = 1340&

'   The server is currently disabled.
Const ERROR_SERVER_DISABLED = 1341&

'   The server is currently enabled.
Const ERROR_SERVER_NOT_DISABLED = 1342&

'   The value provided was an invalid value for an identifier authority.
Const ERROR_INVALID_ID_AUTHORITY = 1343&

'   No more memory is available for security information updates.
Const ERROR_ALLOTTED_SPACE_EXCEEDED = 1344&

'   The specified attributes are invalid, or incompatible with the
'   attributes for the group as a whole.
Const ERROR_INVALID_GROUP_ATTRIBUTES = 1345&

'   Either a required impersonation level was not provided, or the
'   provided impersonation level is invalid.
Const ERROR_BAD_IMPERSONATION_LEVEL = 1346&

'   Cannot open an anonymous level security token.
Const ERROR_CANT_OPEN_ANONYMOUS = 1347&

'   The validation information class requested was invalid.
Const ERROR_BAD_VALIDATION_CLASS = 1348&

'   The type of the token is inappropriate for its attempted use.
Const ERROR_BAD_TOKEN_TYPE = 1349&

'   Unable to perform a security operation on an object
'   which has no associated security.
Const ERROR_NO_SECURITY_ON_OBJECT = 1350&

'   Indicates a Windows NT Advanced Server could not be contacted or that
'   objects within the domain are protected such that necessary
'   information could not be retrieved.
Const ERROR_CANT_ACCESS_DOMAIN_INFO = 1351&

'   The security account manager (SAM) or local security
'   authority (LSA) server was in the wrong state to perform
'   the security operation.
Const ERROR_INVALID_SERVER_STATE = 1352&

'   The domain was in the wrong state to perform the security operation.
Const ERROR_INVALID_DOMAIN_STATE = 1353&

'   This operation is only allowed for the Primary Domain Controller of the domain.
Const ERROR_INVALID_DOMAIN_ROLE = 1354&

'   The specified domain did not exist.
Const ERROR_NO_SUCH_DOMAIN = 1355&

'   The specified domain already exists.
Const ERROR_DOMAIN_EXISTS = 1356&

'   An attempt was made to exceed the limit on the number of domains per server.
Const ERROR_DOMAIN_LIMIT_EXCEEDED = 1357&

'   Unable to complete the requested operation because of either a
'   catastrophic media failure or a data structure corruption on the disk.
Const ERROR_INTERNAL_DB_CORRUPTION = 1358&

'   The security account database contains an internal inconsistency.
Const ERROR_INTERNAL_ERROR = 1359&

'   Generic access types were contained in an access mask which should
'   already be mapped to non-generic types.
Const ERROR_GENERIC_NOT_MAPPED = 1360&

'   A security descriptor is not in the right format (absolute or self-relative).
Const ERROR_BAD_DESCRIPTOR_FORMAT = 1361&

'   The requested action is restricted for use by logon processes
'   only.  The calling process has not registered as a logon process.
Const ERROR_NOT_LOGON_PROCESS = 1362&

'   Cannot start a new logon session with an ID that is already in use.
Const ERROR_LOGON_SESSION_EXISTS = 1363&

'   A specified authentication package is unknown.
Const ERROR_NO_SUCH_PACKAGE = 1364&

'   The logon session is not in a state that is consistent with the
'   requested operation.
Const ERROR_BAD_LOGON_SESSION_STATE = 1365&

'   The logon session ID is already in use.
Const ERROR_LOGON_SESSION_COLLISION = 1366&

'   A logon request contained an invalid logon type value.
Const ERROR_INVALID_LOGON_TYPE = 1367&

'   Unable to impersonate via a named pipe until data has been read
'   from that pipe.
Const ERROR_CANNOT_IMPERSONATE = 1368&

'   The transaction state of a Registry subtree is incompatible with the
'   requested operation.
Const ERROR_RXACT_INVALID_STATE = 1369&

'   An internal security database corruption has been encountered.
Const ERROR_RXACT_COMMIT_FAILURE = 1370&

'   Cannot perform this operation on built-in accounts.
Const ERROR_SPECIAL_ACCOUNT = 1371&

'   Cannot perform this operation on this built-in special group.
Const ERROR_SPECIAL_GROUP = 1372&

'   Cannot perform this operation on this built-in special user.
Const ERROR_SPECIAL_USER = 1373&

'   The user cannot be removed from a group because the group
'   is currently the user's primary group.
Const ERROR_MEMBERS_PRIMARY_GROUP = 1374&

'   The token is already in use as a primary token.
Const ERROR_TOKEN_ALREADY_IN_USE = 1375&

'   The specified local group does not exist.
Const ERROR_NO_SUCH_ALIAS = 1376&

'   The specified account name is not a member of the local group.
Const ERROR_MEMBER_NOT_IN_ALIAS = 1377&

'   The specified account name is already a member of the local group.
Const ERROR_MEMBER_IN_ALIAS = 1378&

'   The specified local group already exists.
Const ERROR_ALIAS_EXISTS = 1379&

'   Logon failure: the user has not been granted the requested
'   logon type at this computer.
Const ERROR_LOGON_NOT_GRANTED = 1380&

'   The maximum number of secrets that may be stored in a single system has been
'   exceeded.
Const ERROR_TOO_MANY_SECRETS = 1381&

'   The length of a secret exceeds the maximum length allowed.
Const ERROR_SECRET_TOO_LONG = 1382&

'   The local security authority database contains an internal inconsistency.
Const ERROR_INTERNAL_DB_ERROR = 1383&

'   During a logon attempt, the user's security context accumulated too many
'   security IDs.
Const ERROR_TOO_MANY_CONTEXT_IDS = 1384&

'   Logon failure: the user has not been granted the requested logon type
'   at this computer.
Const ERROR_LOGON_TYPE_NOT_GRANTED = 1385&

'   A cross-encrypted password is necessary to change a user password.
Const ERROR_NT_CROSS_ENCRYPTION_REQUIRED = 1386&

'   A new member could not be added to a local group because the member does
'   not exist.
Const ERROR_NO_SUCH_MEMBER = 1387&

'   A new member could not be added to a local group because the member has the
'   wrong account type.
Const ERROR_INVALID_MEMBER = 1388&

'   Too many security IDs have been specified.
Const ERROR_TOO_MANY_SIDS = 1389&

'   A cross-encrypted password is necessary to change this user password.
Const ERROR_LM_CROSS_ENCRYPTION_REQUIRED = 1390&

'   Indicates an ACL contains no inheritable components
Const ERROR_NO_INHERITANCE = 1391&

'   The file or directory is corrupt and non-readable.
Const ERROR_FILE_CORRUPT = 1392&

'   The disk structure is corrupt and non-readable.
Const ERROR_DISK_CORRUPT = 1393&

'   There is no user session key for the specified logon session.
Const ERROR_NO_USER_SESSION_KEY = 1394&

'  End of security error codes


' /////////////////////////
'                        //
'  WinUser Error Codes   //
'                        //
' /////////////////////////

'   Invalid window handle.
Const ERROR_INVALID_WINDOW_HANDLE = 1400&

'   Invalid menu handle.
Const ERROR_INVALID_MENU_HANDLE = 1401&

'   Invalid cursor handle.
Const ERROR_INVALID_CURSOR_HANDLE = 1402&

'   Invalid accelerator table handle.
Const ERROR_INVALID_ACCEL_HANDLE = 1403&

'   Invalid hook handle.
Const ERROR_INVALID_HOOK_HANDLE = 1404&

'   Invalid handle to a multiple-window position structure.
Const ERROR_INVALID_DWP_HANDLE = 1405&

'   Cannot create a top-level child window.
Const ERROR_TLW_WITH_WSCHILD = 1406&

'   Cannot find window class.
Const ERROR_CANNOT_FIND_WND_CLASS = 1407&

'   Invalid window, belongs to other thread.
Const ERROR_WINDOW_OF_OTHER_THREAD = 1408&

'   Hot key is already registered.
Const ERROR_HOTKEY_ALREADY_REGISTERED = 1409&

'   Class already exists.
Const ERROR_CLASS_ALREADY_EXISTS = 1410&

'   Class does not exist.
Const ERROR_CLASS_DOES_NOT_EXIST = 1411&

'   Class still has open windows.
Const ERROR_CLASS_HAS_WINDOWS = 1412&

'   Invalid index.
Const ERROR_INVALID_INDEX = 1413&

'   Invalid icon handle.
Const ERROR_INVALID_ICON_HANDLE = 1414&

'   Using private DIALOG window words.
Const ERROR_PRIVATE_DIALOG_INDEX = 1415&

'   The listbox identifier was not found.
Const ERROR_LISTBOX_ID_NOT_FOUND = 1416&

'   No wildcards were found.
Const ERROR_NO_WILDCARD_CHARACTERS = 1417&

'   Thread does not have a clipboard open.
Const ERROR_CLIPBOARD_NOT_OPEN = 1418&

'   Hot key is not registered.
Const ERROR_HOTKEY_NOT_REGISTERED = 1419&

'   The window is not a valid dialog window.
Const ERROR_WINDOW_NOT_DIALOG = 1420&

'   Control ID not found.
Const ERROR_CONTROL_ID_NOT_FOUND = 1421&

'   Invalid message for a combo box because it does not have an edit control.
Const ERROR_INVALID_COMBOBOX_MESSAGE = 1422&

'   The window is not a combo box.
Const ERROR_WINDOW_NOT_COMBOBOX = 1423&

'   Height must be less than 256.
Const ERROR_INVALID_EDIT_HEIGHT = 1424&

'   Invalid device context (DC) handle.
Const ERROR_DC_NOT_FOUND = 1425&

'   Invalid hook procedure type.
Const ERROR_INVALID_HOOK_FILTER = 1426&

'   Invalid hook procedure.
Const ERROR_INVALID_FILTER_PROC = 1427&

'   Cannot set non-local hook without a module handle.
Const ERROR_HOOK_NEEDS_HMOD = 1428&

'   This hook procedure can only be set Globally.
'
Const ERROR_PUBLIC_ONLY_HOOK = 1429&

'   The journal hook procedure is already installed.
Const ERROR_JOURNAL_HOOK_SET = 1430&

'   The hook procedure is not installed.
Const ERROR_HOOK_NOT_INSTALLED = 1431&

'   Invalid message for single-selection listbox.
Const ERROR_INVALID_LB_MESSAGE = 1432&

'   LB_SETCOUNT sent to non-lazy listbox.
Const ERROR_SETCOUNT_ON_BAD_LB = 1433&

'   This list box does not support tab stops.
Const ERROR_LB_WITHOUT_TABSTOPS = 1434&

'   Cannot destroy object created by another thread.
Const ERROR_DESTROY_OBJECT_OF_OTHER_THREAD = 1435&

'   Child windows cannot have menus.
Const ERROR_CHILD_WINDOW_MENU = 1436&

'   The window does not have a system menu.
Const ERROR_NO_SYSTEM_MENU = 1437&

'   Invalid message box style.
Const ERROR_INVALID_MSGBOX_STYLE = 1438&

'   Invalid system-wide (SPI_) parameter.
Const ERROR_INVALID_SPI_VALUE = 1439&

'   Screen already locked.
Const ERROR_SCREEN_ALREADY_LOCKED = 1440&

'   All handles to windows in a multiple-window position structure must
'   have the same parent.
Const ERROR_HWNDS_HAVE_DIFF_PARENT = 1441&

'   The window is not a child window.
Const ERROR_NOT_CHILD_WINDOW = 1442&

'   Invalid GW_ command.
Const ERROR_INVALID_GW_COMMAND = 1443&

'   Invalid thread identifier.
Const ERROR_INVALID_THREAD_ID = 1444&

'   Cannot process a message from a window that is not a multiple document
'   interface (MDI) window.
Const ERROR_NON_MDICHILD_WINDOW = 1445&

'   Popup menu already active.
Const ERROR_POPUP_ALREADY_ACTIVE = 1446&

'   The window does not have scroll bars.
Const ERROR_NO_SCROLLBARS = 1447&

'   Scroll bar range cannot be greater than 0x7FFF.
Const ERROR_INVALID_SCROLLBAR_RANGE = 1448&

'   Cannot show or remove the window in the way specified.
Const ERROR_INVALID_SHOWWIN_COMMAND = 1449&

'  End of WinUser error codes


' /////////////////////////
'                        //
'  Eventlog Status Codes //
'                        //
' /////////////////////////

'   The event log file is corrupt.
Const ERROR_EVENTLOG_FILE_CORRUPT = 1500&

'   No event log file could be opened, so the event logging service did not start.
Const ERROR_EVENTLOG_CANT_START = 1501&

'   The event log file is full.
Const ERROR_LOG_FILE_FULL = 1502&

'   The event log file has changed between reads.
Const ERROR_EVENTLOG_FILE_CHANGED = 1503&

'  End of eventlog error codes


' /////////////////////////
'                        //
'    RPC Status Codes    //
'                        //
' /////////////////////////

'   The string binding is invalid.
Const RPC_S_INVALID_STRING_BINDING = 1700&

'   The binding handle is not the correct type.
Const RPC_S_WRONG_KIND_OF_BINDING = 1701&

'   The binding handle is invalid.
Const RPC_S_INVALID_BINDING = 1702&

'   The RPC protocol sequence is not supported.
Const RPC_S_PROTSEQ_NOT_SUPPORTED = 1703&

'   The RPC protocol sequence is invalid.
Const RPC_S_INVALID_RPC_PROTSEQ = 1704&

'   The string universal unique identifier (UUID) is invalid.
Const RPC_S_INVALID_STRING_UUID = 1705&

'   The endpoint format is invalid.
Const RPC_S_INVALID_ENDPOINT_FORMAT = 1706&

'   The network address is invalid.
Const RPC_S_INVALID_NET_ADDR = 1707&

'   No endpoint was found.
Const RPC_S_NO_ENDPOINT_FOUND = 1708&

'   The timeout value is invalid.
Const RPC_S_INVALID_TIMEOUT = 1709&

'   The object universal unique identifier (UUID) was not found.
Const RPC_S_OBJECT_NOT_FOUND = 1710&

'   The object universal unique identifier (UUID) has already been registered.
Const RPC_S_ALREADY_REGISTERED = 1711&

'   The type universal unique identifier (UUID) has already been registered.
Const RPC_S_TYPE_ALREADY_REGISTERED = 1712&

'   The RPC server is already listening.
Const RPC_S_ALREADY_LISTENING = 1713&

'   No protocol sequences have been registered.
Const RPC_S_NO_PROTSEQS_REGISTERED = 1714&

'   The RPC server is not listening.
Const RPC_S_NOT_LISTENING = 1715&

'   The manager type is unknown.
Const RPC_S_UNKNOWN_MGR_TYPE = 1716&

'   The interface is unknown.
Const RPC_S_UNKNOWN_IF = 1717&

'   There are no bindings.
Const RPC_S_NO_BINDINGS = 1718&

'   There are no protocol sequences.
Const RPC_S_NO_PROTSEQS = 1719&

'   The endpoint cannot be created.
Const RPC_S_CANT_CREATE_ENDPOINT = 1720&

'   Not enough resources are available to complete this operation.
Const RPC_S_OUT_OF_RESOURCES = 1721&

'   The RPC server is unavailable.
Const RPC_S_SERVER_UNAVAILABLE = 1722&

'   The RPC server is too busy to complete this operation.
Const RPC_S_SERVER_TOO_BUSY = 1723&

'   The network options are invalid.
Const RPC_S_INVALID_NETWORK_OPTIONS = 1724&

'   There is not a remote procedure call active in this thread.
Const RPC_S_NO_CALL_ACTIVE = 1725&

'   The remote procedure call failed.
Const RPC_S_CALL_FAILED = 1726&

'   The remote procedure call failed and did not execute.
Const RPC_S_CALL_FAILED_DNE = 1727&

'   A remote procedure call (RPC) protocol error occurred.
Const RPC_S_PROTOCOL_ERROR = 1728&

'   The transfer syntax is not supported by the RPC server.
Const RPC_S_UNSUPPORTED_TRANS_SYN = 1730&

'   The universal unique identifier (UUID) type is not supported.
Const RPC_S_UNSUPPORTED_TYPE = 1732&

'   The tag is invalid.
Const RPC_S_INVALID_TAG = 1733&

'   The array bounds are invalid.
Const RPC_S_INVALID_BOUND = 1734&

'   The binding does not contain an entry name.
Const RPC_S_NO_ENTRY_NAME = 1735&

'   The name syntax is invalid.
Const RPC_S_INVALID_NAME_SYNTAX = 1736&

'   The name syntax is not supported.
Const RPC_S_UNSUPPORTED_NAME_SYNTAX = 1737&

'   No network address is available to use to construct a universal
'   unique identifier (UUID).
Const RPC_S_UUID_NO_ADDRESS = 1739&

'   The endpoint is a duplicate.
Const RPC_S_DUPLICATE_ENDPOINT = 1740&

'   The authentication type is unknown.
Const RPC_S_UNKNOWN_AUTHN_TYPE = 1741&

'   The maximum number of calls is too small.
Const RPC_S_MAX_CALLS_TOO_SMALL = 1742&

'   The string is too long.
Const RPC_S_STRING_TOO_LONG = 1743&

'   The RPC protocol sequence was not found.
Const RPC_S_PROTSEQ_NOT_FOUND = 1744&

'   The procedure number is out of range.
Const RPC_S_PROCNUM_OUT_OF_RANGE = 1745&

'   The binding does not contain any authentication information.
Const RPC_S_BINDING_HAS_NO_AUTH = 1746&

'   The authentication service is unknown.
Const RPC_S_UNKNOWN_AUTHN_SERVICE = 1747&

'   The authentication level is unknown.
Const RPC_S_UNKNOWN_AUTHN_LEVEL = 1748&

'   The security context is invalid.
Const RPC_S_INVALID_AUTH_IDENTITY = 1749&

'   The authorization service is unknown.
Const RPC_S_UNKNOWN_AUTHZ_SERVICE = 1750&

'   The entry is invalid.
Const EPT_S_INVALID_ENTRY = 1751&

'   The server endpoint cannot perform the operation.
Const EPT_S_CANT_PERFORM_OP = 1752&

'   There are no more endpoints available from the endpoint mapper.
Const EPT_S_NOT_REGISTERED = 1753&

'   No interfaces have been exported.
Const RPC_S_NOTHING_TO_EXPORT = 1754&

'   The entry name is incomplete.
Const RPC_S_INCOMPLETE_NAME = 1755&

'   The version option is invalid.
Const RPC_S_INVALID_VERS_OPTION = 1756&

'   There are no more members.
Const RPC_S_NO_MORE_MEMBERS = 1757&

'   There is nothing to unexport.
Const RPC_S_NOT_ALL_OBJS_UNEXPORTED = 1758&

'   The interface was not found.
Const RPC_S_INTERFACE_NOT_FOUND = 1759&

'   The entry already exists.
Const RPC_S_ENTRY_ALREADY_EXISTS = 1760&

'   The entry is not found.
Const RPC_S_ENTRY_NOT_FOUND = 1761&

'   The name service is unavailable.
Const RPC_S_NAME_SERVICE_UNAVAILABLE = 1762&

'   The network address family is invalid.
Const RPC_S_INVALID_NAF_ID = 1763&

'   The requested operation is not supported.
Const RPC_S_CANNOT_SUPPORT = 1764&

'   No security context is available to allow impersonation.
Const RPC_S_NO_CONTEXT_AVAILABLE = 1765&

'   An internal error occurred in a remote procedure call (RPC).
Const RPC_S_INTERNAL_ERROR = 1766&

'   The RPC server attempted an integer division by zero.'
Const RPC_S_ZERO_DIVIDE = 1767&

'   An addressing error occurred in the RPC server.
Const RPC_S_ADDRESS_ERROR = 1768&

'   A floating-point operation at the RPC server caused a division by zero.
Const RPC_S_FP_DIV_ZERO = 1769&

'   A floating-point underflow occurred at the RPC server.
Const RPC_S_FP_UNDERFLOW = 1770&

'   A floating-point overflow occurred at the RPC server.
Const RPC_S_FP_OVERFLOW = 1771&

'   The list of RPC servers available for the binding of auto handles
'   has been exhausted.
Const RPC_X_NO_MORE_ENTRIES = 1772&

'   Unable to open the character translation table file.
Const RPC_X_SS_CHAR_TRANS_OPEN_FAIL = 1773&

'   The file containing the character translation table has fewer than
'   512 bytes.
Const RPC_X_SS_CHAR_TRANS_SHORT_FILE = 1774&

'   A null context handle was passed from the client to the host during
'   a remote procedure call.
Const RPC_X_SS_IN_NULL_CONTEXT = 1775&

'   The context handle changed during a remote procedure call.
Const RPC_X_SS_CONTEXT_DAMAGED = 1777&

'   The binding handles passed to a remote procedure call do not match.
Const RPC_X_SS_HANDLES_MISMATCH = 1778&

'   The stub is unable to get the remote procedure call handle.
Const RPC_X_SS_CANNOT_GET_CALL_HANDLE = 1779&

'   A null reference pointer was passed to the stub.
Const RPC_X_NULL_REF_POINTER = 1780&

'   The enumeration value is out of range.
Const RPC_X_ENUM_VALUE_OUT_OF_RANGE = 1781&

'   The byte count is too small.
Const RPC_X_BYTE_COUNT_TOO_SMALL = 1782&

'   The stub received bad data.
Const RPC_X_BAD_STUB_DATA = 1783&

'   The supplied user buffer is not valid for the requested operation.
Const ERROR_INVALID_USER_BUFFER = 1784&

'   The disk media is not recognized.  It may not be formatted.
Const ERROR_UNRECOGNIZED_MEDIA = 1785&

'   The workstation does not have a trust secret.
Const ERROR_NO_TRUST_LSA_SECRET = 1786&

'   The SAM database on the Windows NT Advanced Server does not have a computer
'   account for this workstation trust relationship.
Const ERROR_NO_TRUST_SAM_ACCOUNT = 1787&

'   The trust relationship between the primary domain and the trusted
'   domain failed.
Const ERROR_TRUSTED_DOMAIN_FAILURE = 1788&

'   The trust relationship between this workstation and the primary
'   domain failed.
Const ERROR_TRUSTED_RELATIONSHIP_FAILURE = 1789&

'   The network logon failed.
Const ERROR_TRUST_FAILURE = 1790&

'   A remote procedure call is already in progress for this thread.
Const RPC_S_CALL_IN_PROGRESS = 1791&

'   An attempt was made to logon, but the network logon service was not started.
Const ERROR_NETLOGON_NOT_STARTED = 1792&

'   The user's account has expired.
Const ERROR_ACCOUNT_EXPIRED = 1793&

'   The redirector is in use and cannot be unloaded.
Const ERROR_REDIRECTOR_HAS_OPEN_HANDLES = 1794&

'   The specified printer driver is already installed.
Const ERROR_PRINTER_DRIVER_ALREADY_INSTALLED = 1795&

'   The specified port is unknown.
Const ERROR_UNKNOWN_PORT = 1796&

'   The printer driver is unknown.
Const ERROR_UNKNOWN_PRINTER_DRIVER = 1797&

'   The print processor is unknown.
'
Const ERROR_UNKNOWN_PRINTPROCESSOR = 1798&

'   The specified separator file is invalid.
Const ERROR_INVALID_SEPARATOR_FILE = 1799&

'   The specified priority is invalid.
Const ERROR_INVALID_PRIORITY = 1800&

'   The printer name is invalid.
Const ERROR_INVALID_PRINTER_NAME = 1801&

'   The printer already exists.
Const ERROR_PRINTER_ALREADY_EXISTS = 1802&

'   The printer command is invalid.
Const ERROR_INVALID_PRINTER_COMMAND = 1803&

'   The specified datatype is invalid.
Const ERROR_INVALID_DATATYPE = 1804&

'   The Environment specified is invalid.
Const ERROR_INVALID_ENVIRONMENT = 1805&

'   There are no more bindings.
Const RPC_S_NO_MORE_BINDINGS = 1806&

'   The account used is an interdomain trust account.  Use your Global user account or local user account to access this server.
Const ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT = 1807&

'   The account used is a Computer Account.  Use your Global user account or local user account to access this server.
Const ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT = 1808&

'   The account used is an server trust account.  Use your Global user account or local user account to access this server.
Const ERROR_NOLOGON_SERVER_TRUST_ACCOUNT = 1809&

'   The name or security ID (SID) of the domain specified is inconsistent
'   with the trust information for that domain.
Const ERROR_DOMAIN_TRUST_INCONSISTENT = 1810&

'   The server is in use and cannot be unloaded.
Const ERROR_SERVER_HAS_OPEN_HANDLES = 1811&

'   The specified image file did not contain a resource section.
Const ERROR_RESOURCE_DATA_NOT_FOUND = 1812&

'   The specified resource type can not be found in the image file.
Const ERROR_RESOURCE_TYPE_NOT_FOUND = 1813&

'   The specified resource name can not be found in the image file.
Const ERROR_RESOURCE_NAME_NOT_FOUND = 1814&

'   The specified resource language ID cannot be found in the image file.
Const ERROR_RESOURCE_LANG_NOT_FOUND = 1815&

'   Not enough quota is available to process this command.
Const ERROR_NOT_ENOUGH_QUOTA = 1816&

'   The group member was not found.
Const RPC_S_GROUP_MEMBER_NOT_FOUND = 1898&

'   The endpoint mapper database could not be created.
Const EPT_S_CANT_CREATE = 1899&

'   The object universal unique identifier (UUID) is the nil UUID.
Const RPC_S_INVALID_OBJECT = 1900&

'   The specified time is invalid.
Const ERROR_INVALID_TIME = 1901&

'   The specified Form name is invalid.
Const ERROR_INVALID_FORM_NAME = 1902&

'   The specified Form size is invalid
Const ERROR_INVALID_FORM_SIZE = 1903&

'   The specified Printer handle is already being waited on
Const ERROR_ALREADY_WAITING = 1904&

'   The specified Printer has been deleted
Const ERROR_PRINTER_DELETED = 1905&

'   The state of the Printer is invalid
Const ERROR_INVALID_PRINTER_STATE = 1906&

'   The list of servers for this workgroup is not currently available
Const ERROR_NO_BROWSER_SERVERS_FOUND = 6118&


' -------------------------
'  MMSystem Section
' -------------------------

' This section defines all the support for Multimedia applications

'  general constants
Const MAXPNAMELEN = 32  '  max product name length (including NULL)
Const MAXERRORLENGTH = 128  '  max error text length (including final NULL)


'  values for wType field in MMTIME struct
Const TIME_MS = &H1     '  time in Milliseconds
Const TIME_SAMPLES = &H2     '  number of wave samples
Const TIME_BYTES = &H4     '  current byte offset
Const TIME_SMPTE = &H8     '  SMPTE time
Const TIME_MIDI = &H10    '  MIDI time

'  Multimedia Window Messages
Const MM_JOY1MOVE = &H3A0  '  joystick
Const MM_JOY2MOVE = &H3A1
Const MM_JOY1ZMOVE = &H3A2
Const MM_JOY2ZMOVE = &H3A3
Const MM_JOY1BUTTONDOWN = &H3B5
Const MM_JOY2BUTTONDOWN = &H3B6
Const MM_JOY1BUTTONUP = &H3B7
Const MM_JOY2BUTTONUP = &H3B8

Const MM_MCINOTIFY = &H3B9  '  MCI
Const MM_MCISYSTEM_STRING = &H3CA

Const MM_WOM_OPEN = &H3BB  '  waveform output
Const MM_WOM_CLOSE = &H3BC
Const MM_WOM_DONE = &H3BD

Const MM_WIM_OPEN = &H3BE  '  waveform input
Const MM_WIM_CLOSE = &H3BF
Const MM_WIM_DATA = &H3C0

Const MM_MIM_OPEN = &H3C1  '  MIDI input
Const MM_MIM_CLOSE = &H3C2
Const MM_MIM_DATA = &H3C3
Const MM_MIM_LONGDATA = &H3C4
Const MM_MIM_ERROR = &H3C5
Const MM_MIM_LONGERROR = &H3C6

Const MM_MOM_OPEN = &H3C7  '  MIDI output
Const MM_MOM_CLOSE = &H3C8
Const MM_MOM_DONE = &H3C9

' String resource number bases (internal use)

Const MMSYSERR_BASE = 0
Const WAVERR_BASE = 32
Const MIDIERR_BASE = 64
Const TIMERR_BASE = 96   '  was 128, changed to match Win 31 Sonic
Const JOYERR_BASE = 160
Const MCIERR_BASE = 256

Const MCI_STRING_OFFSET = 512  '  if this number is changed you MUST
                                    '  alter the MCI_DEVTYPE_... list below
Const MCI_VD_OFFSET = 1024
Const MCI_CD_OFFSET = 1088
Const MCI_WAVE_OFFSET = 1152
Const MCI_SEQ_OFFSET = 1216

' General error return values
Const MMSYSERR_NOERROR = 0  '  no error
Const MMSYSERR_ERROR = (MMSYSERR_BASE + 1)  '  unspecified error
Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)  '  device ID out of range
Const MMSYSERR_NOTENABLED = (MMSYSERR_BASE + 3)  '  driver failed enable
Const MMSYSERR_ALLOCATED = (MMSYSERR_BASE + 4)  '  device already allocated
Const MMSYSERR_INVALHANDLE = (MMSYSERR_BASE + 5)  '  device handle is invalid
Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)  '  no device driver present
Const MMSYSERR_NOMEM = (MMSYSERR_BASE + 7)  '  memory allocation error
Const MMSYSERR_NOTSUPPORTED = (MMSYSERR_BASE + 8)  '  function isn't supported
Const MMSYSERR_BADERRNUM = (MMSYSERR_BASE + 9)  '  error value out of range
Const MMSYSERR_INVALFLAG = (MMSYSERR_BASE + 10) '  invalid flag passed
Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11) '  invalid parameter passed
Const MMSYSERR_HANDLEBUSY = (MMSYSERR_BASE + 12) '  handle being used
                                                   '  simultaneously on another
                                                   '  thread (eg callback)
Const MMSYSERR_INVALIDALIAS = (MMSYSERR_BASE + 13) '  "Specified alias not found in WIN.INI
Const MMSYSERR_LASTERROR = (MMSYSERR_BASE + 13) '  last error in range
Const MM_MOM_POSITIONCB = &H3CA              '  Callback for MEVT_POSITIONCB
Const MM_MCISIGNAL = &H3CB
Const MM_MIM_MOREDATA = &H3CC                '  MIM_DONE w/ pending events
Const MIDICAPS_STREAM = &H8               '  driver supports midiStreamOut directly
 

'  Type codes which go in the high byte of the event DWORD of a stream buffer

'  Type codes 00-7F contain parameters within the low 24 bits
'  Type codes 80-FF contain a length of their parameter in the low 24
'  bits, followed by their parameter data in the buffer. The event
'  DWORD contains the exact byte length; the parm data itself must be
'  padded to be an even multiple of 4 Byte long.
'

Const MEVT_F_SHORT = &H0&
Const MEVT_F_LONG = &H80000000
Const MEVT_F_CALLBACK = &H40000000
Const MIDISTRM_ERROR = -2

'
'  Structures and defines for midiStreamProperty
'
Const MIDIPROP_SET = &H80000000
Const MIDIPROP_GET = &H40000000

'  These are intentionally both non-zero so the app cannot accidentally
'  leave the operation off and happen to appear to work due to default
'  action.

Const MIDIPROP_TIMEDIV = &H1&
Const MIDIPROP_TEMPO = &H2&


'  MIDI function prototypes *

' ***************************************************************************

'                             Mixer Support

' **************************************************************************

Const MIXER_SHORT_NAME_CHARS = 16
Const MIXER_LONG_NAME_CHARS = 64

'
'   MMRESULT error return values specific to the mixer API
'
'
Const MIXERR_BASE = 1024
Const MIXERR_INVALLINE = (MIXERR_BASE + 0)
Const MIXERR_INVALCONTROL = (MIXERR_BASE + 1)
Const MIXERR_INVALVALUE = (MIXERR_BASE + 2)
Const MIXERR_LASTERROR = (MIXERR_BASE + 2)


Const MIXER_OBJECTF_HANDLE = &H80000000
Const MIXER_OBJECTF_MIXER = &H0&
Const MIXER_OBJECTF_HMIXER = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIXER)
Const MIXER_OBJECTF_WAVEOUT = &H10000000
Const MIXER_OBJECTF_HWAVEOUT = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEOUT)
Const MIXER_OBJECTF_WAVEIN = &H20000000
Const MIXER_OBJECTF_HWAVEIN = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEIN)
Const MIXER_OBJECTF_MIDIOUT = &H30000000
Const MIXER_OBJECTF_HMIDIOUT = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIOUT)
Const MIXER_OBJECTF_MIDIIN = &H40000000
Const MIXER_OBJECTF_HMIDIIN = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIIN)
Const MIXER_OBJECTF_AUX = &H50000000


'   MIXERLINE.fdwLine

Const MIXERLINE_LINEF_ACTIVE = &H1&
Const MIXERLINE_LINEF_DISCONNECTED = &H8000&
Const MIXERLINE_LINEF_SOURCE = &H80000000

'   MIXERLINE.dwComponentType

'   component types for destinations and sources

Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
Const MIXERLINE_COMPONENTTYPE_DST_UNDEFINED = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
Const MIXERLINE_COMPONENTTYPE_DST_DIGITAL = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
Const MIXERLINE_COMPONENTTYPE_DST_LINE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
Const MIXERLINE_COMPONENTTYPE_DST_MONITOR = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
Const MIXERLINE_COMPONENTTYPE_DST_HEADPHONES = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
Const MIXERLINE_COMPONENTTYPE_DST_TELEPHONE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
Const MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
Const MIXERLINE_COMPONENTTYPE_DST_VOICEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
Const MIXERLINE_COMPONENTTYPE_DST_LAST = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)

Const MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
Const MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
Const MIXERLINE_COMPONENTTYPE_SRC_DIGITAL = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
Const MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
Const MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
Const MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
Const MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
Const MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
Const MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
Const MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
Const MIXERLINE_COMPONENTTYPE_SRC_ANALOG = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
Const MIXERLINE_COMPONENTTYPE_SRC_LAST = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)


'
'   MIXERLINE.Target.dwType
'
'
Const MIXERLINE_TARGETTYPE_UNDEFINED = 0
Const MIXERLINE_TARGETTYPE_WAVEOUT = 1
Const MIXERLINE_TARGETTYPE_WAVEIN = 2
Const MIXERLINE_TARGETTYPE_MIDIOUT = 3
Const MIXERLINE_TARGETTYPE_MIDIIN = 4
Const MIXERLINE_TARGETTYPE_AUX = 5

>>Declare Function mixerGetLineInfo Lib "winmm.dll" Alias "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, ByVal fdwInfo As Long) As Long
Const MIXER_GETLINEINFOF_DESTINATION = &H0&
Const MIXER_GETLINEINFOF_SOURCE = &H1&
Const MIXER_GETLINEINFOF_LINEID = &H2&
Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
Const MIXER_GETLINEINFOF_TARGETTYPE = &H4&
Const MIXER_GETLINEINFOF_QUERYMASK = &HF&

'   MIXERCONTROL

'
'   MIXERCONTROL.fdwControl

Const MIXERCONTROL_CONTROLF_UNIFORM = &H1&
Const MIXERCONTROL_CONTROLF_MULTIPLE = &H2&
Const MIXERCONTROL_CONTROLF_DISABLED = &H80000000

'   MIXERCONTROL_CONTROLTYPE_xxx building block defines

Const MIXERCONTROL_CT_CLASS_MASK = &HF0000000
Const MIXERCONTROL_CT_CLASS_CUSTOM = &H0&
Const MIXERCONTROL_CT_CLASS_METER = &H10000000
Const MIXERCONTROL_CT_CLASS_SWITCH = &H20000000
Const MIXERCONTROL_CT_CLASS_NUMBER = &H30000000
Const MIXERCONTROL_CT_CLASS_SLIDER = &H40000000
Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
Const MIXERCONTROL_CT_CLASS_TIME = &H60000000
Const MIXERCONTROL_CT_CLASS_LIST = &H70000000
Const MIXERCONTROL_CT_SUBCLASS_MASK = &HF000000
Const MIXERCONTROL_CT_SC_SWITCH_BOOLEAN = &H0&
Const MIXERCONTROL_CT_SC_SWITCH_BUTTON = &H1000000
Const MIXERCONTROL_CT_SC_METER_POLLED = &H0&
Const MIXERCONTROL_CT_SC_TIME_MICROSECS = &H0&
Const MIXERCONTROL_CT_SC_TIME_MILLISECS = &H1000000
Const MIXERCONTROL_CT_SC_LIST_SINGLE = &H0&
Const MIXERCONTROL_CT_SC_LIST_MULTIPLE = &H1000000
Const MIXERCONTROL_CT_UNITS_MASK = &HFF0000
Const MIXERCONTROL_CT_UNITS_CUSTOM = &H0&
Const MIXERCONTROL_CT_UNITS_BOOLEAN = &H10000
Const MIXERCONTROL_CT_UNITS_SIGNED = &H20000
Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
Const MIXERCONTROL_CT_UNITS_DECIBELS = &H40000 '  in 10ths
Const MIXERCONTROL_CT_UNITS_PERCENT = &H50000 '  in 10ths
'
'   Commonly used control types for specifying MIXERCONTROL.dwControlType
'
Const MIXERCONTROL_CONTROLTYPE_CUSTOM = (MIXERCONTROL_CT_CLASS_CUSTOM Or MIXERCONTROL_CT_UNITS_CUSTOM)
Const MIXERCONTROL_CONTROLTYPE_BOOLEANMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_SIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_SIGNED)
Const MIXERCONTROL_CONTROLTYPE_PEAKMETER = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
Const MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH Or MIXERCONTROL_CT_SC_SWITCH_BOOLEAN Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_ONOFF = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
Const MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
Const MIXERCONTROL_CONTROLTYPE_MONO = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
Const MIXERCONTROL_CONTROLTYPE_LOUDNESS = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
Const MIXERCONTROL_CONTROLTYPE_STEREOENH = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
Const MIXERCONTROL_CONTROLTYPE_BUTTON = (MIXERCONTROL_CT_CLASS_SWITCH Or MIXERCONTROL_CT_SC_SWITCH_BUTTON Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_DECIBELS = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_DECIBELS)
Const MIXERCONTROL_CONTROLTYPE_SIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_SIGNED)
Const MIXERCONTROL_CONTROLTYPE_UNSIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_PERCENT = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_PERCENT)
Const MIXERCONTROL_CONTROLTYPE_SLIDER = (MIXERCONTROL_CT_CLASS_SLIDER Or MIXERCONTROL_CT_UNITS_SIGNED)
Const MIXERCONTROL_CONTROLTYPE_PAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
Const MIXERCONTROL_CONTROLTYPE_QSOUNDPAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
Const MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1)
Const MIXERCONTROL_CONTROLTYPE_BASS = (MIXERCONTROL_CONTROLTYPE_FADER + 2)
Const MIXERCONTROL_CONTROLTYPE_TREBLE = (MIXERCONTROL_CONTROLTYPE_FADER + 3)
Const MIXERCONTROL_CONTROLTYPE_EQUALIZER = (MIXERCONTROL_CONTROLTYPE_FADER + 4)
Const MIXERCONTROL_CONTROLTYPE_SINGLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or MIXERCONTROL_CT_SC_LIST_SINGLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_MUX = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
Const MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or MIXERCONTROL_CT_SC_LIST_MULTIPLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Const MIXERCONTROL_CONTROLTYPE_MIXER = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
Const MIXERCONTROL_CONTROLTYPE_MICROTIME = (MIXERCONTROL_CT_CLASS_TIME Or MIXERCONTROL_CT_SC_TIME_MICROSECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Const MIXERCONTROL_CONTROLTYPE_MILLITIME = (MIXERCONTROL_CT_CLASS_TIME Or MIXERCONTROL_CT_SC_TIME_MILLISECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
'
'   MIXERLINECONTROLS
'

Const MIXER_GETLINECONTROLSF_ALL = &H0&
Const MIXER_GETLINECONTROLSF_ONEBYID = &H1&
Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
Const MIXER_GETLINECONTROLSF_QUERYMASK = &HF&


Const MIXER_GETCONTROLDETAILSF_VALUE = &H0&
Const MIXER_GETCONTROLDETAILSF_LISTTEXT = &H1&
Const MIXER_GETCONTROLDETAILSF_QUERYMASK = &HF&

Const MIXER_SETCONTROLDETAILSF_VALUE = &H0&
Const MIXER_SETCONTROLDETAILSF_CUSTOM = &H1&
Const MIXER_SETCONTROLDETAILSF_QUERYMASK = &HF&

'  constants used with JOYINFOEX
Const JOY_BUTTON5 = &H10&
Const JOY_BUTTON6 = &H20&
Const JOY_BUTTON7 = &H40&
Const JOY_BUTTON8 = &H80&
Const JOY_BUTTON9 = &H100&
Const JOY_BUTTON10 = &H200&
Const JOY_BUTTON11 = &H400&
Const JOY_BUTTON12 = &H800&
Const JOY_BUTTON13 = &H1000&
Const JOY_BUTTON14 = &H2000&
Const JOY_BUTTON15 = &H4000&
Const JOY_BUTTON16 = &H8000&
Const JOY_BUTTON17 = &H10000
Const JOY_BUTTON18 = &H20000
Const JOY_BUTTON19 = &H40000
Const JOY_BUTTON20 = &H80000
Const JOY_BUTTON21 = &H100000
Const JOY_BUTTON22 = &H200000
Const JOY_BUTTON23 = &H400000
Const JOY_BUTTON24 = &H800000
Const JOY_BUTTON25 = &H1000000
Const JOY_BUTTON26 = &H2000000
Const JOY_BUTTON27 = &H4000000
Const JOY_BUTTON28 = &H8000000
Const JOY_BUTTON29 = &H10000000
Const JOY_BUTTON30 = &H20000000
Const JOY_BUTTON31 = &H40000000
Const JOY_BUTTON32 = &H80000000

'  constants used with JOYINFOEX structure
Const JOY_POVCENTERED = -1
Const JOY_POVFORWARD = 0
Const JOY_POVRIGHT = 9000
Const JOY_POVBACKWARD = 18000
Const JOY_POVLEFT = 27000
Const JOY_RETURNX = &H1&
Const JOY_RETURNY = &H2&
Const JOY_RETURNZ = &H4&
Const JOY_RETURNR = &H8&
Const JOY_RETURNU = &H10                             '  axis 5
Const JOY_RETURNV = &H20                             '  axis 6
Const JOY_RETURNPOV = &H40&
Const JOY_RETURNBUTTONS = &H80&
Const JOY_RETURNRAWDATA = &H100&
Const JOY_RETURNPOVCTS = &H200&
Const JOY_RETURNCENTERED = &H400&
Const JOY_USEDEADZONE = &H800&
Const JOY_RETURNALL = (JOY_RETURNX Or JOY_RETURNY Or JOY_RETURNZ Or JOY_RETURNR Or JOY_RETURNU Or JOY_RETURNV Or JOY_RETURNPOV Or JOY_RETURNBUTTONS)
Const JOY_CAL_READALWAYS = &H10000
Const JOY_CAL_READXYONLY = &H20000
Const JOY_CAL_READ3 = &H40000
Const JOY_CAL_READ4 = &H80000
Const JOY_CAL_READXONLY = &H100000
Const JOY_CAL_READYONLY = &H200000
Const JOY_CAL_READ5 = &H400000
Const JOY_CAL_READ6 = &H800000
Const JOY_CAL_READZONLY = &H1000000
Const JOY_CAL_READRONLY = &H2000000
Const JOY_CAL_READUONLY = &H4000000
Const JOY_CAL_READVONLY = &H8000000

Const WAVE_FORMAT_QUERY = &H1
Const SND_PURGE = &H40               '  purge non-static events for task
Const SND_APPLICATION = &H80         '  look for application specific association
Const WAVE_MAPPED = &H4
Const WAVE_FORMAT_DIRECT = &H8
Const WAVE_FORMAT_DIRECT_QUERY = (WAVE_FORMAT_QUERY Or WAVE_FORMAT_DIRECT)
Const MIM_MOREDATA = MM_MIM_MOREDATA
Const MOM_POSITIONCB = MM_MOM_POSITIONCB

'  flags for dwFlags parm of midiInOpen()
Const MIDI_IO_STATUS = &H20&


' Installable driver support

' Driver messages
Const DRV_LOAD = &H1
Const DRV_ENABLE = &H2
Const DRV_OPEN = &H3
Const DRV_CLOSE = &H4
Const DRV_DISABLE = &H5
Const DRV_FREE = &H6
Const DRV_CONFIGURE = &H7
Const DRV_QUERYCONFIGURE = &H8
Const DRV_INSTALL = &H9
Const DRV_REMOVE = &HA
Const DRV_EXITSESSION = &HB
Const DRV_POWER = &HF
Const DRV_RESERVED = &H800
Const DRV_USER = &H4000

' Supported return values for DRV_CONFIGURE message
Const DRVCNF_CANCEL = &H0
Const DRVCNF_OK = &H1
Const DRVCNF_RESTART = &H2

'  return values from DriverProc() function
Const DRV_CANCEL = DRVCNF_CANCEL
Const DRV_OK = DRVCNF_OK
Const DRV_RESTART = DRVCNF_RESTART

Const DRV_MCI_FIRST = DRV_RESERVED
Const DRV_MCI_LAST = DRV_RESERVED + &HFFF

' Driver callback support

'  flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and
'  midiOutOpen() to specify the type of the dwCallback parameter.
Const CALLBACK_TYPEMASK = &H70000      '  callback type mask
Const CALLBACK_NULL = &H0        '  no callback
Const CALLBACK_WINDOW = &H10000      '  dwCallback is a HWND
Const CALLBACK_TASK = &H20000      '  dwCallback is a HTASK
Const CALLBACK_FUNCTION = &H30000      '  dwCallback is a FARPROC

'  manufacturer IDs
Const MM_MICROSOFT = 1  '  Microsoft Corp.

'  product IDs
Const MM_MIDI_MAPPER = 1  '  MIDI Mapper
Const MM_WAVE_MAPPER = 2  '  Wave Mapper

Const MM_SNDBLST_MIDIOUT = 3  '  Sound Blaster MIDI output port
Const MM_SNDBLST_MIDIIN = 4  '  Sound Blaster MIDI input port
Const MM_SNDBLST_SYNTH = 5  '  Sound Blaster internal synthesizer
Const MM_SNDBLST_WAVEOUT = 6  '  Sound Blaster waveform output
Const MM_SNDBLST_WAVEIN = 7  '  Sound Blaster waveform input

Const MM_ADLIB = 9  '  Ad Lib-compatible synthesizer

Const MM_MPU401_MIDIOUT = 10  '  MPU401-compatible MIDI output port
Const MM_MPU401_MIDIIN = 11  '  MPU401-compatible MIDI input port

Const MM_PC_JOYSTICK = 12  '  Joystick adapter

'  flag values for uFlags parameter
Const SND_SYNC = &H0         '  play synchronously (default)
Const SND_ASYNC = &H1         '  play asynchronously

Const SND_NODEFAULT = &H2         '  silence not default, if sound not found

Const SND_MEMORY = &H4         '  lpszSoundName points to a memory file
Const SND_ALIAS = &H10000     '  name is a WIN.INI [sounds] entry
Const SND_FILENAME = &H20000     '  name is a file name
Const SND_RESOURCE = &H40004     '  name is a resource name or atom
Const SND_ALIAS_ID = &H110000    '  name is a WIN.INI [sounds] entry identifier

Const SND_ALIAS_START = 0  '  must be > 4096 to keep strings in same section of resource file

Const SND_LOOP = &H8         '  loop the sound until next sndPlaySound
Const SND_NOSTOP = &H10        '  don't stop any currently playing sound
Const SND_VALID = &H1F        '  valid flags          / ;Internal /

Const SND_NOWAIT = &H2000      '  don't wait if the driver is busy

Const SND_VALIDFLAGS = &H17201F    '  Set of valid flag bits.  Anything outside
                                    '  this range will raise an error
Const SND_RESERVED = &HFF000000  '  In particular these flags are reserved

Const SND_TYPE_MASK = &H170007

Declare Function PlaySound Lib "Coredll" Alias "PlaySoundW" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

'  waveform audio error return values
Const WAVERR_BADFORMAT = (WAVERR_BASE + 0)    '  unsupported wave format
Const WAVERR_STILLPLAYING = (WAVERR_BASE + 1)    '  still something playing
Const WAVERR_UNPREPARED = (WAVERR_BASE + 2)    '  header not prepared
Const WAVERR_SYNC = (WAVERR_BASE + 3)    '  device is synchronous
Const WAVERR_LASTERROR = (WAVERR_BASE + 3)    '  last error in range

'  wave callback messages
Const WOM_OPEN = MM_WOM_OPEN
Const WOM_CLOSE = MM_WOM_CLOSE
Const WOM_DONE = MM_WOM_DONE
Const WIM_OPEN = MM_WIM_OPEN
Const WIM_CLOSE = MM_WIM_CLOSE
Const WIM_DATA = MM_WIM_DATA

'  device ID for wave device mapper
Const WAVE_MAPPER = -1&

'  flags for dwFlags parameter in waveOutOpen() and waveInOpen()

Const WAVE_ALLOWSYNC = &H2
Const WAVE_VALID = &H3         '  ;Internal


'  flags for dwFlags field of WAVEHDR
Const WHDR_DONE = &H1         '  done bit
Const WHDR_PREPARED = &H2         '  set if this header has been prepared
Const WHDR_BEGINLOOP = &H4         '  loop start block
Const WHDR_ENDLOOP = &H8         '  loop end block
Const WHDR_INQUEUE = &H10        '  reserved for driver
Const WHDR_VALID = &H1F        '  valid flags      / ;Internal /


'  flags for dwSupport field of WAVEOUTCAPS
Const WAVECAPS_PITCH = &H1         '  supports pitch control
Const WAVECAPS_PLAYBACKRATE = &H2         '  supports playback rate control
Const WAVECAPS_VOLUME = &H4         '  supports volume control
Const WAVECAPS_LRVOLUME = &H8         '  separate left-right volume control
Const WAVECAPS_SYNC = &H10


'  defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS
Const WAVE_INVALIDFORMAT = &H0              '  invalid format
Const WAVE_FORMAT_1M08 = &H1              '  11.025 kHz, Mono,   8-bit
Const WAVE_FORMAT_1S08 = &H2              '  11.025 kHz, Stereo, 8-bit
Const WAVE_FORMAT_1M16 = &H4              '  11.025 kHz, Mono,   16-bit
Const WAVE_FORMAT_1S16 = &H8              '  11.025 kHz, Stereo, 16-bit
Const WAVE_FORMAT_2M08 = &H10             '  22.05  kHz, Mono,   8-bit
Const WAVE_FORMAT_2S08 = &H20             '  22.05  kHz, Stereo, 8-bit
Const WAVE_FORMAT_2M16 = &H40             '  22.05  kHz, Mono,   16-bit
Const WAVE_FORMAT_2S16 = &H80             '  22.05  kHz, Stereo, 16-bit
Const WAVE_FORMAT_4M08 = &H100            '  44.1   kHz, Mono,   8-bit
Const WAVE_FORMAT_4S08 = &H200            '  44.1   kHz, Stereo, 8-bit
Const WAVE_FORMAT_4M16 = &H400            '  44.1   kHz, Mono,   16-bit
Const WAVE_FORMAT_4S16 = &H800            '  44.1   kHz, Stereo, 16-bit

'  flags for wFormatTag field of WAVEFORMAT
Const WAVE_FORMAT_PCM = 1  '  Needed in resource files so outside #ifndef RC_INVOKED

'  MIDI error return values
Const MIDIERR_UNPREPARED = (MIDIERR_BASE + 0)   '  header not prepared
Const MIDIERR_STILLPLAYING = (MIDIERR_BASE + 1)   '  still something playing
Const MIDIERR_NOMAP = (MIDIERR_BASE + 2)   '  no current map
Const MIDIERR_NOTREADY = (MIDIERR_BASE + 3)   '  hardware is still busy
Const MIDIERR_NODEVICE = (MIDIERR_BASE + 4)   '  port no longer connected
Const MIDIERR_INVALIDSETUP = (MIDIERR_BASE + 5)   '  invalid setup
Const MIDIERR_LASTERROR = (MIDIERR_BASE + 5)   '  last error in range

'  MIDI callback messages
Const MIM_OPEN = MM_MIM_OPEN
Const MIM_CLOSE = MM_MIM_CLOSE
Const MIM_DATA = MM_MIM_DATA
Const MIM_LONGDATA = MM_MIM_LONGDATA
Const MIM_ERROR = MM_MIM_ERROR
Const MIM_LONGERROR = MM_MIM_LONGERROR
Const MOM_OPEN = MM_MOM_OPEN
Const MOM_CLOSE = MM_MOM_CLOSE
Const MOM_DONE = MM_MOM_DONE

'  device ID for MIDI mapper
Const MIDIMAPPER = (-1)  '  Cannot be cast to DWORD as RC complains
Const MIDI_MAPPER = -1&

'  flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches()
Const MIDI_CACHE_ALL = 1
Const MIDI_CACHE_BESTFIT = 2
Const MIDI_CACHE_QUERY = 3
Const MIDI_UNCACHE = 4
Const MIDI_CACHE_VALID = (MIDI_CACHE_ALL Or MIDI_CACHE_BESTFIT Or MIDI_CACHE_QUERY Or MIDI_UNCACHE)  '  ;Internal

'  flags for wTechnology field of MIDIOUTCAPS structure
Const MOD_MIDIPORT = 1  '  output port
Const MOD_SYNTH = 2  '  generic internal synth
Const MOD_SQSYNTH = 3  '  square wave internal synth
Const MOD_FMSYNTH = 4  '  FM internal synth
Const MOD_MAPPER = 5  '  MIDI mapper

'  flags for dwSupport field of MIDIOUTCAPS
Const MIDICAPS_VOLUME = &H1         '  supports volume control
Const MIDICAPS_LRVOLUME = &H2         '  separate left-right volume control
Const MIDICAPS_CACHE = &H4


'  flags for dwFlags field of MIDIHDR structure
Const MHDR_DONE = &H1         '  done bit
Const MHDR_PREPARED = &H2         '  set if header prepared
Const MHDR_INQUEUE = &H4         '  reserved for driver
Const MHDR_VALID = &H7         '  valid flags / ;Internal /
'  device ID for aux device mapper
Const AUX_MAPPER = -1&

'  flags for wTechnology field in AUXCAPS structure
Const AUXCAPS_CDAUDIO = 1  '  audio from internal CD-ROM drive
Const AUXCAPS_AUXIN = 2  '  audio from auxiliary input jacks

'  flags for dwSupport field in AUXCAPS structure
Const AUXCAPS_VOLUME = &H1         '  supports volume control
Const AUXCAPS_LRVOLUME = &H2         '  separate left-right volume control


'  timer error return values
Const TIMERR_NOERROR = (0)  '  no error
Const TIMERR_NOCANDO = (TIMERR_BASE + 1) '  request not completed
Const TIMERR_STRUCT = (TIMERR_BASE + 33) '  time struct size

'  flags for wFlags parameter of timeSetEvent() function
Const TIME_ONESHOT = 0  '  program timer for single event
Const TIME_PERIODIC = 1  '  program for continuous periodic event


'  joystick error return values
Const JOYERR_NOERROR = (0)  '  no error
Const JOYERR_PARMS = (JOYERR_BASE + 5) '  bad parameters
Const JOYERR_NOCANDO = (JOYERR_BASE + 6) '  request not completed
Const JOYERR_UNPLUGGED = (JOYERR_BASE + 7) '  joystick is unplugged

'  constants used with JOYINFO structure and MM_JOY messages
Const JOY_BUTTON1 = &H1
Const JOY_BUTTON2 = &H2
Const JOY_BUTTON3 = &H4
Const JOY_BUTTON4 = &H8
Const JOY_BUTTON1CHG = &H100
Const JOY_BUTTON2CHG = &H200
Const JOY_BUTTON3CHG = &H400
Const JOY_BUTTON4CHG = &H800

'  joystick ID constants
Const JOYSTICKID1 = 0
Const JOYSTICKID2 = 1


'  MMIO error return values
Const MMIOERR_BASE = 256
Const MMIOERR_FILENOTFOUND = (MMIOERR_BASE + 1)  '  file not found
Const MMIOERR_OUTOFMEMORY = (MMIOERR_BASE + 2)  '  out of memory
Const MMIOERR_CANNOTOPEN = (MMIOERR_BASE + 3)  '  cannot open
Const MMIOERR_CANNOTCLOSE = (MMIOERR_BASE + 4)  '  cannot close
Const MMIOERR_CANNOTREAD = (MMIOERR_BASE + 5)  '  cannot read
Const MMIOERR_CANNOTWRITE = (MMIOERR_BASE + 6) '  cannot write
Const MMIOERR_CANNOTSEEK = (MMIOERR_BASE + 7)  '  cannot seek
Const MMIOERR_CANNOTEXPAND = (MMIOERR_BASE + 8)  '  cannot expand file
Const MMIOERR_CHUNKNOTFOUND = (MMIOERR_BASE + 9)  '  chunk not found
Const MMIOERR_UNBUFFERED = (MMIOERR_BASE + 10) '  file is unbuffered

'  MMIO constants
Const CFSEPCHAR = "+"  '  compound file name separator char.

Const MMIO_RWMODE = &H3         '  mask to get bits used for opening
                                        '  file for reading/writing/both
Const MMIO_SHAREMODE = &H70        '  file sharing mode number

'  constants for dwFlags field of MMIOINFO
Const MMIO_CREATE = &H1000      '  create new file (or truncate file)
Const MMIO_PARSE = &H100       '  parse new file returning path
Const MMIO_DELETE = &H200       '  create new file (or truncate file)
Const MMIO_EXIST = &H4000      '  checks for existence of file
Const MMIO_ALLOCBUF = &H10000     '  mmioOpen() should allocate a buffer
Const MMIO_GETTEMP = &H20000     '  mmioOpen() should retrieve temp name

Const MMIO_DIRTY = &H10000000  '  I/O buffer is dirty
'  MMIO_DIRTY is also used in the <dwFlags> field of MMCKINFO structure

Const MMIO_OPEN_VALID = &H3FFFF     '  valid flags for mmioOpen / ;Internal /

'  read/write mode numbers (bit field MMIO_RWMODE)
Const MMIO_READ = &H0         '  open file for reading only
Const MMIO_WRITE = &H1         '  open file for writing only
Const MMIO_READWRITE = &H2         '  open file for reading and writing

'  share mode numbers (bit field MMIO_SHAREMODE)
Const MMIO_COMPAT = &H0         '  compatibility mode
Const MMIO_EXCLUSIVE = &H10        '  exclusive-access mode
Const MMIO_DENYWRITE = &H20        '  deny writing to other processes
Const MMIO_DENYREAD = &H30        '  deny reading to other processes
Const MMIO_DENYNONE = &H40        '  deny nothing to other processes

'  flags for other functions
Const MMIO_FHOPEN = &H10    '  mmioClose(): keep file handle open
Const MMIO_EMPTYBUF = &H10    '  mmioFlush(): empty the I/O buffer
Const MMIO_TOUPPER = &H10    '  mmioStringToFOURCC(): cvt. to u-case
Const MMIO_INSTALLPROC = &H10000     '  mmioInstallIOProc(): install MMIOProc
Const MMIO_PUBLICPROC = &H10000000  '  mmioInstallIOProc: install Globally
Const MMIO_UNICODEPROC = &H1000000   '  mmioInstallIOProc(): Unicode MMIOProc
Const MMIO_REMOVEPROC = &H20000     '  mmioInstallIOProc(): remove MMIOProc
Const MMIO_FINDPROC = &H40000     '  mmioInstallIOProc(): find an MMIOProc
Const MMIO_FINDCHUNK = &H10    '  mmioDescend(): find a chunk by ID
Const MMIO_FINDRIFF = &H20    '  mmioDescend(): find a LIST chunk
Const MMIO_FINDLIST = &H40    '  mmioDescend(): find a RIFF chunk
Const MMIO_CREATERIFF = &H20    '  mmioCreateChunk(): make a LIST chunk
Const MMIO_CREATELIST = &H40    '  mmioCreateChunk(): make a RIFF chunk

Const MMIO_VALIDPROC = &H11070000  '  valid for mmioInstallIOProc / ;Internal /

'  message numbers for MMIOPROC I/O procedure functions
Const MMIOM_READ = MMIO_READ  '  read (must equal MMIO_READ!)
Const MMIOM_WRITE = MMIO_WRITE  '  write (must equal MMIO_WRITE!)
Const MMIOM_SEEK = 2  '  seek to a new position in file
Const MMIOM_OPEN = 3  '  open file
Const MMIOM_CLOSE = 4  '  close file
Const MMIOM_WRITEFLUSH = 5  '  write and flush
Const MMIOM_RENAME = 6  '  rename specified file
Const MMIOM_USER = &H8000  '  beginning of user-defined messages

'  flags for mmioSeek()
Const SEEK_SET = 0  '  seek to an absolute position
Const SEEK_CUR = 1  '  seek relative to current position
Const SEEK_END = 2  '  seek relative to end of file

'  other constants
Const MMIO_DEFAULTBUFFER = 8192  '  default buffer size

'   MCI error return values
Const MCIERR_INVALID_DEVICE_ID = (MCIERR_BASE + 1)
Const MCIERR_UNRECOGNIZED_KEYWORD = (MCIERR_BASE + 3)
Const MCIERR_UNRECOGNIZED_COMMAND = (MCIERR_BASE + 5)
Const MCIERR_HARDWARE = (MCIERR_BASE + 6)
Const MCIERR_INVALID_DEVICE_NAME = (MCIERR_BASE + 7)
Const MCIERR_OUT_OF_MEMORY = (MCIERR_BASE + 8)
Const MCIERR_DEVICE_OPEN = (MCIERR_BASE + 9)
Const MCIERR_CANNOT_LOAD_DRIVER = (MCIERR_BASE + 10)
Const MCIERR_MISSING_COMMAND_STRING = (MCIERR_BASE + 11)
Const MCIERR_PARAM_OVERFLOW = (MCIERR_BASE + 12)
Const MCIERR_MISSING_STRING_ARGUMENT = (MCIERR_BASE + 13)
Const MCIERR_BAD_INTEGER = (MCIERR_BASE + 14)
Const MCIERR_PARSER_INTERNAL = (MCIERR_BASE + 15)
Const MCIERR_DRIVER_INTERNAL = (MCIERR_BASE + 16)
Const MCIERR_MISSING_PARAMETER = (MCIERR_BASE + 17)
Const MCIERR_UNSUPPORTED_FUNCTION = (MCIERR_BASE + 18)
Const MCIERR_FILE_NOT_FOUND = (MCIERR_BASE + 19)
Const MCIERR_DEVICE_NOT_READY = (MCIERR_BASE + 20)
Const MCIERR_INTERNAL = (MCIERR_BASE + 21)
Const MCIERR_DRIVER = (MCIERR_BASE + 22)
Const MCIERR_CANNOT_USE_ALL = (MCIERR_BASE + 23)
Const MCIERR_MULTIPLE = (MCIERR_BASE + 24)
Const MCIERR_EXTENSION_NOT_FOUND = (MCIERR_BASE + 25)
Const MCIERR_OUTOFRANGE = (MCIERR_BASE + 26)
Const MCIERR_FLAGS_NOT_COMPATIBLE = (MCIERR_BASE + 28)
Const MCIERR_FILE_NOT_SAVED = (MCIERR_BASE + 30)
Const MCIERR_DEVICE_TYPE_REQUIRED = (MCIERR_BASE + 31)
Const MCIERR_DEVICE_LOCKED = (MCIERR_BASE + 32)
Const MCIERR_DUPLICATE_ALIAS = (MCIERR_BASE + 33)
Const MCIERR_BAD_CONSTANT = (MCIERR_BASE + 34)
Const MCIERR_MUST_USE_SHAREABLE = (MCIERR_BASE + 35)
Const MCIERR_MISSING_DEVICE_NAME = (MCIERR_BASE + 36)
Const MCIERR_BAD_TIME_FORMAT = (MCIERR_BASE + 37)
Const MCIERR_NO_CLOSING_QUOTE = (MCIERR_BASE + 38)
Const MCIERR_DUPLICATE_FLAGS = (MCIERR_BASE + 39)
Const MCIERR_INVALID_FILE = (MCIERR_BASE + 40)
Const MCIERR_NULL_PARAMETER_BLOCK = (MCIERR_BASE + 41)
Const MCIERR_UNNAMED_RESOURCE = (MCIERR_BASE + 42)
Const MCIERR_NEW_REQUIRES_ALIAS = (MCIERR_BASE + 43)
Const MCIERR_NOTIFY_ON_AUTO_OPEN = (MCIERR_BASE + 44)
Const MCIERR_NO_ELEMENT_ALLOWED = (MCIERR_BASE + 45)
Const MCIERR_NONAPPLICABLE_FUNCTION = (MCIERR_BASE + 46)
Const MCIERR_ILLEGAL_FOR_AUTO_OPEN = (MCIERR_BASE + 47)
Const MCIERR_FILENAME_REQUIRED = (MCIERR_BASE + 48)
Const MCIERR_EXTRA_CHARACTERS = (MCIERR_BASE + 49)
Const MCIERR_DEVICE_NOT_INSTALLED = (MCIERR_BASE + 50)
Const MCIERR_GET_CD = (MCIERR_BASE + 51)
Const MCIERR_SET_CD = (MCIERR_BASE + 52)
Const MCIERR_SET_DRIVE = (MCIERR_BASE + 53)
Const MCIERR_DEVICE_LENGTH = (MCIERR_BASE + 54)
Const MCIERR_DEVICE_ORD_LENGTH = (MCIERR_BASE + 55)
Const MCIERR_NO_INTEGER = (MCIERR_BASE + 56)

Const MCIERR_WAVE_OUTPUTSINUSE = (MCIERR_BASE + 64)
Const MCIERR_WAVE_SETOUTPUTINUSE = (MCIERR_BASE + 65)
Const MCIERR_WAVE_INPUTSINUSE = (MCIERR_BASE + 66)
Const MCIERR_WAVE_SETINPUTINUSE = (MCIERR_BASE + 67)
Const MCIERR_WAVE_OUTPUTUNSPECIFIED = (MCIERR_BASE + 68)
Const MCIERR_WAVE_INPUTUNSPECIFIED = (MCIERR_BASE + 69)
Const MCIERR_WAVE_OUTPUTSUNSUITABLE = (MCIERR_BASE + 70)
Const MCIERR_WAVE_SETOUTPUTUNSUITABLE = (MCIERR_BASE + 71)
Const MCIERR_WAVE_INPUTSUNSUITABLE = (MCIERR_BASE + 72)
Const MCIERR_WAVE_SETINPUTUNSUITABLE = (MCIERR_BASE + 73)

Const MCIERR_SEQ_DIV_INCOMPATIBLE = (MCIERR_BASE + 80)
Const MCIERR_SEQ_PORT_INUSE = (MCIERR_BASE + 81)
Const MCIERR_SEQ_PORT_NONEXISTENT = (MCIERR_BASE + 82)
Const MCIERR_SEQ_PORT_MAPNODEVICE = (MCIERR_BASE + 83)
Const MCIERR_SEQ_PORT_MISCERROR = (MCIERR_BASE + 84)
Const MCIERR_SEQ_TIMER = (MCIERR_BASE + 85)
Const MCIERR_SEQ_PORTUNSPECIFIED = (MCIERR_BASE + 86)
Const MCIERR_SEQ_NOMIDIPRESENT = (MCIERR_BASE + 87)

Const MCIERR_NO_WINDOW = (MCIERR_BASE + 90)
Const MCIERR_CREATEWINDOW = (MCIERR_BASE + 91)
Const MCIERR_FILE_READ = (MCIERR_BASE + 92)
Const MCIERR_FILE_WRITE = (MCIERR_BASE + 93)

'  All custom device driver errors must be >= this value
Const MCIERR_CUSTOM_DRIVER_BASE = (MCIERR_BASE + 256)

'  Message numbers must be in the range between MCI_FIRST and MCI_LAST

Const MCI_FIRST = &H800
'  Messages 0x801 and 0x802 are reserved
Const MCI_OPEN = &H803
Const MCI_CLOSE = &H804
Const MCI_ESCAPE = &H805
Const MCI_PLAY = &H806
Const MCI_SEEK = &H807
Const MCI_STOP = &H808
Const MCI_PAUSE = &H809
Const MCI_INFO = &H80A
Const MCI_GETDEVCAPS = &H80B
Const MCI_SPIN = &H80C
Const MCI_SET = &H80D
Const MCI_STEP = &H80E
Const MCI_RECORD = &H80F
Const MCI_SYSINFO = &H810
Const MCI_BREAK = &H811
Const MCI_SOUND = &H812
Const MCI_SAVE = &H813
Const MCI_STATUS = &H814

Const MCI_CUE = &H830

Const MCI_REALIZE = &H840
Const MCI_WINDOW = &H841
Const MCI_PUT = &H842
Const MCI_WHERE = &H843
Const MCI_FREEZE = &H844
Const MCI_UNFREEZE = &H845

Const MCI_LOAD = &H850
Const MCI_CUT = &H851
Const MCI_COPY = &H852
Const MCI_PASTE = &H853
Const MCI_UPDATE = &H854
Const MCI_RESUME = &H855
Const MCI_DELETE = &H856

Const MCI_LAST = &HFFF

'  the next 0x400 message ID's are reserved for custom drivers
'  all custom MCI command messages must be >= than this value
Const MCI_USER_MESSAGES = (&H400 + MCI_FIRST)
Const MCI_ALL_DEVICE_ID =  - 1 '  Matches all MCI devices

'  constants for predefined MCI device types
Const MCI_DEVTYPE_VCR = 513
Const MCI_DEVTYPE_VIDEODISC = 514
Const MCI_DEVTYPE_OVERLAY = 515
Const MCI_DEVTYPE_CD_AUDIO = 516
Const MCI_DEVTYPE_DAT = 517
Const MCI_DEVTYPE_SCANNER = 518
Const MCI_DEVTYPE_ANIMATION = 519
Const MCI_DEVTYPE_DIGITAL_VIDEO = 520
Const MCI_DEVTYPE_OTHER = 521
Const MCI_DEVTYPE_WAVEFORM_AUDIO = 522
Const MCI_DEVTYPE_SEQUENCER = 523

Const MCI_DEVTYPE_FIRST = MCI_DEVTYPE_VCR
Const MCI_DEVTYPE_LAST = MCI_DEVTYPE_SEQUENCER

Const MCI_DEVTYPE_FIRST_USER = &H1000

'  return values for 'status mode' command
Const MCI_MODE_NOT_READY = (MCI_STRING_OFFSET + 12)
Const MCI_MODE_STOP = (MCI_STRING_OFFSET + 13)
Const MCI_MODE_PLAY = (MCI_STRING_OFFSET + 14)
Const MCI_MODE_RECORD = (MCI_STRING_OFFSET + 15)
Const MCI_MODE_SEEK = (MCI_STRING_OFFSET + 16)
Const MCI_MODE_PAUSE = (MCI_STRING_OFFSET + 17)
Const MCI_MODE_OPEN = (MCI_STRING_OFFSET + 18)

'  constants used in 'set time format' and 'status time format' commands
Const MCI_FORMAT_MILLISECONDS = 0
Const MCI_FORMAT_HMS = 1
Const MCI_FORMAT_MSF = 2
Const MCI_FORMAT_FRAMES = 3
Const MCI_FORMAT_SMPTE_24 = 4
Const MCI_FORMAT_SMPTE_25 = 5
Const MCI_FORMAT_SMPTE_30 = 6
Const MCI_FORMAT_SMPTE_30DROP = 7
Const MCI_FORMAT_BYTES = 8
Const MCI_FORMAT_SAMPLES = 9
Const MCI_FORMAT_TMSF = 10

'  Flags for wParam of the MM_MCINOTIFY message
Const MCI_NOTIFY_SUCCESSFUL = &H1
Const MCI_NOTIFY_SUPERSEDED = &H2
Const MCI_NOTIFY_ABORTED = &H4
Const MCI_NOTIFY_FAILURE = &H8

'  common flags for dwFlags parameter of MCI command messages
Const MCI_NOTIFY = &H1&
Const MCI_WAIT = &H2&
Const MCI_FROM = &H4&
Const MCI_TO = &H8&
Const MCI_TRACK = &H10&

'  flags for dwFlags parameter of MCI_OPEN command message
Const MCI_OPEN_SHAREABLE = &H100&
Const MCI_OPEN_ELEMENT = &H200&
Const MCI_OPEN_ALIAS = &H400&
Const MCI_OPEN_ELEMENT_ID = &H800&
Const MCI_OPEN_TYPE_ID = &H1000&
Const MCI_OPEN_TYPE = &H2000&

'  flags for dwFlags parameter of MCI_SEEK command message
Const MCI_SEEK_TO_START = &H100&
Const MCI_SEEK_TO_END = &H200&

'  flags for dwFlags parameter of MCI_STATUS command message
Const MCI_STATUS_ITEM = &H100&
Const MCI_STATUS_START = &H200&

'  flags for dwItem field of the MCI_STATUS_PARMS parameter block
Const MCI_STATUS_LENGTH = &H1&
Const MCI_STATUS_POSITION = &H2&
Const MCI_STATUS_NUMBER_OF_TRACKS = &H3&
Const MCI_STATUS_MODE = &H4&
Const MCI_STATUS_MEDIA_PRESENT = &H5&
Const MCI_STATUS_TIME_FORMAT = &H6&
Const MCI_STATUS_READY = &H7&
Const MCI_STATUS_CURRENT_TRACK = &H8&

'  flags for dwFlags parameter of MCI_INFO command message
Const MCI_INFO_PRODUCT = &H100&
Const MCI_INFO_FILE = &H200&

'  flags for dwFlags parameter of MCI_GETDEVCAPS command message
Const MCI_GETDEVCAPS_ITEM = &H100&

'  flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block
Const MCI_GETDEVCAPS_CAN_RECORD = &H1&
Const MCI_GETDEVCAPS_HAS_AUDIO = &H2&
Const MCI_GETDEVCAPS_HAS_VIDEO = &H3&
Const MCI_GETDEVCAPS_DEVICE_TYPE = &H4&
Const MCI_GETDEVCAPS_USES_FILES = &H5&
Const MCI_GETDEVCAPS_COMPOUND_DEVICE = &H6&
Const MCI_GETDEVCAPS_CAN_EJECT = &H7&
Const MCI_GETDEVCAPS_CAN_PLAY = &H8&
Const MCI_GETDEVCAPS_CAN_SAVE = &H9&

'  flags for dwFlags parameter of MCI_SYSINFO command message
Const MCI_SYSINFO_QUANTITY = &H100&
Const MCI_SYSINFO_OPEN = &H200&
Const MCI_SYSINFO_NAME = &H400&
Const MCI_SYSINFO_INSTALLNAME = &H800&

'  flags for dwFlags parameter of MCI_SET command message
Const MCI_SET_DOOR_OPEN = &H100&
Const MCI_SET_DOOR_CLOSED = &H200&
Const MCI_SET_TIME_FORMAT = &H400&
Const MCI_SET_AUDIO = &H800&
Const MCI_SET_VIDEO = &H1000&
Const MCI_SET_ON = &H2000&
Const MCI_SET_OFF = &H4000&

'  flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS
Const MCI_SET_AUDIO_ALL = &H4001&
Const MCI_SET_AUDIO_LEFT = &H4002&
Const MCI_SET_AUDIO_RIGHT = &H4003&

'  flags for dwFlags parameter of MCI_BREAK command message
Const MCI_BREAK_KEY = &H100&
Const MCI_BREAK_HWND = &H200&
Const MCI_BREAK_OFF = &H400&

'  flags for dwFlags parameter of MCI_RECORD command message
Const MCI_RECORD_INSERT = &H100&
Const MCI_RECORD_OVERWRITE = &H200&

'  flags for dwFlags parameter of MCI_SOUND command message
Const MCI_SOUND_NAME = &H100&

'  flags for dwFlags parameter of MCI_SAVE command message
Const MCI_SAVE_FILE = &H100&

'  flags for dwFlags parameter of MCI_LOAD command message
Const MCI_LOAD_FILE = &H100&


Const MCI_VD_MODE_PARK = (MCI_VD_OFFSET + 1)

'  return ID's for videodisc MCI_GETDEVCAPS command

'  flag for dwReturn field of MCI_STATUS_PARMS
'  MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE)
Const MCI_VD_MEDIA_CLV = (MCI_VD_OFFSET + 2)
Const MCI_VD_MEDIA_CAV = (MCI_VD_OFFSET + 3)
Const MCI_VD_MEDIA_OTHER = (MCI_VD_OFFSET + 4)

Const MCI_VD_FORMAT_TRACK = &H4001

'  flags for dwFlags parameter of MCI_PLAY command message
Const MCI_VD_PLAY_REVERSE = &H10000
Const MCI_VD_PLAY_FAST = &H20000
Const MCI_VD_PLAY_SPEED = &H40000
Const MCI_VD_PLAY_SCAN = &H80000
Const MCI_VD_PLAY_SLOW = &H100000

'  flag for dwFlags parameter of MCI_SEEK command message
Const MCI_VD_SEEK_REVERSE = &H10000

'  flags for dwItem field of MCI_STATUS_PARMS parameter block
Const MCI_VD_STATUS_SPEED = &H4002&
Const MCI_VD_STATUS_FORWARD = &H4003&
Const MCI_VD_STATUS_MEDIA_TYPE = &H4004&
Const MCI_VD_STATUS_SIDE = &H4005&
Const MCI_VD_STATUS_DISC_SIZE = &H4006&

'  flags for dwFlags parameter of MCI_GETDEVCAPS command message
Const MCI_VD_GETDEVCAPS_CLV = &H10000
Const MCI_VD_GETDEVCAPS_CAV = &H20000

Const MCI_VD_SPIN_UP = &H10000
Const MCI_VD_SPIN_DOWN = &H20000

'  flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
Const MCI_VD_GETDEVCAPS_CAN_REVERSE = &H4002&
Const MCI_VD_GETDEVCAPS_FAST_RATE = &H4003&
Const MCI_VD_GETDEVCAPS_SLOW_RATE = &H4004&
Const MCI_VD_GETDEVCAPS_NORMAL_RATE = &H4005&

'  flags for the dwFlags parameter of MCI_STEP command message
Const MCI_VD_STEP_FRAMES = &H10000
Const MCI_VD_STEP_REVERSE = &H20000

'  flag for the MCI_ESCAPE command message
Const MCI_VD_ESCAPE_STRING = &H100&



Const MCI_WAVE_PCM = (MCI_WAVE_OFFSET + 0)
Const MCI_WAVE_MAPPER = (MCI_WAVE_OFFSET + 1)

'  flags for the dwFlags parameter of MCI_OPEN command message
Const MCI_WAVE_OPEN_BUFFER = &H10000

'  flags for the dwFlags parameter of MCI_SET command message
Const MCI_WAVE_SET_FORMATTAG = &H10000
Const MCI_WAVE_SET_CHANNELS = &H20000
Const MCI_WAVE_SET_SAMPLESPERSEC = &H40000
Const MCI_WAVE_SET_AVGBYTESPERSEC = &H80000
Const MCI_WAVE_SET_BLOCKALIGN = &H100000
Const MCI_WAVE_SET_BITSPERSAMPLE = &H200000

'  flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages
Const MCI_WAVE_INPUT = &H400000
Const MCI_WAVE_OUTPUT = &H800000

'  flags for the dwItem field of MCI_STATUS_PARMS parameter block
Const MCI_WAVE_STATUS_FORMATTAG = &H4001&
Const MCI_WAVE_STATUS_CHANNELS = &H4002&
Const MCI_WAVE_STATUS_SAMPLESPERSEC = &H4003&
Const MCI_WAVE_STATUS_AVGBYTESPERSEC = &H4004&
Const MCI_WAVE_STATUS_BLOCKALIGN = &H4005&
Const MCI_WAVE_STATUS_BITSPERSAMPLE = &H4006&
Const MCI_WAVE_STATUS_LEVEL = &H4007&

'  flags for the dwFlags parameter of MCI_SET command message
Const MCI_WAVE_SET_ANYINPUT = &H4000000
Const MCI_WAVE_SET_ANYOUTPUT = &H8000000

'  flags for the dwFlags parameter of MCI_GETDEVCAPS command message
Const MCI_WAVE_GETDEVCAPS_INPUTS = &H4001&
Const MCI_WAVE_GETDEVCAPS_OUTPUTS = &H4002&

'  flags for the dwReturn field of MCI_STATUS_PARMS parameter block
'  MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE)
Const MCI_SEQ_DIV_PPQN = (0 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_24 = (1 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_25 = (2 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_30DROP = (3 + MCI_SEQ_OFFSET)
Const MCI_SEQ_DIV_SMPTE_30 = (4 + MCI_SEQ_OFFSET)

'  flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block
'  MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER)
Const MCI_SEQ_FORMAT_SONGPTR = &H4001
Const MCI_SEQ_FILE = &H4002
Const MCI_SEQ_MIDI = &H4003
Const MCI_SEQ_SMPTE = &H4004
Const MCI_SEQ_NONE = 65533

Const MCI_SEQ_MAPPER = 65535

'  flags for the dwItem field of MCI_STATUS_PARMS parameter block
Const MCI_SEQ_STATUS_TEMPO = &H4002&
Const MCI_SEQ_STATUS_PORT = &H4003&
Const MCI_SEQ_STATUS_SLAVE = &H4007&
Const MCI_SEQ_STATUS_MASTER = &H4008&
Const MCI_SEQ_STATUS_OFFSET = &H4009&
Const MCI_SEQ_STATUS_DIVTYPE = &H400A&

'  flags for the dwFlags parameter of MCI_SET command message
Const MCI_SEQ_SET_TEMPO = &H10000
Const MCI_SEQ_SET_PORT = &H20000
Const MCI_SEQ_SET_SLAVE = &H40000
Const MCI_SEQ_SET_MASTER = &H80000
Const MCI_SEQ_SET_OFFSET = &H1000000

'  flags for dwFlags parameter of MCI_OPEN command message
Const MCI_ANIM_OPEN_WS = &H10000
Const MCI_ANIM_OPEN_PARENT = &H20000
Const MCI_ANIM_OPEN_NOSTATIC = &H40000

'  flags for dwFlags parameter of MCI_PLAY command message
Const MCI_ANIM_PLAY_SPEED = &H10000
Const MCI_ANIM_PLAY_REVERSE = &H20000
Const MCI_ANIM_PLAY_FAST = &H40000
Const MCI_ANIM_PLAY_SLOW = &H80000
Const MCI_ANIM_PLAY_SCAN = &H100000

'  flags for dwFlags parameter of MCI_STEP command message
Const MCI_ANIM_STEP_REVERSE = &H10000
Const MCI_ANIM_STEP_FRAMES = &H20000

'  flags for dwItem field of MCI_STATUS_PARMS parameter block
Const MCI_ANIM_STATUS_SPEED = &H4001&
Const MCI_ANIM_STATUS_FORWARD = &H4002&
Const MCI_ANIM_STATUS_HWND = &H4003&
Const MCI_ANIM_STATUS_HPAL = &H4004&
Const MCI_ANIM_STATUS_STRETCH = &H4005&

'  flags for the dwFlags parameter of MCI_INFO command message
Const MCI_ANIM_INFO_TEXT = &H10000

'  flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
Const MCI_ANIM_GETDEVCAPS_CAN_REVERSE = &H4001&
Const MCI_ANIM_GETDEVCAPS_FAST_RATE = &H4002&
Const MCI_ANIM_GETDEVCAPS_SLOW_RATE = &H4003&
Const MCI_ANIM_GETDEVCAPS_NORMAL_RATE = &H4004&
Const MCI_ANIM_GETDEVCAPS_PALETTES = &H4006&
Const MCI_ANIM_GETDEVCAPS_CAN_STRETCH = &H4007&
Const MCI_ANIM_GETDEVCAPS_MAX_WINDOWS = &H4008&

'  flags for the MCI_REALIZE command message
Const MCI_ANIM_REALIZE_NORM = &H10000
Const MCI_ANIM_REALIZE_BKGD = &H20000

'  flags for dwFlags parameter of MCI_WINDOW command message
Const MCI_ANIM_WINDOW_HWND = &H10000
Const MCI_ANIM_WINDOW_STATE = &H40000
Const MCI_ANIM_WINDOW_TEXT = &H80000
Const MCI_ANIM_WINDOW_ENABLE_STRETCH = &H100000
Const MCI_ANIM_WINDOW_DISABLE_STRETCH = &H200000

'  flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block
'  MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND)
Const MCI_ANIM_WINDOW_DEFAULT = &H0&

'  flags for dwFlags parameter of MCI_PUT command message
Const MCI_ANIM_RECT = &H10000
Const MCI_ANIM_PUT_SOURCE = &H20000      '  also  MCI_WHERE
Const MCI_ANIM_PUT_DESTINATION = &H40000      '  also  MCI_WHERE

'  flags for dwFlags parameter of MCI_WHERE command message
Const MCI_ANIM_WHERE_SOURCE = &H20000
Const MCI_ANIM_WHERE_DESTINATION = &H40000

'  flags for dwFlags parameter of MCI_UPDATE command message
Const MCI_ANIM_UPDATE_HDC = &H20000


'  flags for dwFlags parameter of MCI_OPEN command message
Const MCI_OVLY_OPEN_WS = &H10000
Const MCI_OVLY_OPEN_PARENT = &H20000

'  flags for dwFlags parameter of MCI_STATUS command message
Const MCI_OVLY_STATUS_HWND = &H4001&
Const MCI_OVLY_STATUS_STRETCH = &H4002&

'  flags for dwFlags parameter of MCI_INFO command message
Const MCI_OVLY_INFO_TEXT = &H10000

'  flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
Const MCI_OVLY_GETDEVCAPS_CAN_STRETCH = &H4001&
Const MCI_OVLY_GETDEVCAPS_CAN_FREEZE = &H4002&
Const MCI_OVLY_GETDEVCAPS_MAX_WINDOWS = &H4003&

'  flags for dwFlags parameter of MCI_WINDOW command message
Const MCI_OVLY_WINDOW_HWND = &H10000
Const MCI_OVLY_WINDOW_STATE = &H40000
Const MCI_OVLY_WINDOW_TEXT = &H80000
Const MCI_OVLY_WINDOW_ENABLE_STRETCH = &H100000
Const MCI_OVLY_WINDOW_DISABLE_STRETCH = &H200000

'  flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block
Const MCI_OVLY_WINDOW_DEFAULT = &H0&

'  flags for dwFlags parameter of MCI_PUT command message
Const MCI_OVLY_RECT = &H10000
Const MCI_OVLY_PUT_SOURCE = &H20000
Const MCI_OVLY_PUT_DESTINATION = &H40000
Const MCI_OVLY_PUT_FRAME = &H80000
Const MCI_OVLY_PUT_VIDEO = &H100000

'  flags for dwFlags parameter of MCI_WHERE command message
Const MCI_OVLY_WHERE_SOURCE = &H20000
Const MCI_OVLY_WHERE_DESTINATION = &H40000
Const MCI_OVLY_WHERE_FRAME = &H80000
Const MCI_OVLY_WHERE_VIDEO = &H100000

Const CAPS1 = 94              '  other caps
Const C1_TRANSPARENT = &H1     '  new raster cap
Const NEWTRANSPARENT = 3  '  use with SetBkMode()

Const QUERYROPSUPPORT = 40  '  use to determine ROP support

Const SELECTDIB = 41  '  DIB.DRV select dib escape

' ----------------
' shell association database management functions
' -----------------

'  error values for ShellExecute() beyond the regular WinExec() codes
Const SE_ERR_SHARE = 26
Const SE_ERR_ASSOCINCOMPLETE = 27
Const SE_ERR_DDETIMEOUT = 28
Const SE_ERR_DDEFAIL = 29
Const SE_ERR_DDEBUSY = 30
Const SE_ERR_NOASSOC = 31

' -------------
' Print APIs
' -------------

Const PRINTER_CONTROL_PAUSE = 1
Const PRINTER_CONTROL_RESUME = 2
Const PRINTER_CONTROL_PURGE = 3

Const PRINTER_STATUS_PAUSED = &H1
Const PRINTER_STATUS_ERROR = &H2
Const PRINTER_STATUS_PENDING_DELETION = &H4
Const PRINTER_STATUS_PAPER_JAM = &H8
Const PRINTER_STATUS_PAPER_OUT = &H10
Const PRINTER_STATUS_MANUAL_FEED = &H20
Const PRINTER_STATUS_PAPER_PROBLEM = &H40
Const PRINTER_STATUS_OFFLINE = &H80
Const PRINTER_STATUS_IO_ACTIVE = &H100
Const PRINTER_STATUS_BUSY = &H200
Const PRINTER_STATUS_PRINTING = &H400
Const PRINTER_STATUS_OUTPUT_BIN_FULL = &H800
Const PRINTER_STATUS_NOT_AVAILABLE = &H1000
Const PRINTER_STATUS_WAITING = &H2000
Const PRINTER_STATUS_PROCESSING = &H4000
Const PRINTER_STATUS_INITIALIZING = &H8000
Const PRINTER_STATUS_WARMING_UP = &H10000
Const PRINTER_STATUS_TONER_LOW = &H20000
Const PRINTER_STATUS_NO_TONER = &H40000
Const PRINTER_STATUS_PAGE_PUNT = &H80000
Const PRINTER_STATUS_USER_INTERVENTION = &H100000
Const PRINTER_STATUS_OUT_OF_MEMORY = &H200000
Const PRINTER_STATUS_DOOR_OPEN = &H400000

Const PRINTER_ATTRIBUTE_QUEUED = &H1
Const PRINTER_ATTRIBUTE_DIRECT = &H2
Const PRINTER_ATTRIBUTE_DEFAULT = &H4
Const PRINTER_ATTRIBUTE_SHARED = &H8
Const PRINTER_ATTRIBUTE_NETWORK = &H10
Const PRINTER_ATTRIBUTE_HIDDEN = &H20
Const PRINTER_ATTRIBUTE_LOCAL = &H40

Const NO_PRIORITY = 0
Const MAX_PRIORITY = 99
Const MIN_PRIORITY = 1
Const DEF_PRIORITY = 1


Const JOB_CONTROL_PAUSE = 1
Const JOB_CONTROL_RESUME = 2
Const JOB_CONTROL_CANCEL = 3
Const JOB_CONTROL_RESTART = 4

Const JOB_STATUS_PAUSED = &H1
Const JOB_STATUS_ERROR = &H2
Const JOB_STATUS_DELETING = &H4
Const JOB_STATUS_SPOOLING = &H8
Const JOB_STATUS_PRINTING = &H10
Const JOB_STATUS_OFFLINE = &H20
Const JOB_STATUS_PAPEROUT = &H40
Const JOB_STATUS_PRINTED = &H80

Const JOB_POSITION_UNSPECIFIED = 0


Const PRINTER_CONTROL_SET_STATUS = 4
Const PRINTER_ATTRIBUTE_WORK_OFFLINE = &H400
Const PRINTER_ATTRIBUTE_ENABLE_BIDI = &H800
Const JOB_CONTROL_DELETE = 5
Const JOB_STATUS_USER_INTERVENTION = &H10000


Const PORT_TYPE_WRITE = &H1
Const PORT_TYPE_READ = &H2
Const PORT_TYPE_REDIRECTED = &H4
Const PORT_TYPE_NET_ATTACHED = &H8

Const PRINTER_ENUM_DEFAULT = &H1
Const PRINTER_ENUM_LOCAL = &H2
Const PRINTER_ENUM_CONNECTIONS = &H4
Const PRINTER_ENUM_FAVORITE = &H4
Const PRINTER_ENUM_NAME = &H8
Const PRINTER_ENUM_REMOTE = &H10
Const PRINTER_ENUM_SHARED = &H20
Const PRINTER_ENUM_NETWORK = &H40

Const PRINTER_ENUM_EXPAND = &H4000
Const PRINTER_ENUM_CONTAINER = &H8000

Const PRINTER_ENUM_ICONMASK = &HFF0000
Const PRINTER_ENUM_ICON1 = &H10000
Const PRINTER_ENUM_ICON2 = &H20000
Const PRINTER_ENUM_ICON3 = &H40000
Const PRINTER_ENUM_ICON4 = &H80000
Const PRINTER_ENUM_ICON5 = &H100000
Const PRINTER_ENUM_ICON6 = &H200000
Const PRINTER_ENUM_ICON7 = &H400000
Const PRINTER_ENUM_ICON8 = &H800000


Const PRINTER_CHANGE_ADD_PRINTER = &H1
Const PRINTER_CHANGE_SET_PRINTER = &H2
Const PRINTER_CHANGE_DELETE_PRINTER = &H4
Const PRINTER_CHANGE_PRINTER = &HFF
Const PRINTER_CHANGE_ADD_JOB = &H100
Const PRINTER_CHANGE_SET_JOB = &H200
Const PRINTER_CHANGE_DELETE_JOB = &H400
Const PRINTER_CHANGE_WRITE_JOB = &H800
Const PRINTER_CHANGE_JOB = &HFF00
Const PRINTER_CHANGE_ADD_FORM = &H10000
Const PRINTER_CHANGE_SET_FORM = &H20000
Const PRINTER_CHANGE_DELETE_FORM = &H40000
Const PRINTER_CHANGE_FORM = &H70000
Const PRINTER_CHANGE_ADD_PORT = &H100000
Const PRINTER_CHANGE_CONFIGURE_PORT = &H200000
Const PRINTER_CHANGE_DELETE_PORT = &H400000
Const PRINTER_CHANGE_PORT = &H700000
Const PRINTER_CHANGE_ADD_PRINT_PROCESSOR = &H1000000
Const PRINTER_CHANGE_DELETE_PRINT_PROCESSOR = &H4000000
Const PRINTER_CHANGE_PRINT_PROCESSOR = &H7000000
Const PRINTER_CHANGE_ADD_PRINTER_DRIVER = &H10000000
Const PRINTER_CHANGE_DELETE_PRINTER_DRIVER = &H40000000
Const PRINTER_CHANGE_PRINTER_DRIVER = &H70000000
Const PRINTER_CHANGE_TIMEOUT = &H80000000
Const PRINTER_CHANGE_ALL = &H7777FFFF

Const PRINTER_ERROR_INFORMATION = &H80000000
Const PRINTER_ERROR_WARNING = &H40000000
Const PRINTER_ERROR_SEVERE = &H20000000

Const PRINTER_ERROR_OUTOFPAPER = &H1
Const PRINTER_ERROR_JAM = &H2
Const PRINTER_ERROR_OUTOFTONER = &H4

Const SERVER_ACCESS_ADMINISTER = &H1
Const SERVER_ACCESS_ENUMERATE = &H2

Const PRINTER_ACCESS_ADMINISTER = &H4
Const PRINTER_ACCESS_USE = &H8

Const JOB_ACCESS_ADMINISTER = &H10

' Access rights for print servers

Const SERVER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVER_ACCESS_ADMINISTER Or SERVER_ACCESS_ENUMERATE)
Const SERVER_READ = (STANDARD_RIGHTS_READ Or SERVER_ACCESS_ENUMERATE)
Const SERVER_WRITE = (STANDARD_RIGHTS_WRITE Or SERVER_ACCESS_ADMINISTER Or SERVER_ACCESS_ENUMERATE)
Const SERVER_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or SERVER_ACCESS_ENUMERATE)

' Access rights for printers
Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)
Const PRINTER_READ = (STANDARD_RIGHTS_READ Or PRINTER_ACCESS_USE)
Const PRINTER_WRITE = (STANDARD_RIGHTS_WRITE Or PRINTER_ACCESS_USE)
Const PRINTER_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or PRINTER_ACCESS_USE)

' Access rights for jobs
Const JOB_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or JOB_ACCESS_ADMINISTER)
Const JOB_READ = (STANDARD_RIGHTS_READ Or JOB_ACCESS_ADMINISTER)
Const JOB_WRITE = (STANDARD_RIGHTS_WRITE Or JOB_ACCESS_ADMINISTER)
Const JOB_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or JOB_ACCESS_ADMINISTER)

'  Windows Network support

'  RESOURCE ENUMERATION

Const RESOURCE_CONNECTED = &H1
Const RESOURCE_PUBLICNET = &H2
Const RESOURCE_REMEMBERED = &H3

Const RESOURCETYPE_ANY = &H0
Const RESOURCETYPE_DISK = &H1
Const RESOURCETYPE_PRINT = &H2
Const RESOURCETYPE_UNKNOWN = &HFFFF

Const RESOURCEUSAGE_CONNECTABLE = &H1
Const RESOURCEUSAGE_CONTAINER = &H2
Const RESOURCEUSAGE_RESERVED = &H80000000

Const RESOURCEDISPLAYTYPE_GENERIC = &H0
Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
Const RESOURCEDISPLAYTYPE_SERVER = &H2
Const RESOURCEDISPLAYTYPE_SHARE = &H3
Const RESOURCEDISPLAYTYPE_FILE = &H4
Const RESOURCEDISPLAYTYPE_GROUP = &H5


Const CONNECT_UPDATE_PROFILE = &H1

Declare Function WNetCancelConnection2 Lib "Coredll" Alias "WNetCancelConnection2W" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
Declare Function WNetGetConnection Lib "Coredll" Alias "WNetGetConnectionW" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
Declare Function WNetOpenEnum Lib "Coredll" Alias "WNetOpenEnumW" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long
Declare Function WNetCloseEnum Lib "Coredll" Alias "WNetCloseEnum" (ByVal hEnum As Long) As Long
Declare Function WNetGetUser Lib "Coredll" Alias "WNetGetUserW" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
Declare Function WNetConnectionDialog Lib "Coredll" Alias "WNetConnectionDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long
Declare Function WNetDisconnectDialog Lib "Coredll" Alias "WNetDisconnectDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long

' Status Codes

' This section is provided for backward compatibility.  Use of the ERROR_
' codes is preferred.  The WN_ error codes may not be available in future
' releases.

' General

Const WN_SUCCESS = NO_ERROR
Const WN_NOT_SUPPORTED = ERROR_NOT_SUPPORTED
Const WN_NET_ERROR = ERROR_UNEXP_NET_ERR
Const WN_MORE_DATA = ERROR_MORE_DATA
Const WN_BAD_POINTER = ERROR_INVALID_ADDRESS
Const WN_BAD_VALUE = ERROR_INVALID_PARAMETER
Const WN_BAD_PASSWORD = ERROR_INVALID_PASSWORD
Const WN_ACCESS_DENIED = ERROR_ACCESS_DENIED
Const WN_FUNCTION_BUSY = ERROR_BUSY
Const WN_WINDOWS_ERROR = ERROR_UNEXP_NET_ERR
Const WN_BAD_USER = ERROR_BAD_USERNAME
Const WN_OUT_OF_MEMORY = ERROR_NOT_ENOUGH_MEMORY
Const WN_NO_NETWORK = ERROR_NO_NETWORK
Const WN_EXTENDED_ERROR = ERROR_EXTENDED_ERROR

' Connection

Const WN_NOT_CONNECTED = ERROR_NOT_CONNECTED
Const WN_OPEN_FILES = ERROR_OPEN_FILES
Const WN_DEVICE_IN_USE = ERROR_DEVICE_IN_USE
Const WN_BAD_NETNAME = ERROR_BAD_NET_NAME
Const WN_BAD_LOCALNAME = ERROR_BAD_DEVICE
Const WN_ALREADY_CONNECTED = ERROR_ALREADY_ASSIGNED
Const WN_DEVICE_ERROR = ERROR_GEN_FAILURE
Const WN_CONNECTION_CLOSED = ERROR_CONNECTION_UNAVAIL
Const WN_NO_NET_OR_BAD_PATH = ERROR_NO_NET_OR_BAD_PATH
Const WN_BAD_PROVIDER = ERROR_BAD_PROVIDER
Const WN_CANNOT_OPEN_PROFILE = ERROR_CANNOT_OPEN_PROFILE
Const WN_BAD_PROFILE = ERROR_BAD_PROFILE

' Enumeration

Const WN_BAD_HANDLE = ERROR_INVALID_HANDLE
Const WN_NO_MORE_ENTRIES = ERROR_NO_MORE_ITEMS
Const WN_NOT_CONTAINER = ERROR_NOT_CONTAINER

Const WN_NO_ERROR = NO_ERROR

' This section contains the definitions
' for portable NetBIOS 3.0 support.

Const NCBNAMSZ = 16  '  absolute length of a net name
Const MAX_LANA = 254  '  lana's in range 0 to MAX_LANA


' values for name_flags bits.

Const NAME_FLAGS_MASK = &H87

Const GROUP_NAME = &H80
Const UNIQUE_NAME = &H0

Const REGISTERING = &H0
Const REGISTERED = &H4
Const DEREGISTERED = &H5
Const DUPLICATE = &H6
Const DUPLICATE_DEREG = &H7

' Values for state
Const LISTEN_OUTSTANDING = &H1
Const CALL_PENDING = &H2
Const SESSION_ESTABLISHED = &H3
Const HANGUP_PENDING = &H4
Const HANGUP_COMPLETE = &H5
Const SESSION_ABORTED = &H6

' Values for transport_id
Const ALL_TRANSPORTS = "M\0\0\0"
Const MS_NBF = "MNBF"

' NCB Command codes
Const NCBCALL = &H10  '  NCB CALL
Const NCBLISTEN = &H11  '  NCB LISTEN
Const NCBHANGUP = &H12  '  NCB HANG UP
Const NCBSEND = &H14  '  NCB SEND
Const NCBRECV = &H15  '  NCB RECEIVE
Const NCBRECVANY = &H16  '  NCB RECEIVE ANY
Const NCBCHAINSEND = &H17  '  NCB CHAIN SEND
Const NCBDGSEND = &H20  '  NCB SEND DATAGRAM
Const NCBDGRECV = &H21  '  NCB RECEIVE DATAGRAM
Const NCBDGSENDBC = &H22  '  NCB SEND BROADCAST DATAGRAM
Const NCBDGRECVBC = &H23  '  NCB RECEIVE BROADCAST DATAGRAM
Const NCBADDNAME = &H30  '  NCB ADD NAME
Const NCBDELNAME = &H31  '  NCB DELETE NAME
Const NCBRESET = &H32  '  NCB RESET
Const NCBASTAT = &H33  '  NCB ADAPTER STATUS
Const NCBSSTAT = &H34  '  NCB SESSION STATUS
Const NCBCANCEL = &H35  '  NCB CANCEL
Const NCBADDGRNAME = &H36  '  NCB ADD GROUP NAME
Const NCBENUM = &H37  '  NCB ENUMERATE LANA NUMBERS
Const NCBUNLINK = &H70  '  NCB UNLINK
Const NCBSENDNA = &H71  '  NCB SEND NO ACK
Const NCBCHAINSENDNA = &H72  '  NCB CHAIN SEND NO ACK
Const NCBLANSTALERT = &H73  '  NCB LAN STATUS ALERT
Const NCBACTION = &H77  '  NCB ACTION
Const NCBFINDNAME = &H78  '  NCB FIND NAME
Const NCBTRACE = &H79  '  NCB TRACE

Const ASYNCH = &H80  '  high bit set == asynchronous

' NCB Return codes
Const NRC_GOODRET = &H0   '  good return
                                '  also returned when ASYNCH request accepted
Const NRC_BUFLEN = &H1   '  illegal buffer length
Const NRC_ILLCMD = &H3   '  illegal command
Const NRC_CMDTMO = &H5   '  command timed out
Const NRC_INCOMP = &H6   '  message incomplete, issue another command
Const NRC_BADDR = &H7   '  illegal buffer address
Const NRC_SNUMOUT = &H8   '  session number out of range
Const NRC_NORES = &H9   '  no resource available
Const NRC_SCLOSED = &HA   '  session closed
Const NRC_CMDCAN = &HB   '  command cancelled
Const NRC_DUPNAME = &HD   '  duplicate name
Const NRC_NAMTFUL = &HE   '  name table full
Const NRC_ACTSES = &HF   '  no deletions, name has active sessions
Const NRC_LOCTFUL = &H11  '  local session table full
Const NRC_REMTFUL = &H12  '  remote session table full
Const NRC_ILLNN = &H13  '  illegal name number
Const NRC_NOCALL = &H14  '  no callname
Const NRC_NOWILD = &H15  '  cannot put  in NCB_NAME
Const NRC_INUSE = &H16  '  name in use on remote adapter
Const NRC_NAMERR = &H17  '  name deleted
Const NRC_SABORT = &H18  '  session ended abnormally
Const NRC_NAMCONF = &H19  '  name conflict detected
Const NRC_IFBUSY = &H21  '  interface busy, IRET before retrying
Const NRC_TOOMANY = &H22  '  too many commands outstanding, retry later
Const NRC_BRIDGE = &H23  '  ncb_lana_num field invalid
Const NRC_CANOCCR = &H24  '  command completed while cancel occurring
Const NRC_CANCEL = &H26  '  command not valid to cancel
Const NRC_DUPENV = &H30  '  name defined by anther local process
Const NRC_ENVNOTDEF = &H34  '  environment undefined. RESET required
Const NRC_OSRESNOTAV = &H35  '  required OS resources exhausted
Const NRC_MAXAPPS = &H36  '  max number of applications exceeded
Const NRC_NOSAPS = &H37  '  no saps available for netbios
Const NRC_NORESOURCES = &H38  '  requested resources are not available
Const NRC_INVADDRESS = &H39  '  invalid ncb address or length > segment
Const NRC_INVDDID = &H3B  '  invalid NCB DDID
Const NRC_LOCKFAIL = &H3C  '  lock of user area failed
Const NRC_OPENERR = &H3F  '  NETBIOS not loaded
Const NRC_SYSTEM = &H40  '  system error

Const NRC_PENDING = &HFF  '  asynchronous command is not yet finished

Declare Function WNetOpenEnum Lib "Coredll" Alias "WNetOpenEnumW" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Long, lphEnum As Long) As Long

Const FILTER_TEMP_DUPLICATE_ACCOUNT As Long = &H1&
Const FILTER_NORMAL_ACCOUNT As Long = &H2&
Const FILTER_PROXY_ACCOUNT As Long = &H4&
Const FILTER_INTERDOMAIN_TRUST_ACCOUNT As Long = &H8&
Const FILTER_WORKSTATION_TRUST_ACCOUNT As Long = &H10&
Const FILTER_SERVER_TRUST_ACCOUNT As Long = &H20&

Const TIMEQ_FOREVER = -1&             '((unsigned long) -1L)
Const USER_MAXSTORAGE_UNLIMITED = -1& '((unsigned long) -1L)
Const USER_NO_LOGOFF = -1&            '((unsigned long) -1L)
Const UNITS_PER_DAY = 24
Const UNITS_PER_WEEK = UNITS_PER_DAY * 7

Const USER_PRIV_MASK = 3
Const USER_PRIV_GUEST = 0
Const USER_PRIV_USER = 1
Const USER_PRIV_ADMIN = 2

Const UNLEN = 256         ' Maximum username length
Const GNLEN = UNLEN       ' Maximum groupname length
Const CNLEN = 15          ' Maximum computer name length
Const PWLEN = 256         ' Maximum password length
Const LM20_PWLEN = 14     ' LM 2.0 Maximum password length
Const MAXCOMMENTSZ = 256  ' Multipurpose comment length
Const LG_INCLUDE_INDIRECT As Long = &H1&

Const UF_SCRIPT = &H1
Const UF_ACCOUNTDISABLE = &H2
Const UF_HOMEDIR_REQUIRED = &H8
Const UF_LOCKOUT = &H10
Const UF_PASSWD_NOTREQD = &H20
Const UF_PASSWD_CANT_CHANGE = &H40

Const LG_INCLUDE_INDIRECT As Long = &H1&

Const NERR_Success As Long = 0&
Const NERR_BASE = 2100
Const NERR_InvalidComputer = (NERR_BASE + 251)
Const NERR_NotPrimary = (NERR_BASE + 126)
Const NERR_GroupExists = (NERR_BASE + 123)
Const NERR_UserExists = (NERR_BASE + 124)
Const NERR_PasswordTooShort = (NERR_BASE + 145)

Const RESOURCE_CONNECTED As Long = &H1&
Const RESOURCE_GLOBALNET As Long = &H2&
Const RESOURCE_REMEMBERED As Long = &H3&
Const RESOURCE_ENUM_ALL As Long = &HFFFF
Const RESOURCEDISPLAYTYPE_DOMAIN As Long = &H1&
Const RESOURCEDISPLAYTYPE_FILE As Long = &H4&
Const RESOURCEDISPLAYTYPE_GENERIC As Long = &H0&
Const RESOURCEDISPLAYTYPE_GROUP As Long = &H5&
Const RESOURCEDISPLAYTYPE_SERVER As Long = &H2&
Const RESOURCEDISPLAYTYPE_SHARE As Long = &H3&
Const RESOURCETYPE_ANY As Long = &H0&
Const RESOURCETYPE_DISK As Long = &H1&
Const RESOURCETYPE_PRINT As Long = &H2&
Const RESOURCETYPE_UNKNOWN As Long = &HFFFF&
Const RESOURCEUSAGE_ALL As Long = &H0&
Const RESOURCEUSAGE_CONNECTABLE As Long = &H1&
Const RESOURCEUSAGE_CONTAINER As Long = &H2&
Const RESOURCEUSAGE_RESERVED As Long = &H80000000

' Legal values for expression in except().
Const EXCEPTION_EXECUTE_HANDLER = 1
Const EXCEPTION_CONTINUE_SEARCH = 0
Const EXCEPTION_CONTINUE_EXECUTION = -1

' UI dialog constants and types

' ----Constants--------------------------------------------------------------
Const ctlFirst = &H400
Const ctlLast = &H4FF
    '  Push buttons
Const psh1 = &H400
Const psh2 = &H401
Const psh3 = &H402
Const psh4 = &H403
Const psh5 = &H404
Const psh6 = &H405
Const psh7 = &H406
Const psh8 = &H407
Const psh9 = &H408
Const psh10 = &H409
Const psh11 = &H40A
Const psh12 = &H40B
Const psh13 = &H40C
Const psh14 = &H40D
Const psh15 = &H40E
Const pshHelp = psh15
Const psh16 = &H40F
    '  Checkboxes
Const chx1 = &H410
Const chx2 = &H411
Const chx3 = &H412
Const chx4 = &H413
Const chx5 = &H414
Const chx6 = &H415
Const chx7 = &H416
Const chx8 = &H417
Const chx9 = &H418
Const chx10 = &H419
Const chx11 = &H41A
Const chx12 = &H41B
Const chx13 = &H41C
Const chx14 = &H41D
Const chx15 = &H41E
Const chx16 = &H41D
    '  Radio buttons
Const rad1 = &H420
Const rad2 = &H421
Const rad3 = &H422
Const rad4 = &H423
Const rad5 = &H424
Const rad6 = &H425
Const rad7 = &H426
Const rad8 = &H427
Const rad9 = &H428
Const rad10 = &H429
Const rad11 = &H42A
Const rad12 = &H42B
Const rad13 = &H42C
Const rad14 = &H42D
Const rad15 = &H42E
Const rad16 = &H42F
    '  Groups, frames, rectangles, and icons
Const grp1 = &H430
Const grp2 = &H431
Const grp3 = &H432
Const grp4 = &H433
Const frm1 = &H434
Const frm2 = &H435
Const frm3 = &H436
Const frm4 = &H437
Const rct1 = &H438
Const rct2 = &H439
Const rct3 = &H43A
Const rct4 = &H43B
Const ico1 = &H43C
Const ico2 = &H43D
Const ico3 = &H43E
Const ico4 = &H43F
    '  Static text
Const stc1 = &H440
Const stc2 = &H441
Const stc3 = &H442
Const stc4 = &H443
Const stc5 = &H444
Const stc6 = &H445
Const stc7 = &H446
Const stc8 = &H447
Const stc9 = &H448
Const stc10 = &H449
Const stc11 = &H44A
Const stc12 = &H44B
Const stc13 = &H44C
Const stc14 = &H44D
Const stc15 = &H44E
Const stc16 = &H44F
Const stc17 = &H450
Const stc18 = &H451
Const stc19 = &H452
Const stc20 = &H453
Const stc21 = &H454
Const stc22 = &H455
Const stc23 = &H456
Const stc24 = &H457
Const stc25 = &H458
Const stc26 = &H459
Const stc27 = &H45A
Const stc28 = &H45B
Const stc29 = &H45C
Const stc30 = &H45D
Const stc31 = &H45E
Const stc32 = &H45F
    '  Listboxes
Const lst1 = &H460
Const lst2 = &H461
Const lst3 = &H462
Const lst4 = &H463
Const lst5 = &H464
Const lst6 = &H465
Const lst7 = &H466
Const lst8 = &H467
Const lst9 = &H468
Const lst10 = &H469
Const lst11 = &H46A
Const lst12 = &H46B
Const lst13 = &H46C
Const lst14 = &H46D
Const lst15 = &H46E
Const lst16 = &H46F
    '  Combo boxes
Const cmb1 = &H470
Const cmb2 = &H471
Const cmb3 = &H472
Const cmb4 = &H473
Const cmb5 = &H474
Const cmb6 = &H475
Const cmb7 = &H476
Const cmb8 = &H477
Const cmb9 = &H478
Const cmb10 = &H479
Const cmb11 = &H47A
Const cmb12 = &H47B
Const cmb13 = &H47C
Const cmb14 = &H47D
Const cmb15 = &H47E
Const cmb16 = &H47F
    '  Edit controls
Const edt1 = &H480
Const edt2 = &H481
Const edt3 = &H482
Const edt4 = &H483
Const edt5 = &H484
Const edt6 = &H485
Const edt7 = &H486
Const edt8 = &H487
Const edt9 = &H488
Const edt10 = &H489
Const edt11 = &H48A
Const edt12 = &H48B
Const edt13 = &H48C
Const edt14 = &H48D
Const edt15 = &H48E
Const edt16 = &H48F
    '  Scroll bars
Const scr1 = &H490
Const scr2 = &H491
Const scr3 = &H492
Const scr4 = &H493
Const scr5 = &H494
Const scr6 = &H495
Const scr7 = &H496
Const scr8 = &H497

Const FILEOPENORD = 1536
Const MULTIFILEOPENORD = 1537
Const PRINTDLGORD = 1538
Const PRNSETUPDLGORD = 1539
Const FINDDLGORD = 1540
Const REPLACEDLGORD = 1541
Const FONTDLGORD = 1542
Const FORMATDLGORD31 = 1543
Const FORMATDLGORD30 = 1544


' -----------------
' ADVAPI32
' -----------------

' function prototypes, constants, and type definitions
' for Windows 32-bit Registry API

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_PERFORMANCE_DATA = &H80000004
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006

' Registry API prototypes

Declare Function RegCloseKey Lib "Coredll" Alias "RegCloseKey" (ByVal hKey As Long) As Long
Declare Function RegCreateKeyEx Lib "Coredll" Alias "RegCreateKeyExW" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Declare Function RegDeleteKey Lib "Coredll" Alias "RegDeleteKeyW" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "Coredll.dll" Alias "RegDeleteValueW" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Declare Function RegEnumKeyEx Lib "Coredll" Alias "RegEnumKeyExW" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Long) As Long
Declare Function RegEnumValue Lib "Coredll" Alias "RegEnumValueW" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Declare Function RegOpenKeyEx Lib "Coredll" Alias "RegOpenKeyExW" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryInfoKey Lib "Coredll" Alias "RegQueryInfoKeyW" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As Long) As Long
Declare Function RegQueryValueEx Lib "Coredll" Alias "RegQueryValueExW" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value. 
Declare Function RegSetValueEx Lib "Coredll" Alias "RegSetValueExW" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.

' Service database names
Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
Const SERVICES_FAILED_DATABASE = "ServicesFailed"

' Value to indicate no change to an optional parameter
Const SERVICE_NO_CHANGE = &HFFFF

' Service State -- for Enum Requests (Bit Mask)
Const SERVICE_ACTIVE = &H1
Const SERVICE_INACTIVE = &H2
Const SERVICE_STATE_ALL = (SERVICE_ACTIVE Or SERVICE_INACTIVE)

' Controls
Const SERVICE_CONTROL_STOP = &H1
Const SERVICE_CONTROL_PAUSE = &H2
Const SERVICE_CONTROL_CONTINUE = &H3
Const SERVICE_CONTROL_INTERROGATE = &H4
Const SERVICE_CONTROL_SHUTDOWN = &H5

' Service State -- for CurrentState
Const SERVICE_STOPPED = &H1
Const SERVICE_START_PENDING = &H2
Const SERVICE_STOP_PENDING = &H3
Const SERVICE_RUNNING = &H4
Const SERVICE_CONTINUE_PENDING = &H5
Const SERVICE_PAUSE_PENDING = &H6
Const SERVICE_PAUSED = &H7

' Controls Accepted  (Bit Mask)
Const SERVICE_ACCEPT_STOP = &H1
Const SERVICE_ACCEPT_PAUSE_CONTINUE = &H2
Const SERVICE_ACCEPT_SHUTDOWN = &H4

' Service Control Manager object specific access types
Const SC_MANAGER_CONNECT = &H1
Const SC_MANAGER_CREATE_SERVICE = &H2
Const SC_MANAGER_ENUMERATE_SERVICE = &H4
Const SC_MANAGER_LOCK = &H8
Const SC_MANAGER_QUERY_LOCK_STATUS = &H10
Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20

Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)

' Service object specific access type
Const SERVICE_QUERY_CONFIG = &H1
Const SERVICE_CHANGE_CONFIG = &H2
Const SERVICE_QUERY_STATUS = &H4
Const SERVICE_ENUMERATE_DEPENDENTS = &H8
Const SERVICE_START = &H10
Const SERVICE_STOP = &H20
Const SERVICE_PAUSE_CONTINUE = &H40
Const SERVICE_INTERROGATE = &H80
Const SERVICE_USER_DEFINED_CONTROL = &H100

Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL)

'
'  Constants

'  Character to designate that a name is a group
'
Const SC_GROUP_IDENTIFIER = "+"

'  Prototype for the Service Control Handler Function

    

' Section for Performance Monitor data

Const PERF_DATA_VERSION = 1
Const PERF_DATA_REVISION = 1


Const PERF_NO_INSTANCES = -1  '  no instances

' The counter type is the "or" of the following values as described below
'
' select one of the following to indicate the counter's data size
Const PERF_SIZE_DWORD = &H0
Const PERF_SIZE_LARGE = &H100
Const PERF_SIZE_ZERO = &H200       '  for Zero Length fields
Const PERF_SIZE_VARIABLE_LEN = &H300       '  length is in CounterLength field of Counter Definition struct

' select one of the following values to indicate the counter field usage
Const PERF_TYPE_NUMBER = &H0         '  a number (not a counter)
Const PERF_TYPE_COUNTER = &H400       '  an increasing numeric value
Const PERF_TYPE_TEXT = &H800       '  a text field
Const PERF_TYPE_ZERO = &HC00       '  displays a zero

' If the PERF_TYPE_NUMBER field was selected, then select one of the
' following to describe the Number
Const PERF_NUMBER_HEX = &H0         '  display as HEX value
Const PERF_NUMBER_DECIMAL = &H10000     '  display as a decimal integer
Const PERF_NUMBER_DEC_1000 = &H20000     '  display as a decimal/1000
'
' If the PERF_TYPE_COUNTER value was selected then select one of the
' following to indicate the type of counter
Const PERF_COUNTER_VALUE = &H0         '  display counter value
Const PERF_COUNTER_RATE = &H10000     '  divide ctr / delta time
Const PERF_COUNTER_FRACTION = &H20000     '  divide ctr / base
Const PERF_COUNTER_BASE = &H30000     '  base value used in fractions
Const PERF_COUNTER_ELAPSED = &H40000     '  subtract counter from current time
Const PERF_COUNTER_QUEUELEN = &H50000     '  Use Queuelen processing func.
Const PERF_COUNTER_HISTOGRAM = &H60000     '  Counter begins or ends a histogram

' If the PERF_TYPE_TEXT value was selected, then select one of the
' following to indicate the type of TEXT data.
Const PERF_TEXT_UNICODE = &H0         '  type of text in text field
Const PERF_TEXT_ASCII = &H10000     '  ASCII using the CodePage field

' Timer SubTypes
Const PERF_TIMER_TICK = &H0         '  use system perf. freq for base
Const PERF_TIMER_100NS = &H100000    '  use 100 NS timer time base units
Const PERF_OBJECT_TIMER = &H200000    '  use the object timer freq

' Any types that have calculations performed can use one or more of
' the following calculation modification flags listed here
Const PERF_DELTA_COUNTER = &H400000    '  compute difference first
Const PERF_DELTA_BASE = &H800000    '  compute base diff as well
Const PERF_INVERSE_COUNTER = &H1000000   '  show as 1.00-value (assumes:
Const PERF_MULTI_COUNTER = &H2000000   '  sum of multiple instances

' Select one of the following values to indicate the display suffix (if any)
Const PERF_DISPLAY_NO_SUFFIX = &H0         '  no suffix
Const PERF_DISPLAY_PER_SEC = &H10000000  '  "/sec"
Const PERF_DISPLAY_PERCENT = &H20000000  '  "%"
Const PERF_DISPLAY_SECONDS = &H30000000  '  "secs"
Const PERF_DISPLAY_NOSHOW = &H40000000  '  value is not displayed

' Predefined counter types

' 32-bit Counter.  Divide delta by delta time.  Display suffix: "/sec"
Const PERF_COUNTER_COUNTER = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PER_SEC)

' 64-bit Timer.  Divide delta by delta time.  Display suffix: "%"
Const PERF_COUNTER_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PERCENT)

' Queue Length Space-Time Product. Divide delta by delta time. No Display Suffix.
Const PERF_COUNTER_QUEUELEN_TYPE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_QUEUELEN Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_NO_SUFFIX)

' 64-bit Counter.  Divide delta by delta time. Display Suffix: "/sec"
Const PERF_COUNTER_BULK_COUNT = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PER_SEC)

' Indicates the counter is not a  counter but rather Unicode text Display as text.
Const PERF_COUNTER_TEXT = (PERF_SIZE_VARIABLE_LEN Or PERF_TYPE_TEXT Or PERF_TEXT_UNICODE Or PERF_DISPLAY_NO_SUFFIX)

' Indicates the data is a counter  which should not be
' time averaged on display (such as an error counter on a serial line)
' Display as is.  No Display Suffix.
Const PERF_COUNTER_RAWCOUNT = (PERF_SIZE_DWORD Or PERF_TYPE_NUMBER Or PERF_NUMBER_DECIMAL Or PERF_DISPLAY_NO_SUFFIX)

' A count which is either 1 or 0 on each sampling interrupt (% busy)
' Divide delta by delta base. Display Suffix: "%"
Const PERF_SAMPLE_FRACTION = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DELTA_COUNTER Or PERF_DELTA_BASE Or PERF_DISPLAY_PERCENT)

' A count which is sampled on each sampling interrupt (queue length)
' Divide delta by delta time. No Display Suffix.
Const PERF_SAMPLE_COUNTER = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_DISPLAY_NO_SUFFIX)

' A label: no data is associated with this counter (it has 0 length)
' Do not display.
Const PERF_COUNTER_NODATA = (PERF_SIZE_ZERO Or PERF_DISPLAY_NOSHOW)

' 64-bit Timer inverse (e.g., idle is measured, but display busy  As Integer)
' Display 100 - delta divided by delta time.  Display suffix: "%"
Const PERF_COUNTER_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_TICK Or PERF_DELTA_COUNTER Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' The divisor for a sample, used with the previous counter to form a
' sampled %.  You must check for >0 before dividing by this!  This
' counter will directly follow the  numerator counter.  It should not
' be displayed to the user.
Const PERF_SAMPLE_BASE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_DISPLAY_NOSHOW Or &H1)         '  for compatibility with pre-beta versions

' A timer which, when divided by an average base, produces a time
' in seconds which is the average time of some operation.  This
' timer times total operations, and  the base is the number of opera-
' tions.  Display Suffix: "sec"
Const PERF_AVERAGE_TIMER = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DISPLAY_SECONDS)

' Used as the denominator in the computation of time or count
' averages.  Must directly follow the numerator counter.  Not dis-
' played to the user.
Const PERF_AVERAGE_BASE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_DISPLAY_NOSHOW Or &H2)         '  for compatibility with pre-beta versions

' A bulk count which, when divided (typically) by the number of
' operations, gives (typically) the number of bytes per operation.
' No Display Suffix.
Const PERF_AVERAGE_BULK = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DISPLAY_NOSHOW)

' 64-bit Timer in 100 nsec units. Display delta divided by
' delta time.  Display suffix: "%"
Const PERF_100NSEC_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_DELTA_COUNTER Or PERF_DISPLAY_PERCENT)

' 64-bit Timer inverse (e.g., idle is measured, but display busy  As Integer)
' Display 100 - delta divided by delta time.  Display suffix: "%"
Const PERF_100NSEC_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_DELTA_COUNTER Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' 64-bit Timer.  Divide delta by delta time.  Display suffix: "%"
' Timer for multiple instances, so result can exceed 100%.
Const PERF_COUNTER_MULTI_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_DELTA_COUNTER Or PERF_TIMER_TICK Or PERF_MULTI_COUNTER Or PERF_DISPLAY_PERCENT)

' 64-bit Timer inverse (e.g., idle is measured, but display busy  As Integer)
' Display 100  _MULTI_BASE - delta divided by delta time.
' Display suffix: "%" Timer for multiple instances, so result
' can exceed 100%.  Followed by a counter of type _MULTI_BASE.
Const PERF_COUNTER_MULTI_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_RATE Or PERF_DELTA_COUNTER Or PERF_MULTI_COUNTER Or PERF_TIMER_TICK Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' Number of instances to which the preceding _MULTI_..._INV counter
' applies.  Used as a factor to get the percentage.
Const PERF_COUNTER_MULTI_BASE = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_MULTI_COUNTER Or PERF_DISPLAY_NOSHOW)

' 64-bit Timer in 100 nsec units. Display delta divided by delta time.
' Display suffix: "%" Timer for multiple instances, so result can exceed 100%.
Const PERF_100NSEC_MULTI_TIMER = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_DELTA_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_MULTI_COUNTER Or PERF_DISPLAY_PERCENT)

' 64-bit Timer inverse (e.g., idle is measured, but display busy  As Integer)
' Display 100  _MULTI_BASE - delta divided by delta time.
' Display suffix: "%" Timer for multiple instances, so result
' can exceed 100%.  Followed by a counter of type _MULTI_BASE.
Const PERF_100NSEC_MULTI_TIMER_INV = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_DELTA_COUNTER Or PERF_COUNTER_RATE Or PERF_TIMER_100NS Or PERF_MULTI_COUNTER Or PERF_INVERSE_COUNTER Or PERF_DISPLAY_PERCENT)

' Indicates the data is a fraction of the following counter  which
' should not be time averaged on display (such as free space over
' total space.) Display as is.  Display the quotient as "%".
Const PERF_RAW_FRACTION = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_FRACTION Or PERF_DISPLAY_PERCENT)

' Indicates the data is a base for the preceding counter which should
' not be time averaged on display (such as free space over total space.)
Const PERF_RAW_BASE = (PERF_SIZE_DWORD Or PERF_TYPE_COUNTER Or PERF_COUNTER_BASE Or PERF_DISPLAY_NOSHOW Or &H3)         '  for compatibility with pre-beta versions

' The data collected in this counter is actually the start time of the
' item being measured. For display, this data is subtracted from the
' sample time to yield the elapsed time as the difference between the two.
' In the definition below, the PerfTime field of the Object contains
' the sample time as indicated by the PERF_OBJECT_TIMER bit and the
' difference is scaled by the PerfFreq of the Object to convert the time
' units into seconds.
Const PERF_ELAPSED_TIME = (PERF_SIZE_LARGE Or PERF_TYPE_COUNTER Or PERF_COUNTER_ELAPSED Or PERF_OBJECT_TIMER Or PERF_DISPLAY_SECONDS)

' The following counter type can be used with the preceding types to
' define a range of values to be displayed in a histogram.
Const PERF_COUNTER_HISTOGRAM_TYPE = &H80000000  ' Counter begins or ends a histogram

' The following are used to determine the level of detail associated
' with the counter.  The user will be setting the level of detail
' that should be displayed at any given time.
Const PERF_DETAIL_NOVICE = 100 '  The uninformed can understand it
Const PERF_DETAIL_ADVANCED = 200 '  For the advanced user
Const PERF_DETAIL_EXPERT = 300 '  For the expert user
Const PERF_DETAIL_WIZARD = 400 '  For the system designer


Const PERF_NO_UNIQUE_ID = -1

Const CDERR_DIALOGFAILURE = &HFFFF

Const CDERR_GENERALCODES = &H0
Const CDERR_STRUCTSIZE = &H1
Const CDERR_INITIALIZATION = &H2
Const CDERR_NOTEMPLATE = &H3
Const CDERR_NOHINSTANCE = &H4
Const CDERR_LOADSTRFAILURE = &H5
Const CDERR_FINDRESFAILURE = &H6
Const CDERR_LOADRESFAILURE = &H7
Const CDERR_LOCKRESFAILURE = &H8
Const CDERR_MEMALLOCFAILURE = &H9
Const CDERR_MEMLOCKFAILURE = &HA
Const CDERR_NOHOOK = &HB
Const CDERR_REGISTERMSGFAIL = &HC

Const PDERR_PRINTERCODES = &H1000
Const PDERR_SETUPFAILURE = &H1001
Const PDERR_PARSEFAILURE = &H1002
Const PDERR_RETDEFFAILURE = &H1003
Const PDERR_LOADDRVFAILURE = &H1004
Const PDERR_GETDEVMODEFAIL = &H1005
Const PDERR_INITFAILURE = &H1006
Const PDERR_NODEVICES = &H1007
Const PDERR_NODEFAULTPRN = &H1008
Const PDERR_DNDMMISMATCH = &H1009
Const PDERR_CREATEICFAILURE = &H100A
Const PDERR_PRINTERNOTFOUND = &H100B
Const PDERR_DEFAULTDIFFERENT = &H100C

Const CFERR_CHOOSEFONTCODES = &H2000
Const CFERR_NOFONTS = &H2001
Const CFERR_MAXLESSTHANMIN = &H2002

Const FNERR_FILENAMECODES = &H3000
Const FNERR_SUBCLASSFAILURE = &H3001
Const FNERR_INVALIDFILENAME = &H3002
Const FNERR_BUFFERTOOSMALL = &H3003

Const FRERR_FINDREPLACECODES = &H4000
Const FRERR_BUFFERLENGTHZERO = &H4001

Const CCERR_CHOOSECOLORCODES = &H5000


' Public interface to LZEXP?.LIB

'  LZEXPAND error return codes
Const LZERROR_BADINHANDLE = (-1)  '  invalid input handle
Const LZERROR_BADOUTHANDLE = (-2) '  invalid output handle
Const LZERROR_READ = (-3)         '  corrupt compressed file format
Const LZERROR_WRITE = (-4)        '  out of space for output file
Const LZERROR_PUBLICLOC = (-5)    '  insufficient memory for LZFile struct
Const LZERROR_GLOBLOCK = (-6)     '  bad Global handle
Const LZERROR_BADVALUE = (-7)     '  input parameter out of range
Const LZERROR_UNKNOWNALG = (-8)   '  compression algorithm not recognized

' ********************************************************************

Const VK_PROCESSKEY = &HE5


Const STYLE_DESCRIPTION_SIZE = 32


'  prototype of IMM API

'  the IME related messages
Const WM_CONVERTREQUESTEX = &H108
Const WM_IME_STARTCOMPOSITION = &H10D
Const WM_IME_ENDCOMPOSITION = &H10E
Const WM_IME_COMPOSITION = &H10F
Const WM_IME_KEYLAST = &H10F

Const WM_IME_SETCONTEXT = &H281
Const WM_IME_NOTIFY = &H282
Const WM_IME_CONTROL = &H283
Const WM_IME_COMPOSITIONFULL = &H284
Const WM_IME_SELECT = &H285
Const WM_IME_CHAR = &H286

Const WM_IME_KEYDOWN = &H290
Const WM_IME_KEYUP = &H291

'  wParam for WM_IME_CONTROL
Const IMC_GETCANDIDATEPOS = &H7
Const IMC_SETCANDIDATEPOS = &H8
Const IMC_GETCOMPOSITIONFONT = &H9
Const IMC_SETCOMPOSITIONFONT = &HA
Const IMC_GETCOMPOSITIONWINDOW = &HB
Const IMC_SETCOMPOSITIONWINDOW = &HC
Const IMC_GETSTATUSWINDOWPOS = &HF
Const IMC_SETSTATUSWINDOWPOS = &H10
Const IMC_CLOSESTATUSWINDOW = &H21
Const IMC_OPENSTATUSWINDOW = &H22


'  wParam for WM_IME_CONTROL to the soft keyboard
'  dwAction for ImmNotifyIME
Const NI_OPENCANDIDATE = &H10
Const NI_CLOSECANDIDATE = &H11
Const NI_SELECTCANDIDATESTR = &H12
Const NI_CHANGECANDIDATELIST = &H13
Const NI_FINALIZECONVERSIONRESULT = &H14
Const NI_COMPOSITIONSTR = &H15
Const NI_SETCANDIDATE_PAGESTART = &H16
Const NI_SETCANDIDATE_PAGESIZE = &H17

'  lParam for WM_IME_SETCONTEXT
Const ISC_SHOWUICANDIDATEWINDOW = &H1
Const ISC_SHOWUICOMPOSITIONWINDOW = &H80000000
Const ISC_SHOWUIGUIDELINE = &H40000000
Const ISC_SHOWUIALLCANDIDATEWINDOW = &HF
Const ISC_SHOWUIALL = &HC000000F

'  dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR
Const CPS_COMPLETE = &H1
Const CPS_CONVERT = &H2
Const CPS_REVERT = &H3
Const CPS_CANCEL = &H4

'  Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F
Const IME_CHOTKEY_IME_NONIME_TOGGLE = &H10
Const IME_CHOTKEY_SHAPE_TOGGLE = &H11
Const IME_CHOTKEY_SYMBOL_TOGGLE = &H12

'  Windows for Japanese Edition hot key ID from 0x30 - 0x4F
Const IME_JHOTKEY_CLOSE_OPEN = &H30

'  Windows for Korean Edition hot key ID from 0x50 - 0x6F
Const IME_KHOTKEY_SHAPE_TOGGLE = &H50
Const IME_KHOTKEY_HANJACONVERT = &H51
Const IME_KHOTKEY_ENGLISH = &H52

'  Windows for Tranditional Chinese Edition hot key ID from 0x70 - 0x8F
Const IME_THOTKEY_IME_NONIME_TOGGLE = &H70
Const IME_THOTKEY_SHAPE_TOGGLE = &H71
Const IME_THOTKEY_SYMBOL_TOGGLE = &H72

'  direct switch hot key ID from 0x100 - 0x11F
Const IME_HOTKEY_DSWITCH_FIRST = &H100
Const IME_HOTKEY_DSWITCH_LAST = &H11F

'  IME private hot key from 0x200 - 0x21F
Const IME_ITHOTKEY_RESEND_RESULTSTR = &H200
Const IME_ITHOTKEY_PREVIOUS_COMPOSITION = &H201
Const IME_ITHOTKEY_UISTYLE_TOGGLE = &H202

'  parameter of ImmGetCompositionString
Const GCS_COMPREADSTR = &H1
Const GCS_COMPREADATTR = &H2
Const GCS_COMPREADCLAUSE = &H4
Const GCS_COMPSTR = &H8
Const GCS_COMPATTR = &H10
Const GCS_COMPCLAUSE = &H20
Const GCS_CURSORPOS = &H80
Const GCS_DELTASTART = &H100
Const GCS_RESULTREADSTR = &H200
Const GCS_RESULTREADCLAUSE = &H400
Const GCS_RESULTSTR = &H800
Const GCS_RESULTCLAUSE = &H1000

'  style bit flags for WM_IME_COMPOSITION
Const CS_INSERTCHAR = &H2000
Const CS_NOMOVECARET = &H4000

'  bits of fdwInit of INPUTCONTEXT
'  IME property bits
Const IME_PROP_AT_CARET = &H10000
Const IME_PROP_SPECIAL_UI = &H20000
Const IME_PROP_CANDLIST_START_FROM_1 = &H40000
Const IME_PROP_UNICODE = &H80000

'  IME UICapability bits
Const UI_CAP_2700 = &H1
Const UI_CAP_ROT90 = &H2
Const UI_CAP_ROTANY = &H4

'  ImmSetCompositionString Capability bits
Const SCS_CAP_COMPSTR = &H1
Const SCS_CAP_MAKEREAD = &H2

'  IME WM_IME_SELECT inheritance Capability bits
Const SELECT_CAP_CONVERSION = &H1
Const SELECT_CAP_SENTENCE = &H2

'  ID for deIndex of ImmGetGuideLine
Const GGL_LEVEL = &H1
Const GGL_INDEX = &H2
Const GGL_STRING = &H3
Const GGL_PRIVATE = &H4

'  ID for dwLevel of GUIDELINE Structure
Const GL_LEVEL_NOGUIDELINE = &H0
Const GL_LEVEL_FATAL = &H1
Const GL_LEVEL_ERROR = &H2
Const GL_LEVEL_WARNING = &H3
Const GL_LEVEL_INFORMATION = &H4

'  ID for dwIndex of GUIDELINE Structure
Const GL_ID_UNKNOWN = &H0
Const GL_ID_NOMODULE = &H1
Const GL_ID_NODICTIONARY = &H10
Const GL_ID_CANNOTSAVE = &H11
Const GL_ID_NOCONVERT = &H20
Const GL_ID_TYPINGERROR = &H21
Const GL_ID_TOOMANYSTROKE = &H22
Const GL_ID_READINGCONFLICT = &H23
Const GL_ID_INPUTREADING = &H24
Const GL_ID_INPUTRADICAL = &H25
Const GL_ID_INPUTCODE = &H26
Const GL_ID_INPUTSYMBOL = &H27
Const GL_ID_CHOOSECANDIDATE = &H28
Const GL_ID_REVERSECONVERSION = &H29
Const GL_ID_PRIVATE_FIRST = &H8000
Const GL_ID_PRIVATE_LAST = &HFFFF

'  ID for dwIndex of ImmGetProperty
Const IGP_PROPERTY = &H4
Const IGP_CONVERSION = &H8
Const IGP_SENTENCE = &HC
Const IGP_UI = &H10
Const IGP_SETCOMPSTR = &H14
Const IGP_SELECT = &H18

'  dwIndex for ImmSetCompositionString API
Const SCS_SETSTR = (GCS_COMPREADSTR Or GCS_COMPSTR)
Const SCS_CHANGEATTR = (GCS_COMPREADATTR Or GCS_COMPATTR)
Const SCS_CHANGECLAUSE = (GCS_COMPREADCLAUSE Or GCS_COMPCLAUSE)

'  attribute for COMPOSITIONSTRING Structure
Const ATTR_INPUT = &H0
Const ATTR_TARGET_CONVERTED = &H1
Const ATTR_CONVERTED = &H2
Const ATTR_TARGET_NOTCONVERTED = &H3
Const ATTR_INPUT_ERROR = &H4

'  bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW
Const CFS_DEFAULT = &H0
Const CFS_RECT = &H1
Const CFS_POINT = &H2
Const CFS_SCREEN = &H4
Const CFS_FORCE_POSITION = &H20
Const CFS_CANDIDATEPOS = &H40
Const CFS_EXCLUDE = &H80

'  conversion direction for ImmGetConversionList
Const GCL_CONVERSION = &H1
Const GCL_REVERSECONVERSION = &H2
Const GCL_REVERSE_LENGTH = &H3

'  bit field for conversion mode
Const IME_CMODE_ALPHANUMERIC = &H0
Const IME_CMODE_NATIVE = &H1
Const IME_CMODE_CHINESE = IME_CMODE_NATIVE
Const IME_CMODE_HANGEUL = IME_CMODE_NATIVE
Const IME_CMODE_JAPANESE = IME_CMODE_NATIVE
Const IME_CMODE_KATAKANA = &H2                   '  only effect under IME_CMODE_NATIVE
Const IME_CMODE_LANGUAGE = &H3
Const IME_CMODE_FULLSHAPE = &H8
Const IME_CMODE_ROMAN = &H10
Const IME_CMODE_CHARCODE = &H20
Const IME_CMODE_HANJACONVERT = &H40
Const IME_CMODE_SOFTKBD = &H80
Const IME_CMODE_NOCONVERSION = &H100
Const IME_CMODE_EUDC = &H200
Const IME_CMODE_SYMBOL = &H400

Const IME_SMODE_NONE = &H0
Const IME_SMODE_PLAURALCLAUSE = &H1
Const IME_SMODE_SINGLECONVERT = &H2
Const IME_SMODE_AUTOMATIC = &H4
Const IME_SMODE_PHRASEPREDICT = &H8

'  style of candidate
Const IME_CAND_UNKNOWN = &H0
Const IME_CAND_READ = &H1
Const IME_CAND_CODE = &H2
Const IME_CAND_MEANING = &H3
Const IME_CAND_RADICAL = &H4
Const IME_CAND_STROKE = &H5

'  wParam of report message WM_IME_NOTIFY
Const IMN_CLOSESTATUSWINDOW = &H1
Const IMN_OPENSTATUSWINDOW = &H2
Const IMN_CHANGECANDIDATE = &H3
Const IMN_CLOSECANDIDATE = &H4
Const IMN_OPENCANDIDATE = &H5
Const IMN_SETCONVERSIONMODE = &H6
Const IMN_SETSENTENCEMODE = &H7
Const IMN_SETOPENSTATUS = &H8
Const IMN_SETCANDIDATEPOS = &H9
Const IMN_SETCOMPOSITIONFONT = &HA
Const IMN_SETCOMPOSITIONWINDOW = &HB
Const IMN_SETSTATUSWINDOWPOS = &HC
Const IMN_GUIDELINE = &HD
Const IMN_PRIVATE = &HE

'  error code of ImmGetCompositionString
Const IMM_ERROR_NODATA = (-1)
Const IMM_ERROR_GENERAL = (-2)

'  dialog mode of ImmConfigureIME
Const IME_CONFIG_GENERAL = 1
Const IME_CONFIG_REGISTERWORD = 2
Const IME_CONFIG_SELECTDICTIONARY = 3

'  dialog mode of ImmEscape
Const IME_ESC_QUERY_SUPPORT = &H3
Const IME_ESC_RESERVED_FIRST = &H4
Const IME_ESC_RESERVED_LAST = &H7FF
Const IME_ESC_PRIVATE_FIRST = &H800
Const IME_ESC_PRIVATE_LAST = &HFFF
Const IME_ESC_SEQUENCE_TO_INTERNAL = &H1001
Const IME_ESC_GET_EUDC_DICTIONARY = &H1003
Const IME_ESC_SET_EUDC_DICTIONARY = &H1004
Const IME_ESC_MAX_KEY = &H1005
Const IME_ESC_IME_NAME = &H1006
Const IME_ESC_SYNC_HOTKEY = &H1007
Const IME_ESC_HANJA_MODE = &H1008

'  style of word registration
Const IME_REGWORD_STYLE_EUDC = &H1
Const IME_REGWORD_STYLE_USER_FIRST = &H80000000
Const IME_REGWORD_STYLE_USER_LAST = &HFFFF

'  type of soft keyboard
'  for Windows Tranditional Chinese Edition
Const SOFTKEYBOARD_TYPE_T1 = &H1
'  for Windows Simplified Chinese Edition
Const SOFTKEYBOARD_TYPE_C1 = &H2



'  Dial Options
Const DIALOPTION_BILLING = &H40          '  Supports wait for bong "$"
Const DIALOPTION_QUIET = &H80            '  Supports wait for quiet "@"
Const DIALOPTION_DIALTONE = &H100        '  Supports wait for dial tone "W"

'  SpeakerVolume for MODEMDEVCAPS
Const MDMVOLFLAG_LOW = &H1
Const MDMVOLFLAG_MEDIUM = &H2
Const MDMVOLFLAG_HIGH = &H4

'  SpeakerVolume for MODEMSETTINGS
Const MDMVOL_LOW = &H0
Const MDMVOL_MEDIUM = &H1
Const MDMVOL_HIGH = &H2

'  SpeakerMode for MODEMDEVCAPS
Const MDMSPKRFLAG_OFF = &H1
Const MDMSPKRFLAG_DIAL = &H2
Const MDMSPKRFLAG_ON = &H4
Const MDMSPKRFLAG_CALLSETUP = &H8

'  SpeakerMode for MODEMSETTINGS
Const MDMSPKR_OFF = &H0
Const MDMSPKR_DIAL = &H1
Const MDMSPKR_ON = &H2
Const MDMSPKR_CALLSETUP = &H3
 
'  Modem Options
Const MDM_COMPRESSION = &H1
Const MDM_ERROR_CONTROL = &H2
Const MDM_FORCED_EC = &H4
Const MDM_CELLULAR = &H8
Const MDM_FLOWCONTROL_HARD = &H10
Const MDM_FLOWCONTROL_SOFT = &H20
Const MDM_CCITT_OVERRIDE = &H40
Const MDM_SPEED_ADJUST = &H80
Const MDM_TONE_DIAL = &H100
Const MDM_BLIND_DIAL = &H200
Const MDM_V23_OVERRIDE = &H400

' // AppBar stuff

Const ABM_NEW = &H0
Const ABM_REMOVE = &H1
Const ABM_QUERYPOS = &H2
Const ABM_SETPOS = &H3
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5
Const ABM_ACTIVATE = &H6               '  lParam == TRUE/FALSE means activate/deactivate
Const ABM_GETAUTOHIDEBAR = &H7
Const ABM_SETAUTOHIDEBAR = &H8          '  this can fail at any time.  MUST check the result
                                        '  lParam = TRUE/FALSE  Set/Unset
                                        '  uEdge = what edge
Const ABM_WINDOWPOSCHANGED = &H9


'  these are put in the wparam of callback messages
Const ABN_STATECHANGE = &H0
Const ABN_POSCHANGED = &H1
Const ABN_FULLSCREENAPP = &H2
Const ABN_WINDOWARRANGE = &H3 '  lParam == TRUE means hide

'  flags for get state

Const ABS_AUTOHIDE = &H1
Const ABS_ALWAYSONTOP = &H2
Const ABE_LEFT = 0
Const ABE_TOP = 1
Const ABE_RIGHT = 2
Const ABE_BOTTOM = 3

' //  EndAppBar


Const EIRESID = -1

Declare Function ExtractIconEx Lib "Coredll" Alias "ExtractIconExW" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long

' // Shell File Operations

Const FO_MOVE = &H1
Const FO_COPY = &H2
Const FO_DELETE = &H3
Const FO_RENAME = &H4
Const FOF_MULTIDESTFILES = &H1
Const FOF_CONFIRMMOUSE = &H2
Const FOF_SILENT = &H4                      '  don't create progress/report
Const FOF_RENAMEONCOLLISION = &H8
Const FOF_NOCONFIRMATION = &H10             '  Don't prompt the user.
Const FOF_WANTMAPPINGHANDLE = &H20          '  Fill in SHFILEOPSTRUCT.hNameMappings
                                      '  Must be freed using SHFreeNameMappings
Const FOF_ALLOWUNDO = &H40
Const FOF_FILESONLY = &H80                  '  on *.*, do only files
Const FOF_SIMPLEPROGRESS = &H100            '  means don't show names of files
Const FOF_NOCONFIRMMKDIR = &H200            '  don't confirm making any needed dirs

Const PO_DELETE = &H13           '  printer is being deleted
Const PO_RENAME = &H14           '  printer is being renamed
Const PO_PORTCHANGE = &H20       '  port this printer connected to is being changed
                                '  if this id is set, the strings received by
                                '  the copyhook are a doubly-null terminated
                                '  list of strings.  The first is the printer
                                '  name and the second is the printer port.
Const PO_REN_PORT = &H34         '  PO_RENAME and PO_PORTCHANGE at same time.

' //  Begin ShellExecuteEx and family

'  ShellExecute() and ShellExecuteEx() error codes

'  regular WinExec() codes
Const SE_ERR_FNF = 2                     '  file not found
Const SE_ERR_PNF = 3                     '  path not found
Const SE_ERR_ACCESSDENIED = 5            '  access denied
Const SE_ERR_OOM = 8                     '  out of memory
Const SE_ERR_DLLNOTFOUND = 32


'  Note CLASSKEY overrides CLASSNAME
Const SEE_MASK_CLASSNAME = &H1
Const SEE_MASK_CLASSKEY = &H3
'  Note INVOKEIDLIST overrides IDLIST
Const SEE_MASK_IDLIST = &H4
Const SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_ICON = &H10
Const SEE_MASK_HOTKEY = &H20
Const SEE_MASK_NOCLOSEPROCESS = &H40
Const SEE_MASK_CONNECTNETDRV = &H80
Const SEE_MASK_FLAG_DDEWAIT = &H100
Const SEE_MASK_DOENVSUBST = &H200
Const SEE_MASK_FLAG_NO_UI = &H400

' // Tray notification definitions

Const NIM_ADD = &H0
Const NIM_MODIFY = &H1
Const NIM_DELETE = &H2

Const NIF_MESSAGE = &H1
Const NIF_ICON = &H2
Const NIF_TIP = &H4


' // End Tray Notification Icons

' // Begin SHGetFileInfo

'  * The SHGetFileInfo API provides an easy way to get attributes
'  * for a file given a pathname.
'  *
'  *   PARAMETERS
'  *
'  *     pszPath              file name to get info about
'  *     dwFileAttributes     file attribs, only used with SHGFI_USEFILEATTRIBUTES
'  *     psfi                 place to return file info
'  *     cbFileInfo           size of structure
'  *     uFlags               flags
'  *
'  *   RETURN
'  *     TRUE if things worked
'  */

Const SHGFI_ICON = &H100                         '  get icon
Const SHGFI_DISPLAYNAME = &H200                  '  get display name
Const SHGFI_TYPENAME = &H400                     '  get type name
Const SHGFI_ATTRIBUTES = &H800                   '  get attributes
Const SHGFI_ICONLOCATION = &H1000                '  get icon location
Const SHGFI_EXETYPE = &H2000                     '  return exe type
Const SHGFI_SYSICONINDEX = &H4000                '  get system icon index
Const SHGFI_LINKOVERLAY = &H8000                 '  put a link overlay on icon
Const SHGFI_SELECTED = &H10000                   '  show icon in selected state
Const SHGFI_LARGEICON = &H0                      '  get large icon
Const SHGFI_SMALLICON = &H1                      '  get small icon
Const SHGFI_OPENICON = &H2                       '  get open icon
Const SHGFI_SHELLICONSIZE = &H4                  '  get shell size icon
Const SHGFI_PIDL = &H8                           '  pszPath is a pidl
Const SHGFI_USEFILEATTRIBUTES = &H10             '  use passed dwFileAttribute

Const SHGNLI_PIDL = &H1                          '  pszLinkTo is a pidl
Const SHGNLI_PREFIXNAME = &H2                    '  Make name "Shortcut to xxx"

' // End SHGetFileInfo


' Copyright (C) 1993 - 1995 Microsoft Corporation

' Module Name:

'     winperf.h

' Abstract:

'     Header file for the Performance Monitor data.

'     This file contains the definitions of the data structures returned
'     by the Configuration Registry in response to a request for
'     performance data.  This file is used by both the Configuration
'     Registry and the Performance Monitor to define their interface.
'     The complete interface is described here, except for the name
'     of the node to query in the registry.  It is

'                    HKEY_PERFORMANCE_DATA.

'     By querying that node with a subkey of "Global" the caller will
'     retrieve the structures described here.

'     There is no need to RegOpenKey() the reserved handle HKEY_PERFORMANCE_DATA,
'     but the caller should RegCloseKey() the handle so that network transports
'     and drivers can be removed or installed (which cannot happen while
'     they are open for monitoring.)  Remote requests must first
'     RegConnectRegistry().

' --*/

'   Data structure definitions.

'   In order for data to be returned through the Configuration Registry
'   in a system-independent fashion, it must be self-describing.

'   In the following, all offsets are in bytes.

'
'   Data is returned through the Configuration Registry in a
'   a data block which begins with a _PERF_DATA_BLOCK structure.
'

'   The _PERF_DATA_BLOCK structure is followed by NumObjectTypes of
'   data sections, one for each type of object measured.  Each object
'   type section begins with a _PERF_OBJECT_TYPE structure.


' *****************************************************************************                                                                             *
' * winver.h -    Version management functions, types, and definitions          *
' *                                                                             *
' *               Include file for VER.DLL.  This library is                    *
' *               designed to allow version stamping of Windows executable files*
' *               and of special .VER files for DOS executable files.           *
' *                                                                             *
' *               Copyright (c) 1993, Microsoft Corp.  All rights reserved      *
' *                                                                             *
' \*****************************************************************************/

'  ----- Symbols -----
Const VS_VERSION_INFO = 1
Const VS_USER_DEFINED = 100

'  ----- VS_VERSION.dwFileFlags -----
Const VS_FFI_SIGNATURE = &HFEEF04BD
Const VS_FFI_STRUCVERSION = &H10000
Const VS_FFI_FILEFLAGSMASK = &H3F&

'  ----- VS_VERSION.dwFileFlags -----
Const VS_FF_DEBUG = &H1&
Const VS_FF_PRERELEASE = &H2&
Const VS_FF_PATCHED = &H4&
Const VS_FF_PRIVATEBUILD = &H8&
Const VS_FF_INFOINFERRED = &H10&
Const VS_FF_SPECIALBUILD = &H20&

'  ----- VS_VERSION.dwFileOS -----
Const VOS_UNKNOWN = &H0&
Const VOS_DOS = &H10000
Const VOS_OS216 = &H20000
Const VOS_OS232 = &H30000
Const VOS_NT = &H40000

Const VOS__BASE = &H0&
Const VOS__WINDOWS16 = &H1&
Const VOS__PM16 = &H2&
Const VOS__PM32 = &H3&
Const VOS__WINDOWS32 = &H4&

Const VOS_DOS_WINDOWS16 = &H10001
Const VOS_DOS_WINDOWS32 = &H10004
Const VOS_OS216_PM16 = &H20002
Const VOS_OS232_PM32 = &H30003
Const VOS_NT_WINDOWS32 = &H40004

'  ----- VS_VERSION.dwFileType -----
Const VFT_UNKNOWN = &H0&
Const VFT_APP = &H1&
Const VFT_DLL = &H2&
Const VFT_DRV = &H3&
Const VFT_FONT = &H4&
Const VFT_VXD = &H5&
Const VFT_STATIC_LIB = &H7&

'  ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
Const VFT2_UNKNOWN = &H0&
Const VFT2_DRV_PRINTER = &H1&
Const VFT2_DRV_KEYBOARD = &H2&
Const VFT2_DRV_LANGUAGE = &H3&
Const VFT2_DRV_DISPLAY = &H4&
Const VFT2_DRV_MOUSE = &H5&
Const VFT2_DRV_NETWORK = &H6&
Const VFT2_DRV_SYSTEM = &H7&
Const VFT2_DRV_INSTALLABLE = &H8&
Const VFT2_DRV_SOUND = &H9&
Const VFT2_DRV_COMM = &HA&
Const VFT2_DRV_INPUTMETHOD = &HB&

'  ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT -----
Const VFT2_FONT_RASTER = &H1&
Const VFT2_FONT_VECTOR = &H2&
Const VFT2_FONT_TRUETYPE = &H3&

'  ----- VerFindFile() flags -----
Const VFFF_ISSHAREDFILE = &H1

Const VFF_CURNEDEST = &H1
Const VFF_FILEINUSE = &H2
Const VFF_BUFFTOOSMALL = &H4

'  ----- VerInstallFile() flags -----
Const VIFF_FORCEINSTALL = &H1
Const VIFF_DONTDELETEOLD = &H2

Const VIF_TEMPFILE = &H1&
Const VIF_MISMATCH = &H2&
Const VIF_SRCOLD = &H4&

Const VIF_DIFFLANG = &H8&
Const VIF_DIFFCODEPG = &H10&
Const VIF_DIFFTYPE = &H20&

Const VIF_WRITEPROT = &H40&
Const VIF_FILEINUSE = &H80&
Const VIF_OUTOFSPACE = &H100&
Const VIF_ACCESSVIOLATION = &H200&
Const VIF_SHARINGVIOLATION = &H400&
Const VIF_CANNOTCREATE = &H800&
Const VIF_CANNOTDELETE = &H1000&
Const VIF_CANNOTRENAME = &H2000&
Const VIF_CANNOTDELETECUR = &H4000&
Const VIF_OUTOFMEMORY = &H8000&

Const VIF_CANNOTREADSRC = &H10000
Const VIF_CANNOTREADDST = &H20000
Const VIF_BUFFTOOSMALL = &H40000


'  ----- Function prototypes -----


'  Define API decoration for direct importing of DLL references.
Declare Function HeapValidate Lib "Coredll" Alias "HeapValidate" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Long) As Long

Const PROCESS_HEAP_REGION = &H1
Const PROCESS_HEAP_UNCOMMITTED_RANGE = &H2
Const PROCESS_HEAP_ENTRY_BUSY = &H4
Const PROCESS_HEAP_ENTRY_MOVEABLE = &H10
Const PROCESS_HEAP_ENTRY_DDESHARE = &H20

'  GetBinaryType return values.

Const SCS_32BIT_BINARY = 0
Const SCS_DOS_BINARY = 1
Const SCS_WOW_BINARY = 2
Const SCS_PIF_BINARY = 3
Const SCS_POSIX_BINARY = 4
Const SCS_OS216_BINARY = 5

'  Logon Support APIs

Const LOGON32_LOGON_INTERACTIVE = 2
Const LOGON32_LOGON_BATCH = 4
Const LOGON32_LOGON_SERVICE = 5

Const LOGON32_PROVIDER_DEFAULT = 0
Const LOGON32_PROVIDER_WINNT35 = 1


'  dwPlatformId defines:
'
Const VER_PLATFORM_WIN32s = 0
Const VER_PLATFORM_WIN32_WINDOWS = 1
Const VER_PLATFORM_WIN32_NT = 2

'  Power Management APIs

Const AC_LINE_OFFLINE = &H0
Const AC_LINE_ONLINE = &H1
Const AC_LINE_BACKUP_POWER = &H2
Const AC_LINE_UNKNOWN = &HFF
Const BATTERY_FLAG_HIGH = &H1
Const BATTERY_FLAG_LOW = &H2
Const BATTERY_FLAG_CRITICAL = &H4
Const BATTERY_FLAG_CHARGING = &H8
Const BATTERY_FLAG_NO_BATTERY = &H80
Const BATTERY_FLAG_UNKNOWN = &HFF
Const BATTERY_PERCENTAGE_UNKNOWN = &HFF
Const BATTERY_LIFE_UNKNOWN = &HFFFF

' *   commdlg.h -- This module defines the 32-Bit Common Dialog APIs      *



Const OFN_READONLY = &H1
Const OFN_OVERWRITEPROMPT = &H2
Const OFN_HIDEREADONLY = &H4
Const OFN_NOCHANGEDIR = &H8
Const OFN_SHOWHELP = &H10
Const OFN_ENABLEHOOK = &H20
Const OFN_ENABLETEMPLATE = &H40
Const OFN_ENABLETEMPLATEHANDLE = &H80
Const OFN_NOVALIDATE = &H100
Const OFN_ALLOWMULTISELECT = &H200
Const OFN_EXTENSIONDIFFERENT = &H400
Const OFN_PATHMUSTEXIST = &H800
Const OFN_FILEMUSTEXIST = &H1000
Const OFN_CREATEPROMPT = &H2000
Const OFN_SHAREAWARE = &H4000
Const OFN_NOREADONLYRETURN = &H8000
Const OFN_NOTESTFILECREATE = &H10000
Const OFN_NONETWORKBUTTON = &H20000
Const OFN_NOLONGNAMES = &H40000                      '  force no long names for 4.x modules
Const OFN_EXPLORER = &H80000                         '  new look commdlg
Const OFN_NODEREFERENCELINKS = &H100000
Const OFN_LONGNAMES = &H200000                       '  force long names for 3.x modules

Const OFN_SHAREFALLTHROUGH = 2
Const OFN_SHARENOWARN = 1
Const OFN_SHAREWARN = 0

Const CDM_FIRST = (WM_USER + 100)
Const CDM_LAST = (WM_USER + 200)
Const CDM_GETSPEC = (CDM_FIRST + &H0)
Const CDM_GETFILEPATH = (CDM_FIRST + &H1)
Const CDM_GETFOLDERPATH = (CDM_FIRST + &H2)
Const CDM_GETFOLDERIDLIST = (CDM_FIRST + &H3)
Const CDM_SETCONTROLTEXT = (CDM_FIRST + &H4)
Const CDM_HIDECONTROL = (CDM_FIRST + &H5)
Const CDM_SETDEFEXT = (CDM_FIRST + &H6)

Const CC_RGBINIT = &H1
Const CC_FULLOPEN = &H2
Const CC_PREVENTFULLOPEN = &H4
Const CC_SHOWHELP = &H8
Const CC_ENABLEHOOK = &H10
Const CC_ENABLETEMPLATE = &H20
Const CC_ENABLETEMPLATEHANDLE = &H40
Const CC_SOLIDCOLOR = &H80
Const CC_ANYCOLOR = &H100

Const FR_DOWN = &H1
Const FR_WHOLEWORD = &H2
Const FR_MATCHCASE = &H4
Const FR_FINDNEXT = &H8
Const FR_REPLACE = &H10
Const FR_REPLACEALL = &H20
Const FR_DIALOGTERM = &H40
Const FR_SHOWHELP = &H80
Const FR_ENABLEHOOK = &H100
Const FR_ENABLETEMPLATE = &H200
Const FR_NOUPDOWN = &H400
Const FR_NOMATCHCASE = &H800
Const FR_NOWHOLEWORD = &H1000
Const FR_ENABLETEMPLATEHANDLE = &H2000
Const FR_HIDEUPDOWN = &H4000
Const FR_HIDEMATCHCASE = &H8000
Const FR_HIDEWHOLEWORD = &H10000

Const CF_SCREENFONTS = &H1
Const CF_PRINTERFONTS = &H2
Const CF_BOTH = (CF_SCREENFONTS Or CF_PRINTERFONTS)
Const CF_SHOWHELP = &H4&
Const CF_ENABLEHOOK = &H8&
Const CF_ENABLETEMPLATE = &H10&
Const CF_ENABLETEMPLATEHANDLE = &H20&
Const CF_INITTOLOGFONTSTRUCT = &H40&
Const CF_USESTYLE = &H80&
Const CF_EFFECTS = &H100&
Const CF_APPLY = &H200&
Const CF_ANSIONLY = &H400&
Const CF_SCRIPTSONLY = CF_ANSIONLY
Const CF_NOVECTORFONTS = &H800&
Const CF_NOOEMFONTS = CF_NOVECTORFONTS
Const CF_NOSIMULATIONS = &H1000&
Const CF_LIMITSIZE = &H2000&
Const CF_FIXEDPITCHONLY = &H4000&
Const CF_WYSIWYG = &H8000 '  must also have CF_SCREENFONTS CF_PRINTERFONTS
Const CF_FORCEFONTEXIST = &H10000
Const CF_SCALABLEONLY = &H20000
Const CF_TTONLY = &H40000
Const CF_NOFACESEL = &H80000
Const CF_NOSTYLESEL = &H100000
Const CF_NOSIZESEL = &H200000
Const CF_SELECTSCRIPT = &H400000
Const CF_NOSCRIPTSEL = &H800000
Const CF_NOVERTFONTS = &H1000000

Const SIMULATED_FONTTYPE = &H8000
Const PRINTER_FONTTYPE = &H4000
Const SCREEN_FONTTYPE = &H2000
Const BOLD_FONTTYPE = &H100
Const ITALIC_FONTTYPE = &H200
Const REGULAR_FONTTYPE = &H400

Const WM_CHOOSEFONT_GETLOGFONT = (WM_USER + 1)
Const WM_CHOOSEFONT_SETLOGFONT = (WM_USER + 101)
Const WM_CHOOSEFONT_SETFLAGS = (WM_USER + 102)

Const LBSELCHSTRING = "commdlg_LBSelChangedNotify"
Const SHAREVISTRING = "commdlg_ShareViolation"
Const FILEOKSTRING = "commdlg_FileNameOK"
Const COLOROKSTRING = "commdlg_ColorOK"
Const SETRGBSTRING = "commdlg_SetRGBColor"
Const HELPMSGSTRING = "commdlg_help"
Const FINDMSGSTRING = "commdlg_FindReplace"

Const CD_LBSELNOITEMS = -1
Const CD_LBSELCHANGE = 0
Const CD_LBSELSUB = 1
Const CD_LBSELADD = 2

Const PD_ALLPAGES = &H0
Const PD_SELECTION = &H1
Const PD_PAGENUMS = &H2
Const PD_NOSELECTION = &H4
Const PD_NOPAGENUMS = &H8
Const PD_COLLATE = &H10
Const PD_PRINTTOFILE = &H20
Const PD_PRINTSETUP = &H40
Const PD_NOWARNING = &H80
Const PD_RETURNDC = &H100
Const PD_RETURNIC = &H200
Const PD_RETURNDEFAULT = &H400
Const PD_SHOWHELP = &H800
Const PD_ENABLEPRINTHOOK = &H1000
Const PD_ENABLESETUPHOOK = &H2000
Const PD_ENABLEPRINTTEMPLATE = &H4000
Const PD_ENABLESETUPTEMPLATE = &H8000
Const PD_ENABLEPRINTTEMPLATEHANDLE = &H10000
Const PD_ENABLESETUPTEMPLATEHANDLE = &H20000
Const PD_USEDEVMODECOPIES = &H40000
Const PD_USEDEVMODECOPIESANDCOLLATE = &H40000
Const PD_DISABLEPRINTTOFILE = &H80000
Const PD_HIDEPRINTTOFILE = &H100000
Const PD_NONETWORKBUTTON = &H200000

Const DN_DEFAULTPRN = &H1

Const WM_PSD_PAGESETUPDLG = (WM_USER)
Const WM_PSD_FULLPAGERECT = (WM_USER + 1)
Const WM_PSD_MINMARGINRECT = (WM_USER + 2)
Const WM_PSD_MARGINRECT = (WM_USER + 3)
Const WM_PSD_GREEKTEXTRECT = (WM_USER + 4)
Const WM_PSD_ENVSTAMPRECT = (WM_USER + 5)
Const WM_PSD_YAFULLPAGERECT = (WM_USER + 6)

Const PSD_DEFAULTMINMARGINS = &H0 '  default (printer's)
Const PSD_INWININIINTLMEASURE = &H0 '  1st of 4 possible

Const PSD_MINMARGINS = &H1 '  use caller's
Const PSD_MARGINS = &H2 '  use caller's
Const PSD_INTHOUSANDTHSOFINCHES = &H4 '  2nd of 4 possible
Const PSD_INHUNDREDTHSOFMILLIMETERS = &H8 '  3rd of 4 possible
Const PSD_DISABLEMARGINS = &H10
Const PSD_DISABLEPRINTER = &H20
Const PSD_NOWARNING = &H80 '  must be same as PD_*
Const PSD_DISABLEORIENTATION = &H100
Const PSD_RETURNDEFAULT = &H400 '  must be same as PD_*
Const PSD_DISABLEPAPER = &H200
Const PSD_SHOWHELP = &H800 '  must be same as PD_*
Const PSD_ENABLEPAGESETUPHOOK = &H2000 '  must be same as PD_*
Const PSD_ENABLEPAGESETUPTEMPLATE = &H8000 '  must be same as PD_*
Const PSD_ENABLEPAGESETUPTEMPLATEHANDLE = &H20000 '  must be same as PD_*
Const PSD_ENABLEPAGEPAINTHOOK = &H40000
Const PSD_DISABLEPAGEPAINTING = &H80000


Declare Function IsBadCodePtr Lib "Coredll" Alias "IsBadCodePtr" (ByVal lpfn As Long) As Long
Declare Function EnumFonts Lib "Coredll" Alias "EnumFontsW" (ByVal hDC As Long, ByVal lpsz As String, ByVal lpFontEnumProc As Long, ByVal lParam As Long) As Long
Declare Function SetAbortProc Lib "Coredll" Alias "SetAbortProc" (ByVal hDC As Long, ByVal lpAbortProc As Long) As Long
Declare Function EnumCalendarInfo Lib "Coredll" Alias "EnumCalendarInfoW" (ByVal lpCalInfoEnumProc As Long, ByVal Locale As Long, ByVal Calendar As Long, ByVal CalType As Long) As Long
Declare Function GetCurrencyFormat Lib "Coredll" Alias "GetCurrencyFormatW" (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat As Long, ByVal lpCurrencyStr As String, ByVal cchCurrency As Long) As Long
Declare Function GetNumberFormat Lib "Coredll" Alias "GetNumberFormatW" (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat As Long, ByVal lpNumberStr As String, ByVal cchNumber As Long) As Long

Declare Function GetStringTypeEx Lib "Coredll" Alias "GetStringTypeExW" (ByVal Locale As Long, ByVal dwInfoType As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, lpCharType As Integer) As Long
Declare Function GetStringTypeW Lib "Coredll" Alias "GetStringTypeW" (ByVal dwInfoType As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, lpCharType As Integer) As Long
Declare Function SetLocaleInfo Lib "Coredll" Alias "SetLocaleInfoW" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Declare Function CallWindowProc Lib "Coredll" Alias "CallWindowProcW" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function DrawIconEx Lib "Coredll" Alias "DrawIconEx" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Declare Function EnumWindows Lib "Coredll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Declare Function GetKeyboardLayout Lib "Coredll" Alias "GetKeyboardLayout" (ByVal dwLayout As Long) As Long

Declare Function GetSysColorBrush Lib "Coredll" Alias "GetSysColorBrush" (ByVal nIndex As Long) As Long
Declare Function LoadImage Lib "Coredll" Alias "LoadImageW" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long

Declare Function SetTimer Lib "Coredll" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function TrackPopupMenuEx Lib "Coredll" Alias "TrackPopupMenuEx" (ByVal hMenu As Long, ByVal un As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal hWnd As Long, lpTPMParams As Long) As Long

Const INVALID_HANDLE_VALUE = -1

'DrawEdge Constants
Const BDR_RAISEDOUTER = &H1
Const BDR_SUNKENOUTER = &H2
Const BDR_RAISEDINNER = &H4
Const BDR_SUNKENINNER = &H8

Const BDR_OUTER = &H3
Const BDR_INNER = &HC
Const BDR_RAISED = &H5
Const BDR_SUNKEN = &HA

Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)

Const BF_LEFT = &H1
Const BF_TOP = &H2
Const BF_RIGHT = &H4
Const BF_BOTTOM = &H8

Const BF_TOPLEFT = (BF_TOP Or BF_LEFT)
Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT)
Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT)
Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)

Const BF_DIAGONAL = &H10

' For diagonal lines, the BF_RECT flags specify the end point of
' the vector bounded by the rectangle parameter.
Const BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT)
Const BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT)
Const BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT)
Const BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT)

Const BF_MIDDLE = &H800    ' Fill in the middle.
Const BF_SOFT = &H1000     ' Use for softer buttons.
Const BF_ADJUST = &H2000   ' Calculate the space left over.
Const BF_FLAT = &H4000     ' For flat rather than 3-D borders.
Const BF_MONO = &H8000     ' For monochrome borders.

++++++++++++++++++++++++++++++++++++++++++++++++++++
WINCE START HERE

AFS_CloseAllFileHandles
AFS_CreateDirectoryW
AFS_CreateFileW
AFS_DeleteFileW
AFS_FindFirstFileW
AFS_GetDiskFreeSpace
AFS_GetFileAttributesW
AFS_MoveFileW
AFS_NotifyMountedFS
AFS_OidGetInfo
AFS_PrestoChangoFileName
AFS_RegisterFileSystemFunction
AFS_RemoveDirectoryW
AFS_SetFileAttributesW
AFS_Unmount
AddEventAccess
AddTrackedItem
AttachDebugger
AudioUpdateFromRegistry
BatteryDrvrGetLevels
BatteryDrvrSupportsChangeNotification
BatteryGetLifeTimeInfo
BatteryNotifyOfTimeChange
BinaryCompress
BinaryDecompress
CacheSync
CeChangeDatabaseLCID
CeClearReplChangeBits
CeClearUserNotification
CeCreateDatabase
CeDeleteDatabase
CeDeleteRecord
CeEventHasOccurred
CeFindFirstDatabase
CeFindNextDatabase
CeGetReplChangeBits
CeGetReplChangeMask
CeGetReplOtherBits
CeGetUserNotificationPreferences
CeHandleAppNotifications
CeOidGetInfo
CeOpenDatabase
CeReadRecordProps
CeRegisterFileSystemNotification
CeRegisterReplNotification
CeRemoveFontResource
CeRunAppAtEvent
CeRunAppAtTime
CeSeekDatabase
CeSetDatabaseInfo
CeSetReplChangeBits
CeSetReplChangeMask
CeSetReplOtherBits
CeSetUserNotification
CeWriteRecordProps
CheckMenuRadioItem
CheckPassword
CheckRadioButton
CloseAllDeviceHandles
CloseAllFileHandles
CloseProcOE
CompactAllHeaps
ConnectDebugger
ConvertDefaultLocale
CreateAPIHandle
CreateAPISet
CreateBitmapFromPointer
CreateCrit
CreateDeviceHandle
CreateDialogIndirectParamW
CreateFileForMapping
CreateFileInMountedFS
DBCanonicalize
DebugNotify
DeleteAndRenameFile
DeleteTrackedItem
DeregisterAFS
DeregisterAFSName
DeregisterDevice
DisableCaretSystemWide
DumpFileSystemHeap
DumpKCallProfile
EnableCaretSystemWide
EnableEUDC
EnableHardwareKeyboard
EndDialog
EnumDevices
EnumPnpIds
EventModify
ExitProcess
ExtTextOutW
ExtractResource
FileSystemPowerFunction
FilterTrackedItem
FindResource
ForcePageout
GetAPIAddress
GetAssociatedMenu
GetAsyncShiftFlags
GetCPInfo
GetCallerProcess
GetCallerProcessIndex
GetCapture
GetClassLong
GetClassLongW
GetClipboardDataAlloc
GetCurrentDirectoryW
GetCurrentFT
GetCurrentPermissions
GetDIBits
GetDeviceKeys
GetDiskFreeSpaceExW
GetEmulCmdExtraArgs
GetFSHeapInfo
GetFileSize
GetHeapSnapshot
GetIdleTime
GetKPhys
GetKeyboardStatus
GetKeyboardTarget
GetMenuItemInfoW
GetMessageSource
GetMessageWNoWait
GetMouseMovePoints
GetOpenFileNameW
GetOwnerProcess
GetPasswordActive
GetProcAddrBits
GetProcFromPtr
GetProcName
GetProcessIndexFromID
GetProcessVersion
GetRealTime
GetRomFileBytes
GetRomFileInfo
GetStoreInformation
GetStringTypeExW
GetSystemMemoryDivision
GetSystemPowerStatusEx
GetTextFaceW
GetTimeFormatW
GiveKPhys
GwesPowerOffSystem
ImageList_Add
ImageList_AddMasked
ImageList_BeginDrag
ImageList_Copy
ImageList_CopyDitherImage
ImageList_Create
ImageList_Destroy
ImageList_DragEnter
ImageList_DragLeave
ImageList_DragMove
ImageList_DragShowNolock
ImageList_Draw
ImageList_DrawEx
ImageList_DrawIndirect
ImageList_Duplicate
ImageList_EndDrag
ImageList_GetBkColor
ImageList_GetDragImage
ImageList_GetIconSize
ImageList_GetImageCount
ImageList_GetImageInfo
ImageList_LoadImage
ImageList_Merge
ImageList_Remove
ImageList_Replace
ImageList_ReplaceIcon
ImageList_SetBkColor
ImageList_SetDragCursorImage
ImageList_SetIconSize
ImageList_SetImageCount
ImageList_SetOverlayImage
InitLocale
InitializeCriticalSection
InputDebugCharW
InterruptDisable
InterruptDone
InterruptInitialize
IsAPIReady
IsBadPtr
IsDBCSLeadByteEx
IsExiting
IsPrimaryThread
IsValidLocale
KernExtractIcons
KernelIoControl
KeybdGetDeviceInfo
KeybdInitStates
KeybdVKeyToUnicode
KillAllOtherThreads
LeaveCritSec
LoadDriver
LoadFSD
LoadImageW
LocalAllocInProcess
LocalFreeInProcess
LocalSizeInProcess
MainThreadBaseFunc
MapPtrToProcess
MapPtrUnsecure
MapUncompressedFileW
NKDbgPrintfW
NKTerminateThread
NKvDbgPrintfW
NLedGetDeviceInfo
NLedSetDevice
NotifyForceCleanboot
NotifyWinUserSystem
OtherThreadsRunning
PPSHRestart
PSLNotify
PegClearUserNotification
PegCreateDatabase
PegDeleteDatabase
PegDeleteRecord
PegFindFirstDatabase
PegFindNextDatabase
PegGetUserNotificationPreferences
PegHandleAppNotifications
PegOidGetInfo
PegOpenDatabase
PegReadRecordProps
PegRemoveFontResource
PegRunAppAtEvent
PegRunAppAtTime
PegSeekDatabase
PegSetDatabaseInfo
PegSetUserNotification
PegWriteRecordProps
PostKeybdMessage
PostThreadMessageW
PowerOffSystem
PrintTrackedItem
ProcessDetachAllDLLs
ProfileStart
ProfileStop
ProfileSyscall
QASetWindowsJournalHook
QAUnhookWindowsJournalHook
QueryAPISetID
Random
RasDeleteEntry
RasDial
RasEnumConnections
RasEnumEntries
RasGetConnectStatus
RasGetEntryDevConfig
RasGetEntryDialParams
RasGetEntryProperties
RasHangUp
RasHangup
RasIOControl
RasRenameEntry
RasSetEntryDevConfig
RasSetEntryDialParams
RasSetEntryProperties
RasValidateEntryName
ReadFilePagein
RectangleAnimation
RefreshKernelAlarm
RegCopyFile
RegRestoreFile
RegisterAFS
RegisterAFSName
RegisterAPISet
RegisterClassWStub
RegisterDbgZones
RegisterDevice
RegisterHiddenAFS
RegisterNTApp
RegisterSIPanel
RegisterTaskBar
RegisterTrackedItem
RemoteLocalAlloc
RemoteLocalFree
RemoteLocalReAlloc
RemoteLocalSize
SHAddToRecentDocs
SHChangeNotify
SHCreateExplorerInstance
SHCreateShortcut
SHFileNotify_Add
SHFileNotify_Free
SHFileNotify_Remove
SHGetFileInfo
SHGetShortcutTarget
SHLoadDIBitmap
SHShowOutOfMemory
SendInput
SetACP
SetAssociatedMenu
SetBrushOrgEx
SetCaretBlinkTime
SetClassLong
SetCleanRebootFlag
SetClipboardData
SetDaylightTime
SetDbgZone
SetExceptionHandler
SetGwesHeapMark
SetGwesOOMEvent
SetGwesPowerHandler
SetHandleOwner
SetHardwareWatch
SetInterruptEvent
SetKMode
SetKernelAlarm
SetKeyboardTarget
SetLowestScheduledPriority
SetOEMCP
SetObjectOwner
SetPFHandle
SetPassword
SetPasswordActive
SetPowerOffHandler
SetProcPermissions
SetRealTime
SetRectRgn
SetShellHWnd
SetSystemDefaultLCID
SetSystemMemoryDivision
SetTimeZoneBias
ShellExecuteEx
ShellModalEnd
SignalStarted
StretchBlt
StringCompress
StringDecompress
SystemIdleTimerReset
SystemStarted
THCreateSnapshot
THGrow
TakeCritSec
ThisIsGwes
ThreadAttachAllDLLs
ThreadBaseFunc
ThreadDetachAllDLLs
TlsCall
TouchCalibrate
TranslateAcceleratorW
TransparentImage
TurnOffProfiling
TurnOffSyscallProfiling
TurnOnProfiling
TurnOnSyscallProfiling
U_rclose
U_rlseek
U_ropen
U_rread
U_rwrite
VerifyAPIHandle
VirtualCopy
VirtualQuery
WNetAddConnection3W
WNetDisconnectDialog1W
WNetGetConnectionW
WaitForDebugEvent
Win32AttachThreadInput
Win32CommandLineToArgvW
Win32CreateDCW
Win32DeleteDC
Win32DocumentPropertiesW
Win32ExtEscape
Win32GetDIBits
Win32GetMenuStringW
Win32GetSystemMetrics
Win32MessageBox
Win32OpenPrinterW
Win32RegCloseKey
Win32RegCreateKeyExW
Win32RegEnumKeyExW
Win32RegEnumValueW
Win32RegOpenKeyExW
Win32RegQueryInfoKeyW
Win32RegQueryValueExW
Win32RegSetValueExW
Win32SHAppBarMessage
Win32TrackPopupMenu
__abnormal_termination
_emulwtol
_except_handler3
_local_unwind2
_wcsdup
_wcsicmp
_wcslwr
_wcsnicmp
_wcsnset
_wcsrev
_wcsset
_wcsupr
_wtol
_wtoll
acmDriverAdd
acmDriverClose
acmDriverDetails
acmDriverEnum
acmDriverID
acmDriverMessage
acmDriverOpen
acmDriverPriority
acmDriverRemove
acmFilterChoose
acmFilterDetails
acmFilterEnum
acmFilterTagDetails
acmFilterTagEnum
acmFormatChoose
acmFormatDetails
acmFormatEnum
acmFormatSuggest
acmFormatTagDetails
acmFormatTagEnum
acmGetVersion
acmMetrics
acmStreamClose
acmStreamConvert
acmStreamMessage
acmStreamOpen
acmStreamPrepareHeader
acmStreamReset
acmStreamSize
acmStreamUnprepareHeader
emulDeleteCriticalSection
emulEnterCriticalSection
emulGetModuleFileNameW
emulInitializeCriticalSection
emulLeaveCriticalSection
emulSendShellMessage
iswctype
keybd_event
lineAddProvider
lineClose
lineConfigDialogEdit
lineDeallocateCall
lineDrop
lineGetDevCaps
lineGetDevConfig
lineGetID
lineGetTranslateCaps
lineInitialize
lineMakeCall
lineNegotiateAPIVersion
lineOpen
lineSetDevConfig
lineSetStatusMessages
lineShutdown
lineTranslateAddress
lineTranslateDialog
lstrcmpW
lstrcmpiW
mbstowcs
memchr
mouse_event
sndPlaySoundW
towlower
towupper
waveInAddBuffer
waveInClose
waveInGetDevCaps
waveInGetErrorText
waveInGetID
waveInGetNumDevs
waveInGetPosition
waveInMessage
waveInOpen
waveInPrepareHeader
waveInReset
waveInStart
waveInStop
waveInUnprepareHeader
waveOutBreakLoop
waveOutClose
waveOutGetDevCaps
waveOutGetErrorText
waveOutGetID
waveOutGetNumDevs
waveOutGetPitch
waveOutGetPlaybackRate
waveOutGetPosition
waveOutGetVolume
waveOutMessage
waveOutOpen
waveOutPause
waveOutPrepareHeader
waveOutReset
waveOutRestart
waveOutSetPitch
waveOutSetPlaybackRate
waveOutSetVolume
waveOutUnprepareHeader
waveOutWrite
wcscat
wcschr
wcscmp
wcscpy
wcscspn
wcslen
wcsncat
wcsncmp
wcsncpy
wcspbrk
wcsrchr
wcsspn
wcsstr
wcstok
wcstombs
wsprintfW
wvsprintfW