Toon posts:

[VB6] ruzie met m'n registry

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor mijn VB6 applicatie wil ik het pad naar AcroRd32.exe (Acrobat reader dus) opzoeken in mijn registry.

Nu weet ik dat ik deze key moet hebben:

code:
1
HKEY_LOCAL_MACHINE\Software\Classes\Applications\AcroRd32\shell\open\command\


De value die daarin staat wil ik dus hebben. Nu begrijp ik eigenlijk vrij weinig van de RegOpenKeyEx en de RegQueryValue functies.

Kan iemand mij misschien een schop in de goede richting geven?

code:
1
2
RetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Classes\Applications\" & _
AcroRd32\shell\open\command\", 0&, KEY_ALL_ACCESS, hKey)


Deze functie zou nu toch de resulterende key in hKey op moeten leveren en deze moet ik dan uitlezen met RegQueryValue?

Bij uitvoer levert hij echter de errorcode '2' op, maar op MSDN heb ik niet kunnen vinden waar dit nummer voor staat (alleen de namen van de constanten), maar ik gok dat dat een 'key not found' is?


/edit 1
Sorry voor het verneuken van de layout, heb het een beetje beperkt en zo is het nog goed te lezen.

/edit 2
Hmmm AcroRd32 in de key, daar moet dus nog .exe achter |:( Da krijg ik wel netjes een 0 geretourneerd in de RetVal, maar het lukt me nog steeds niet om nu de value van de key te voorschijn te toveren...

[ Voor 28% gewijzigd door Verwijderd op 20-12-2002 08:13 ]


Verwijderd

Wellicht dat je aan het volgende artikel iets hebt: http://builder.com.com/ar...820011105adm01.htm&page=1

Enjoy :)

Verwijderd

Topicstarter
Hey thanks!

Denk dat ik hier wel iets aan heb. Eerst moet ik dus kijken hoe groot de value is (aantal chars) voor ik hem kan lezen. Even proberen straks.

Verwijderd

Je moet een string vullen met 255 spaties en die string laten vullen met het resultaat van de functie...

Verwijderd

Topicstarter
Verwijderd schreef op 20 December 2002 @ 09:36:
Je moet een string vullen met 255 spaties en die string laten vullen met het resultaat van de functie...
Dat kan, maar efficiënter in geheugengebruik is natuurlijk om eerst te kijken hoe groot de value is en dan met Space(value-grootte) een string van spaties aan te maken.

Maar het werkt nu dus allemaal perfect! Woohoo :)

[ Voor 7% gewijzigd door Verwijderd op 20-12-2002 09:44 ]


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Global Const REG_SZ As Long = 1
Global Const REG_DWORD As Long = 4

Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003

Global Const ERROR_NONE = 0
Global Const ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global Const ERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global Const ERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global Const ERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
Global Const ERROR_INVALID_PARAMETERS = 87
Global Const ERROR_NO_MORE_ITEMS = 259

Global Const KEY_ALL_ACCESS = &H3F

Global Const REG_OPTION_NON_VOLATILE = 0

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey 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, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition 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 RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)

Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
' Description:
'   This Function will return the data field of a value
'
' Syntax:
'   Variable = QueryValue(Location, KeyName, ValueName)
'
'   Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
'   , HKEY_USERS
'
'   KeyName is the key that the value is under (example: "Software\Microsoft\Windows\CurrentVersion\Explorer")
'
'   ValueName is the name of the value you want to access (example: "link")

       Dim lRetVal As Long         'result of the API functions
       Dim hKey As Long         'handle of opened key
       Dim vValue As Variant      'setting of queried value


       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
       lRetVal = QueryValueEx(hKey, sValueName, vValue)
       'MsgBox vValue
       QueryValue = vValue
       RegCloseKey (hKey)
End Function

Nu kan je queryvalue(HKEY_lOCAL_MACHINE,"Software\Classes\Applications\AcroRd32\shell\open\command\","") doen in een of andere sub.... e voila... succes ermee!

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

btw sorry van het verneuken van de layout!
Pagina: 1