Проблема с RegOpenKeyEx магия какая то просто

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Павел C
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 31.01.2005 (Пн) 14:39

Проблема с RegOpenKeyEx магия какая то просто

Сообщение Павел C » 31.01.2005 (Пн) 14:44

никак не могу понять почему после перезагрузки компьютера данная функция выдает 87 ошибку(invalid parameters) (стучусь по значениям
sFirstKey = HKEY_LOCAL_MACHINE
sSubKey=SOFTWARE\\Microsoft\\Visual Basic\\6.0
в функцию verinstalprogam (ее листинг ниже) VerInstProgram(sFirstKey As String, sSubKey As String) As Integer
но как только открываю через выполнить REGEDIT и ключ смотрю а потом закрываю regedit (или даже при открытом)
программа нормально считывает этот ключ.

собственно листинг модуля


Option Explicit
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Long) As Long
Private 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
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
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 READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const STANDARD_RIGHTS_READ = READ_CONTROL
Const STANDARD_RIGHTS_WRITE = READ_CONTROL
Const STANDARD_RIGHTS_EXECUTE = READ_CONTROL
Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY
Const KEY_EXECUTE = KEY_READ
Public Function ReadFromINI(ByVal sNameOfINIFile As String, _
ByVal sSection As String, _
ByVal sKey As String, _
Optional ByVal sdefault As String = "Not have value") As String
' Function returns key value from INI file, if key not exist function return "Not have value" as string
Dim MyString As String

MyString = Space(100)

If GetPrivateProfileString(sSection, sKey, sdefault, MyString, Len(MyString), sNameOfINIFile) > 0 Then
ReadFromINI = Left$(MyString, InStr(MyString, Chr$(0)) - 1)
Else
ReadFromINI = sdefault
End If
End Function

Public Function VerInstProgram(sFirstKey As String, sSubKey As String) As Integer
' function return code "0" if key are created
' return code "1" if key are not created
' return code "2" if error in process and create a message with code of error
Dim TmpFlag As Long
Dim hkey As Variant
Dim lCodeOfFirstKey As Long
lCodeOfFirstKey = lCalculateFirstKey(sFirstKey)
If lCodeOfFirstKey = 0 Then
MsgBox "This key not avialable, you must input correct key in INI File"
VerInstProgram = 2
Exit Function
End If
TmpFlag = RegOpenKeyEx(lCodeOfFirstKey, sSubKey, 0, READ_CONTROL, hkey)
If TmpFlag = 0 Then
VerInstProgram = 0
ElseIf TmpFlag = 2 Then
VerInstProgram = 1
Else
MsgBox "Код ошибки" & TmpFlag
VerInstProgram = 2
End If
RegCloseKey (hkey)
End Function
Public Function lCalculateFirstKey(ByVal KeyValue As String) As Long
' function returns code of First Registry Key
' if [in] variable are bad, then function returns 0
Select Case KeyValue
Case "HKEY_CLASSES_ROOT"
lCalculateFirstKey = &H80000000
Case "HKEY_CURRENT_USER"
lCalculateFirstKey = &H80000001
Case "HKEY_LOCAL_MACHINE"
lCalculateFirstKey = &H80000002
Case "HKEY_USERS"
lCalculateFirstKey = &H80000003
Case "HKEY_PERFORMANCE_DATA"
lCalculateFirstKey = &H80000004
Case "HKEY_CURRENT_CONFIG"
lCalculateFirstKey = &H80000005
Case "HKEY_DYN_DATA"
lCalculateFirstKey = &H80000006
Case Else
lCalculateFirstKey = 0
End Select
End Function

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.01.2005 (Пн) 14:59

Зайди в Наши проекты, глянь Registry. Там, по-моему, та же ошибка была. Связанная с существованием дефолтового ключа...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 12

    TopList  
cron