[VB.net] Registrykeys toevoegen met RegCreateKeyEx

Pagina: 1
Acties:

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Ik ben net begonnen met VB dus het kan zijn dat ik iets heel banaals over het hoofd ziet, maar het lukt me gewoon niet om een key toe te voegen aan het register.

Ik heb dit zover:
code:
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
Public Enum regPredefinedKey
    HKEY_CLASSES_ROOT = &H80000000
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
    HKEY_USERS = &H80000003
End Enum

Public Enum regError
    ERROR_SUCCESS = 0
    ERROR_ACCESS_DENIED = 8
    ERROR_INVALID_PARAMETERS = 87
    ERROR_NO_MORE_ITEMS = 259
    // bla bla bla bla nog meer
End Enum

Const KEY_ALL_ACCESS As Long = &H3F
Const REG_OPTION_NON_VOLATILE = 0

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, _
ByVal phkResult As Long, _
ByVal lpdwDisposition As Long) As Long

Het vreemde is ook dat bij phkResult en lpdwDisposition ByVal er altijd bij komt te staan, ook verwijder ik het??

De code die iets toe zou moeten voegen is het volgende ongeveer"
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim hNewKey As Long         '-- Handle to the new key
Dim lRetVal As Long         '-- Result of the RegCreateKeyEx function

lRetVal = RegCreateKeyEx(regPredefinedKey.HKEY_CURRENT_USER, _
"Software\AAAAA", _
0&, _
vbNullString, _
REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, _
0&, _
hNewKey, _
lRetVal)
If lRetVal <> regError.ERROR_SUCCESS Then
    MsgBox("Unable to create key")
End If


Als ik dit draai, krijg lRetVal de waarde 5317272591663191 dus iets gaat zeker fout, de registry key verschijnt dan ook niet. Ik heb al een heleboel voorbeeldcode geprobeerd, maar geen een werkte. Er moet wel RegCreateKeyEx gebruikt worden, dus geen WSH, of de .NET framework registry functies.

[ Voor 9% gewijzigd door Darkvater op 25-02-2004 00:46 ]


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Er moet wel RegCreateKeyEx gebruikt worden, dus geen WSH, of de .NET framework registry functies.
waarom niet de .Net registry functions? En heb je uberhaupt wel access voor het registry?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
gorgi_19 schreef op 25 februari 2004 @ 00:42:
[...]

waarom niet de .Net registry functions? En heb je uberhaupt wel access voor het registry?
Ik heb natuurlijk access tot de registry. Kan met de hand zo dingen erin stoppen en eruithalen. Ik wil geen .NET registry functions omdat het gewoon zo moet werken en de code bij iemand anders die geen .NET heeft dan niet werkt.


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 20-05 00:48

ZaZ

Tweakers abonnee

Visual Basic:
1
2
3
Public Const ERROR_SUCCESS = 0&
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Public Sub CreateKey(hKey As Long, strPath As String)
Dim hCurKey As Long
Dim lRegResult As Long

lRegResult = RegCreateKey(hKey, strPath, hCurKey)

If lRegResult <> ERROR_SUCCESS Then
  MsgBox "Boem, fout, crash, knal" , vbCritical
End If

lRegResult = RegCloseKey(hCurKey)

zou denk ik wel moeten werken

End Sub

edit:

dit is wel vb6 code. ik heb nog geen .NET gebruikt :S moet ik nog aan beginnen

[ Voor 12% gewijzigd door ZaZ op 25-02-2004 01:12 ]

Lekker op de bank


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
:?
Waarom zet je VB.NET in de titel als je niet met VB.NET wilt werken?

Als je een .NET applicatie schrijft, en iemand heeft de .NET runtime niet, dan zal je applicatie zowiezo niet starten. Je moet bij het installatieproces van je app dan checken of de gebruiker het .NET runtime heeft staan, en indien hij dat niet heeft, moet het mee geinstalleerd worden.

https://fgheysels.github.io/


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
ZaZ schreef op 25 februari 2004 @ 01:11:
Visual Basic:
1
..


edit:

dit is wel vb6 code. ik heb nog geen .NET gebruikt :S moet ik nog aan beginnen
Als ik dit draai krijg ik het volgende error op het moment dat ik RegCreateKey uitvoer:
Visual Basic:
1
2
3
An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication1.exe

Additional information: Object reference not set to an instance of an object.


