Attribute VB_Name = "ErrorMessage" Option Explicit ' ERRORMESSAGE.DLL DECLARATIONS ' ' Declare ErrorMessage functions Public Declare Function ReportStdError _ Lib "ErrorShell.DLL" _ (ByVal hAppKey As Long, ByVal errNumber As Long, _ ByVal errType As ErrorType, ByVal delay As Long, _ ByVal szMsg As String, ByVal scCaptions As String, _ ByVal szTitle As String) As RESULTTYPE Public Declare Sub ReportPopup _ Lib "ErrorShell.DLL" _ (ByVal delay As Long, ByVal wAlign As Long, _ ByVal xPos As Long, ByVal yPos As Long, _ ByVal szMsg As String) ' Declare dialog types Public Enum ErrorType NULL_ERROR 'no error USER_ERROR Information NON_CRITICAL SEVERE_ERROR RETRY_ERROR POPUP_MESSAGE 'special for popup window End Enum ' Declare return values Public Const IDOK = 1 Public Const IDCANCEL = 2 Public Enum RESULTTYPE RESULT_OK = IDOK RESULT_LOG_LOCAL RESULT_REPORT_ERROR RESULT_CANCEL = IDCANCEL End Enum ' Declare wAlign argument of ReportPopup function Public Enum POPUP_ALIGNMENT POPUP_TOP = 0 'default position is reference point above POPUP_LEFT = 0 'default position is reference point at left POPUP_RIGHT = 2 POPUP_BOTTOM = 4 End Enum ' ' REGISTRY DECLARATIONS FOR LOGGING ' ' Registry Open Functions Declare Function RegOpenKey Lib "advapi32.dll" _ Alias "RegOpenKeyA" _ (ByVal hKey As Long, ByVal lpctstr As String, _ phkey As Long) As Long Declare Function RegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" _ (ByVal hKey As Long, ByVal lpSubkey As String, _ ByVal ulOptions As Long, ByVal samDesired As Long, _ phkResult As Long) As Long Declare Function RegCreateKey Lib "advapi32.dll" _ Alias "RegCreateKeyA" _ (ByVal hKey As Long, ByVal lpctstr As String, _ phkey As Long) As Long Declare Function RegCreateKeyEx Lib "advapi32.dll" _ Alias "RegCreateKeyExA" _ (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 Any, phkResult As Long, _ lpdwDisposition As Long) As Long Declare Function RegConnectRegistry Lib "advapi32.dll" _ Alias "RegConnectRegistryA" _ (ByVal lpMachineName As String, ByVal hKey As Long, _ phkResult As Long) As Long ' Value retrieval functions Declare Function RegQueryValue Lib "advapi32.dll" _ Alias "RegQueryValueA" _ (ByVal hKey As Long, ByVal lpSubkey As String, _ ByVal lpValue As String, pcbData As Long) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" _ (ByVal hKey As Long, ByVal lpszValueName As String, _ ByVal lpdwReserved As Long, lpdwType As Long, _ lpData As Any, lpcbData As Long) As Long ' Value setting functions Declare Function RegSetValue Lib "advapi32.dll" _ Alias "RegSetValueA" _ (ByVal hKey As Long, ByVal lpSubkey As String, _ ByVal dwType As Long, ByVal lpData As String, _ ByVal cbData As Long) As Long Declare Function RegSetValueEx Lib "advapi32.dll" _ Alias "RegSetValueExA" _ (ByVal hKey As Long, ByVal lpValueName As String, _ ByVal Reserved As Long, ByVal dwType As Long, _ lpData As Any, ByVal cbData As Long) As Long ' Deletion functions Declare Function RegDeleteKey Lib "advapi32.dll" _ Alias "RegDeleteKeyA" _ (ByVal hKey As Long, ByVal lpszSubkey As String) _ As Long Declare Function RegDeleteValue Lib "advapi32.dll" _ Alias "RegDeleteValueA" _ (ByVal hKey As Long, ByVal lpValueName As String) _ As Long ' Close registry key Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long ' Structures Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Boolean End Type ' for WinNT security functions only Type ACL AclRevision As Byte Sbz1 As Byte AclSize As Integer AceCount As Integer Sbz2 As Integer End Type ' for WinNT security functions only Type SECURITY_DESCRIPTOR Revision As Byte Sbz1 As Byte Control As Long Owner As Long Group As Long Sacl As ACL Dacl As ACL End Type ' Constants for Registry top-level keys Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_DYN_DATA = &H80000006 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_USERS = &H80000003 ' Return values Public Const ERROR_SUCCESS = 0& Public Const ERROR_FILE_NOT_FOUND = 2& Public Const ERROR_ACCESS_DENIED = 5& Public Const ERROR_INVALID_HANDLE = 6& Public Const ERROR_INVALID_PARAMETER = 87 Public Const ERROR_CALL_NOT_IMPLEMENTED = 120& Public Const ERROR_INSUFFICIENT_BUFFER = 122 Public Const ERROR_MORE_DATA = 234 Public Const ERROR_NO_MORE_ITEMS = 259& Public Const ERROR_CANTOPEN = 1011& Public Const ERROR_CANTREAD = 1012& Public Const ERROR_CANTWRITE = 1013& Public Const ERROR_REGISTRY_RECOVERED = 1014& Public Const ERROR_REGISTRY_CORRUPT = 1015& Public Const ERROR_REGISTRY_IO_FAILED = 1016& Public Const ERROR_NOT_REGISTRY_FILE = 1017& Public Const ERROR_KEY_DELETED = 1018& ' RegCreateKeyEx options Public Const REG_OPTION_NON_VOLATILE = 0 Public Const REG_OPTION_VOLATILE = 1 ' RegCreateKeyEx Disposition Public Const REG_CREATED_NEW_KEY = &H1 Public Const REG_OPENED_EXISTING_KEY = &H2 ' Registry data types Public Const REG_NONE = 0 Public Const REG_SZ = 1 Public Const REG_EXPAND_SZ = 2 Public Const REG_BINARY = 3 Public Const REG_DWORD = 4 Public Const REG_DWORD_LITTLE_ENDIAN = 4 Public Const REG_DWORD_BIG_ENDIAN = 5 Public Const REG_LINK = 6 Public Const REG_MULTI_SZ = 7 Public Const REG_RESOURCE_LIST = 8 Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9 Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10 ' Registry security attributes Public Const READ_CONTROL = &H20000 Public Const STANDARD_RIGHTS_READ = (READ_CONTROL) Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL) Public Const KEY_QUERY_VALUE = &H1 Public Const STANDARD_RIGHTS_ALL = &H1F0000 Public Const KEY_SET_VALUE = &H2 Public Const KEY_CREATE_SUB_KEY = &H4 Public Const KEY_ENUMERATE_SUB_KEYS = &H8 Public Const KEY_NOTIFY = &H10 Public Const KEY_CREATE_LINK = &H20 Public Const SYNCHRONIZE = &H100000 Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) Public Const KEY_EXECUTE = (KEY_READ) Public 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)) ' Security constants (for WinNT only) Public Const OWNER_SECURITY_INFORMATION = &H1 Public Const GROUP_SECURITY_INFORMATION = &H2 Public Const DACL_SECURITY_INFORMATION = &H4 Public Const SACL_SECURITY_INFORMATION = &H8 ' Maximum path length Public Const MAX_PATH = 260