Hello,

> Does anybody know how I can read Registry Values from a MapBasic
> Application?

You have to declare API functions and constants:

Declare Function RegOpenKey Lib "ADVAPI32.DLL" Alias "RegOpenKeyA" (ByVal hKey As 
Integer, ByVal SubKey As String, pResult As
Integer) As Integer
Declare Function RegCreateKey Lib "ADVAPI32.DLL" Alias "RegCreateKeyA" (ByVal hKey As 
Integer, ByVal SubKey As String, pResult As
Integer) As Integer
Declare Function RegCloseKey Lib "ADVAPI32.DLL" (ByVal hKey As Integer) As Integer
Declare Function RegQueryValueEx Lib "ADVAPI32.DLL" Alias "RegQueryValueExA" (ByVal 
hKey As Integer, ByVal ValueName As String,
ByVal Res1 As Integer, EntryType As Integer, EntryVal As String, lpcbData As Integer) 
As Integer
Declare Function RegQueryNumberEx Lib "ADVAPI32.DLL" Alias "RegQueryValueExA" (ByVal 
hKey As Integer, ByVal ValueName As String,
ByVal Res1 As Integer, EntryType As Integer, NumVal As Integer, lpcbData As Integer) 
As Integer
Declare Function RegQueryValueType Lib "ADVAPI32.DLL" Alias "RegQueryValueExA" (ByVal 
hKey As Integer, ByVal ValueName As String,
ByVal Res1 As Integer, EntryType As Integer, ByVal EntryVal As Integer, lpcbData As 
Integer) As Integer
Declare Function RegSetValueEx Lib "ADVAPI32.DLL" Alias "RegSetValueExA" (ByVal hKey 
As Integer, ByVal ValueName As String, ByVal
Res1 As Integer, ByVal EntryType As Integer, ByVal EntryVal As String, ByVal lpcbData 
As Integer) As Integer
Declare Function RegSetNumberEx Lib "ADVAPI32.DLL" Alias "RegSetValueExA" (ByVal hKey 
As Integer, ByVal ValueName As String, ByVal
Res1 As Integer, ByVal EntryType As Integer, EntryVal As Integer, ByVal lpcbData As 
Integer) As Integer

Possible values for EntryType parameter:

Define REG_SZ                           1
Define REG_DWORD                        4

Values for root keys:

Define HKEY_CLASSES_ROOT        -2147483648
Define HKEY_CURRENT_USER        -2147483647
Define HKEY_LOCAL_MACHINE       -2147483646
Define HKEY_USERS               -2147483645
Define HKEY_PERFORMANCE_DATA    -2147483644
Define HKEY_PERFORMANCE_TEXT    -2147483568
Define HKEY_PERFORMANCE_NLSTEXT -2147483552

Examples of functions usage:

Function GetRegistryString(ByVal hKey As Integer, ByVal sEntry As String) As String
  Dim EntryType, EntryLen As Integer, EntryVal As String
  Dim NumVal As Integer

  If RegQueryValueType(hKey, sEntry, 0, EntryType, 0, EntryLen) <> 0 Then
        Goto HandleError
  End If

  Do Case EntryType
        Case REG_SZ
          EntryVal = Str$(EntryLen+1)
          If RegQueryValueEx(hKey, sEntry, 0, EntryType, EntryVal, EntryLen) <> 0 Then
                Goto HandleError
          End If
          EntryVal = RTrim$(EntryVal)
          GetRegistryString = EntryVal
        Case REG_DWORD
          If RegQueryNumberEx(hKey, sEntry, 0, EntryType, NumVal, EntryLen) <> 0 Then
                Goto HandleError
          End If
          GetRegistryString = Str$(NumVal)
        Case Else
          Goto HandleError
  End Case

  Exit Function
HandleError:
  GetRegistryString = ""
End Function

Sub SetRegistryString(ByVal hKey As Integer, ByVal sEntry As String, ByVal 
sEntryString As String)
  Dim r As Integer
  r = RegSetValueEx(hKey, sEntry, 0, REG_SZ, sEntryString, Len(sEntryString) + 1)
End Sub

Sub SetRegistryInt(ByVal hKey As Integer, ByVal sEntry As String, ByVal iEntryInt As 
Integer)
  Dim r As Integer
  r = RegSetNumberEx(hKey, sEntry, 0, REG_DWORD, iEntryInt, 4)
End Sub

You get value of hKey by calling:

  Dim hMyKey As Integer
  If RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows Help", hMyKey) <> 0 Then
' take some actions on failure
  End If

Please let me know if anything is unclear in my description.

Dmitry

Dmitry Bogdanov
GIS Department Manager
Kiev Software Factory Ltd.
room 46 9/12 Baumana St, Kiev, Ukraine 252190
Tel: (380 44) 442-6077; (380 44) 443-7925
Fax: (380 44) 443-7925
Internet: http://www.ksf.kiev.ua

----------------------------------------------------------------------
To unsubscribe from this list, send e-mail to [EMAIL PROTECTED] and put
"unsubscribe MAPINFO-L" in the message body, or contact [EMAIL PROTECTED]

Reply via email to