Ik heb VB.Net neergezet omdat ik VB.Net heb, en geen VB6. Maar is het niet mogelijk om een VB6 compatibel applicatie te maken met VB.Net zonder de .Net runtime te installeren dan?

[ Voor 38% gewijzigd door Darkvater op 25-02-2004 09:46 ]


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Darkvater schreef op 25 februari 2004 @ 09:45:
[...]


Ik heb VB.Net neergezet omdat ik VB.Net heb, en geen VB6. Maar is het niet mogelijk om een VB6 compatibel applicatie te maken met VB.Net zonder de .Net runtime te installeren dan?
Nee :) je zult het .Net framework mee moeten leveren.

Ik begrijp trouwens niet waarom iedereen heel veel mensen daar zo moeilijk over doen.

[ Voor 3% gewijzigd door P_de_B op 25-02-2004 09:52 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
P_de_B schreef op 25 februari 2004 @ 09:50:
[...]


Nee :) je zult het .Net framework mee moeten leveren.

Ik begrijp trouwens niet waarom iedereen daar zo moeilijk over doet.
Ah, dus als het moet, dan moet het, maar betekent het ook dan dat ik via de Windows API geen registry keys kan aanmaken, bewerken? Lijkt me erg vreemd :?


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Oh, dat kan je wel hoor.... Via de Win API reg keys gaan aanmaken, maar als je dan toch VB.NET of C# gebruikt, waarom zou je dan zo moeilijk gaan doen, als je die classes toch al tot je beschikking hebt.
Maar ook al roep je die api methods aan, dan nog heb je de .NET runtime nodig.

https://fgheysels.github.io/


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
whoami schreef op 25 februari 2004 @ 09:56:
Oh, dat kan je wel hoor.... Via de Win API reg keys gaan aanmaken, maar als je dan toch VB.NET of C# gebruikt, waarom zou je dan zo moeilijk gaan doen, als je die classes toch al tot je beschikking hebt.
Maar ook al roep je die api methods aan, dan nog heb je de .NET runtime nodig.
Ah, ok. Dat is dan duidelijk. Maar waarom lukken de API calls dan niet?
* Darkvater wil het graag via de API's doen


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Darkvater schreef op 25 februari 2004 @ 12:11:
[...]

Ah, ok. Dat is dan duidelijk. Maar waarom lukken de API calls dan niet?
* Darkvater wil het graag via de API's doen
API-calls kan je perfect doen; .net zal intern ze ook aanroepen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Darkvater schreef op 25 februari 2004 @ 12:11:
[...]

Ah, ok. Dat is dan duidelijk. Maar waarom lukken de API calls dan niet?
* Darkvater wil het graag via de API's doen
Ik denk als jij je source even debugged dat je het wel aan de praat krijgt. Kijk is naar je exception, pluis deze is uit en watch is ff mee tijdens de uitvoering van het stukkie code. Ik denk dat je dan vanzelf wel tegen het obstakel stuit die deze exception veroorzaakt en dat je dit dan ook wel weer kunt oplossen! B)

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Verwijderd schreef op 25 februari 2004 @ 12:27:
[...]


Ik denk als jij je source even debugged dat je het wel aan de praat krijgt. Kijk is naar je exception, pluis deze is uit en watch is ff mee tijdens de uitvoering van het stukkie code. Ik denk dat je dan vanzelf wel tegen het obstakel stuit die deze exception veroorzaakt en dat je dit dan ook wel weer kunt oplossen! B)
Als ik dit draai, krijg lRetVal de waarde 5317272591663191 dus iets gaat zeker fout, de registry key verschijnt dan ook niet
Ik heb het al gedebugged. Ik kan met visual basic niet echt in die windows API zelf kijken. Maar als je een goed idee hebt om me verder te helpen, hoor ik het graag :)


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


Verwijderd

Bij welke statement klapt hij precies op ze bek?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

gorgi_19 schreef op 25 februari 2004 @ 12:21:
[...]

API-calls kan je perfect doen; .net zal intern ze ook aanroepen.
op Longhorn niet, dan is het weer andersom ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Verwijderd schreef op 25 februari 2004 @ 13:09:
Bij welke statement klapt hij precies op ze bek?
Visual Basic:
1
2
3
4
5
6
7
8
9
lRetVal = RegCreateKeyEx(regPredefinedKey.HKEY_CURRENT_USER, _
"Software\AAAAA", _
0&, _
vbNullString, _
REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, _
0&, _
hNewKey, _
lRetVal)

Hier zou de return value 0 moeten zijn, maar ik krijg een heel andere nummer. En het zou gewoon goed moeten zijn.


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja uh dat hele andere nummer geeft nou juist de error aan, dat geeft je misschien ietwat meer inzicht in wat er fout is, denk je ook niet? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
.oisyn schreef op 25 februari 2004 @ 15:58:
Ja uh dat hele andere nummer geeft nou juist de error aan, dat geeft je misschien ietwat meer inzicht in wat er fout is, denk je ook niet? :)
Ik weet niet of ik het goed heb, maar
Visual Basic:
1
Win32Error = System.Runtime.InteropServices.Marshal.GetLastWin32Error()

geeft error code 126, wat "The specified module could not be found." zou moeten zijn. Maar waarom vindt ie het niet dan?


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Sorry voor de kick, maar weet iemand waarom ik deze melding krijg?

Ik krijg ook dezelfde error met RegOpenKeyEx bijvoorbeeld. Echt weird

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
    Declare Function RegOpenKeyEx Lib "Advapi32" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, _
ByVal phkResult As Long) As Long

lRetVal = RegOpenKeyEx(regPredefinedKey.HKEY_CURRENT_USER, _
"Software\LIRC", _
0&, _
KEY_ALL_ACCESS, _
hNewKey)



edit:
Hmm, laat maar, nu krijg ik wel een goed errorstring terug :) , maar nog steeds error met RegCreateKeyEx(). Onderstaand stukje kan je negeren


Zowiezo is VB.Net een beetje vreemd met Windows API's lijkt me. Ik heb namelijk bovenstaand error op willen vragen met:


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private Declare  Function FormatMessage Lib "kernel32" Alias _
"FormatMessageA" (ByVal dwFlags As Integer, _
ByRef lpSource As Object, _
ByVal dwMessageId As Integer, _
ByVal dwLanguageId As Integer, _
ByVal lpBuffer As String, _
ByVal nSize As Integer, _
ByRef Arguments As Integer) As Integer
    Const FORMAT_MESSAGE_FROM_SYSTEM As Short = &H1000S
    Const LANG_NEUTRAL As Short = &H0S
        lRetVal = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, Win32Error, LANG_NEUTRAL, Buffer, 255, 0)
        Debug.WriteLine(Buffer.Trim)

en dan zit er in Buffer "☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺"
En dan maakt het niet uit of ik de error opvraag met
Visual Basic:
1
2
3
Win32Error = Err.LastDllError()
' of
Win32Error = System.Runtime.InteropServices.Marshal.GetLastWin32Error()

[ Voor 52% gewijzigd door Darkvater op 28-02-2004 09:41 . Reden: ook met RegopenKeyEx ]


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Ik blijf me afvragen waarom je het moeilijk wilt doen, en die API wilt gebruiken terwijl .NET er kan en klare classes voor heeft.

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Lijkt me ook een beetje moeilijkdoenerij om het moeilijk doen. Met de .NET functies heb je het in een paar regels voor elkaar, op de win32 manieren moet je native win32 data kunnen aanleveren en dat kan soms een probleem zijn.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Misschien lijkt het moeilijk. Het hele verhaal is eigenlijk dat ik het voor iemand wou maken met VB6, en daar heb je dus geen .NET functies.

Maar ik geef het nu op, ook nadat ik op verscheiden fora heb gelezen dat die API functies niet meer supported zijn in VB.NET. Wel klote


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Waarom bouw je het dan niet in VB6? Het in VB.NET bouwen heeft geen zin. In VB6 kun je het wellicht wel klaren.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
EfBe schreef op 28 februari 2004 @ 12:05:
Waarom bouw je het dan niet in VB6? Het in VB.NET bouwen heeft geen zin. In VB6 kun je het wellicht wel klaren.
Ik heb geen VB6 :X
Maar je zou toch niet denken dat het zoveel verschilt? Ik vind het maar vreemd. De functie wordt zelf herkend, maar gebruiken, hooo maar!


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
VB6 en VB.NET zijn een wereld van verschil. De enige gelijkenis zit 'm in de naam, en een beetje in de syntax.

Ik snap ook niet wat je bedoeld met 'ik wou het maken voor iemand met VB6' :? Jouw VB.NET code gaat niet in een VB6 programma runnen hoor.

https://fgheysels.github.io/


Verwijderd

Gratis oplossing voor VB: http://www.freebyte.com/programming/compilers/envelop.html

Ik heb het zelf niet getest. Heb alleen even voor je gezocht.
Pagina: 1