Is het met vb6 mogelijk iets te maken dat een waarde in het windows register kan veranderen?
en hoe doe je zoiets.
waarden in het registery aanpassen
- meon
- Administrator
- Berichten: 16609
- Lid geworden op: 18 feb 2003, 22:02
- Twitter: meon
- Locatie: Bree
- Uitgedeelde bedankjes: 564 keer
- Bedankt: 759 keer
- Contacteer:
Er wordt wel degelijk gevraagd hoe dat in Visual Basic 6 moet worden gedaan.
Bekijk dit voorbeeld eens: http://www.arcatapet.net/vbsource/regvb5.zip
Bekijk dit voorbeeld eens: http://www.arcatapet.net/vbsource/regvb5.zip
oke, ik heb da eens bekeken, maar ksnap er nie echt iets van, ik wil eigenlijk een programatje maken, met een tekstvak, waar ik iets kan invullen en als ik dan op een knop druk word er één bepaalde waarde in het register door die tekst vervangen.
maar kheb echt geen idee hoe da ik eraan moet beginnen.
maar kheb echt geen idee hoe da ik eraan moet beginnen.
-
- Elite Poster
- Berichten: 1158
- Lid geworden op: 03 maa 2004, 09:04
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 16 keer
Als je een willekeurige key (niet uit HKCU\Software\VB And VBA Program Settings) wil wijzigen, dan ga je echt wel je toevlucht moeten zoeken tot de Windows API functies. Lijkt Chinees in het begin, maar dat went wel.
Ik heb nog even VB6 geopend (best nog wel eens leuk na al die VS.NET ) en heb snel geschreven wat je hebt gevraagd.
Maak een nieuw project, voeg daar een form aan toe met 1 knop en 1 textbox.
De code van de form ziet er uit als volgt:
Option Explicit
Private Sub Command1_Click()
Dim oRegistry As New clsRegistry
oRegistry.SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", "User Agent", Text1.Text
Set oRegistry = Nothing
End Sub
Voeg een Class Module toe en noem deze clsRegistry, hierin kopieer je volgende code:
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 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
Private Const REG_SZ = 1
Private Const KEY_ALL_ACCESS = &H3F
Public Enum e_HKEY
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
End Enum
Public Sub SetKeyValue(KEY As e_HKEY, sKeyName As String, sValueName As String, vValueSetting As Variant)
Dim lretval As Long
Dim lhkey As Long
lretval = RegOpenKeyEx(KEY, sKeyName, 0, KEY_ALL_ACCESS, lhkey)
lretval = SetValueEx(lhkey, sValueName, REG_SZ, vValueSetting)
RegCloseKey lhkey
End Sub
Private Function SetValueEx(ByVal hkey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
sValue = vValue & Chr$(0)
SetValueEx = RegSetValueExString(hkey, sValueName, 0&, lType, sValue, Len(sValue))
End Function
Je hoeft dus gewoon maar deze functie aan te roepen vanuit je hoofdform. De parameters zijn
- KEY: HKEY_CLASSES_ROOT of HKEY_CURRENT_USER of HKEY_LOCAL_MACHINE of HKEY_USERS
- sKeyName: Naam van de key waarin je wil wijzigen
- sValueName: Waarde die je wil wijzigen
- sValueSetting: Nieuwe waarde
Ik heb nog even VB6 geopend (best nog wel eens leuk na al die VS.NET ) en heb snel geschreven wat je hebt gevraagd.
Maak een nieuw project, voeg daar een form aan toe met 1 knop en 1 textbox.
De code van de form ziet er uit als volgt:
Option Explicit
Private Sub Command1_Click()
Dim oRegistry As New clsRegistry
oRegistry.SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", "User Agent", Text1.Text
Set oRegistry = Nothing
End Sub
Voeg een Class Module toe en noem deze clsRegistry, hierin kopieer je volgende code:
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 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
Private Const REG_SZ = 1
Private Const KEY_ALL_ACCESS = &H3F
Public Enum e_HKEY
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
End Enum
Public Sub SetKeyValue(KEY As e_HKEY, sKeyName As String, sValueName As String, vValueSetting As Variant)
Dim lretval As Long
Dim lhkey As Long
lretval = RegOpenKeyEx(KEY, sKeyName, 0, KEY_ALL_ACCESS, lhkey)
lretval = SetValueEx(lhkey, sValueName, REG_SZ, vValueSetting)
RegCloseKey lhkey
End Sub
Private Function SetValueEx(ByVal hkey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
sValue = vValue & Chr$(0)
SetValueEx = RegSetValueExString(hkey, sValueName, 0&, lType, sValue, Len(sValue))
End Function
Je hoeft dus gewoon maar deze functie aan te roepen vanuit je hoofdform. De parameters zijn
- KEY: HKEY_CLASSES_ROOT of HKEY_CURRENT_USER of HKEY_LOCAL_MACHINE of HKEY_USERS
- sKeyName: Naam van de key waarin je wil wijzigen
- sValueName: Waarde die je wil wijzigen
- sValueSetting: Nieuwe waarde
Hey, bedankt om dees al helemaal voor mij uit te schrijven, maar ik werk nog maar net met vb6 en ik snap echt niet waar of welke parameters ik moet vervangen, ik zal even een simpel voorbeeld geven, stel ik wil de tekst die achter de titel in een internetbrowser veranderen, dan kan dat via deze key,
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\main\window title
hoe kan ik dat doen?
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\main\window title
hoe kan ik dat doen?
- Snakehit
- Elite Poster
- Berichten: 806
- Lid geworden op: 05 mei 2004, 15:37
- Locatie: Izegem, Belgie
- Contacteer:
dat zou ik dus niet doen hé
wat wil je maken?
Een browser?
dan mag je een ander map aanmaken. in het registry
ga naar Currenuser, Software, en dan maak daar een mapje
en das opgelost dan. setvalue daarin en das OK
dan kan je die waarden in vullen in Me.Text
want anders wordt het gevaarlijk als je zit in internet explorer, jij mag dat doen hoor van mij.
wat wil je maken?
Een browser?
dan mag je een ander map aanmaken. in het registry
ga naar Currenuser, Software, en dan maak daar een mapje
en das opgelost dan. setvalue daarin en das OK
dan kan je die waarden in vullen in Me.Text
want anders wordt het gevaarlijk als je zit in internet explorer, jij mag dat doen hoor van mij.
-
- Elite Poster
- Berichten: 1158
- Lid geworden op: 03 maa 2004, 09:04
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 16 keer
Neem misschien best wel even een backup van die waarde in je registry, alhoewel ik denk dat een Window Title niet zo veel gevolgen zal hebben...
Voor een backup ga je naar Start > Run (Start > Uitvoeren) en je typt daar regedit.
Je gaat naar de sleutel die je wil wijzigen. Je klikt op File > Export (Bestand > Exporteren) en daar kies je voor Selected Branch (Geselecteerde subsleutel), geef je een bestandsnaam op en save je.
Er is een Microsoft KB artikel rond het wijzigen van de title:
http://support.microsoft.com/?kbid=176497 (staat niet veel in)
Los van dit alles volstaat het om de call van de functie te wijzigingen in
oRegistry.SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Window Title", Text1.Text
Je splitst dus gewoon de key op in logische delen...
Als je nog maar net met VB6 begonnen bent zou ik je eigenlijk willen aanraden je energie te stoppen in VB.NET (daar zou je deze API's niet nodig gehad hebben). Want de overschakeling van VB6 naar VB.NET blijft niet beperkt tot gewoon een nieuwe versie van Visual Studio...
Voor een backup ga je naar Start > Run (Start > Uitvoeren) en je typt daar regedit.
Je gaat naar de sleutel die je wil wijzigen. Je klikt op File > Export (Bestand > Exporteren) en daar kies je voor Selected Branch (Geselecteerde subsleutel), geef je een bestandsnaam op en save je.
Er is een Microsoft KB artikel rond het wijzigen van de title:
http://support.microsoft.com/?kbid=176497 (staat niet veel in)
Los van dit alles volstaat het om de call van de functie te wijzigingen in
oRegistry.SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Internet Explorer\Main", "Window Title", Text1.Text
Je splitst dus gewoon de key op in logische delen...
Als je nog maar net met VB6 begonnen bent zou ik je eigenlijk willen aanraden je energie te stoppen in VB.NET (daar zou je deze API's niet nodig gehad hebben). Want de overschakeling van VB6 naar VB.NET blijft niet beperkt tot gewoon een nieuwe versie van Visual Studio...
Hey bedankt, het is gelukt.
wat is dan juist het verschil met vb 6 en vb.net?
Welke is het gemakelijkst, en wat kan ik met vb.net meer dan met vb6?
Greet
wat is dan juist het verschil met vb 6 en vb.net?
Welke is het gemakelijkst, en wat kan ik met vb.net meer dan met vb6?
Greet
- Snakehit
- Elite Poster
- Berichten: 806
- Lid geworden op: 05 mei 2004, 15:37
- Locatie: Izegem, Belgie
- Contacteer:
om het echt te gaan bekijken om uw app te verspreiden is VB6 beter
omdat je met VB.NET de .NET Framework moet geinstalleerd hebben.
VB.NET is wel iets nieuws, dus mijn visie is, je moet meegaan met de tijd, dus ben ik begonnen met VB.NET zon 1 jaar geleden voordien deed ik al zon jaar of 4 VB6, .NET is ook uitgebreider.
Mijn voorkeur gaat daarom naar .NET maar niet tegenstaanda dat VB6 met 1 klik een SETUP.EXE maakt waarbij VB.NET een hele weg afgelegd moet worden, van de programfiles map , tot het icoontje op de desktop.
omdat je met VB.NET de .NET Framework moet geinstalleerd hebben.
VB.NET is wel iets nieuws, dus mijn visie is, je moet meegaan met de tijd, dus ben ik begonnen met VB.NET zon 1 jaar geleden voordien deed ik al zon jaar of 4 VB6, .NET is ook uitgebreider.
Mijn voorkeur gaat daarom naar .NET maar niet tegenstaanda dat VB6 met 1 klik een SETUP.EXE maakt waarbij VB.NET een hele weg afgelegd moet worden, van de programfiles map , tot het icoontje op de desktop.
-
- Elite Poster
- Berichten: 1158
- Lid geworden op: 03 maa 2004, 09:04
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 16 keer
maarten schreef:Hey bedankt, het is gelukt.
wat is dan juist het verschil met vb 6 en vb.net?
Welke is het gemakelijkst, en wat kan ik met vb.net meer dan met vb6?
Greet
Er zijn een groot aantal verschillen tussen VB6 en VB.NET. Het grootste verschil is dat VB.NET OO is (object georiënteerd). De overstap van VB6 naar .NET kan je misschien best omschrijven als de overstap naar een nieuwe programmeertaal. Als je Java-kennis hebt, dan zal de overstap makkelijker te nemen zijn.
Om je een idee te geven, zo zou je programma er uit kunnen zien in VB.NET (Ik heb de Windows Form Generated Code achterwegen gelaten):
Imports Microsoft.Win32
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim regKey As RegistryKey = Registry.CurrentUser
Dim regSubKey As RegistryKey = regKey.OpenSubKey("Software\Microsoft\Internet Explorer\Main", True)
regSubKey.SetValue("Window Title", TextBox1.Text)
regSubKey.Close()
regKey.Close()
End Sub
End Class
Mmm, da ziet er wel een stukske gemakkelijker uit, mss dak daar maar eens mee gaan beginnen, maar ik heb wel geen ervaring met java, het zal wel weer niet meevallen.
- AnD
- Elite Poster
- Berichten: 3824
- Lid geworden op: 18 okt 2003, 12:29
- Locatie: Hasselt
- Uitgedeelde bedankjes: 393 keer
- Bedankt: 87 keer
khsw schreef:maarten schreef:Hey bedankt, het is gelukt.
wat is dan juist het verschil met vb 6 en vb.net?
Welke is het gemakelijkst, en wat kan ik met vb.net meer dan met vb6?
Greet
Er zijn een groot aantal verschillen tussen VB6 en VB.NET. Het grootste verschil is dat VB.NET OO is (object georiënteerd). De overstap van VB6 naar .NET kan je misschien best omschrijven als de overstap naar een nieuwe programmeertaal. Als je Java-kennis hebt, dan zal de overstap makkelijker te nemen zijn.
Om je een idee te geven, zo zou je programma er uit kunnen zien in VB.NET (Ik heb de Windows Form Generated Code achterwegen gelaten):
VB 6.0 is ook Object georienteerd want dat krijg je als eerste les, hoe werkt object georienteerd programmeren.
VB 6.0 is ook Object georienteerd want dat krijg je als eerste les, hoe werkt object georienteerd programmeren.
op de website van MS stond vroeger dat VB zelfs geen programmeertaal is,
maar een scriptingtaal
en eerlijk gezegd nu ik die code terugzie.. bweik nooit meer
-
- Elite Poster
- Berichten: 1158
- Lid geworden op: 03 maa 2004, 09:04
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 16 keer
AnD schreef:VB 6.0 is ook Object georienteerd want dat krijg je als eerste les, hoe werkt object georienteerd programmeren.
Als ik mij niet vergis wordt de basis van OO gelegd door:
Abstraction
Polymorfisme
Inheritance
Encapsulation
Allemaal "dure woorden", maar vraag eens aan jouw leraar hoe dit kan verwezelijkt worden met VB6 (probeer maar eens over te erven van een klasse of form zonder code te schrijven die niet meer onderhoudbaar is). Ik weet dat dikwijls gezegd wordt dat VB6 OO is, en ik geloofde dat vroeger ook. Tot de dag dat je in aanraking komt met Java of .NET...
[muggeziftersmode]
VB6 wordt eigenlijk "object based" genoemd ipv "object oriented", zie ook http://www.objectfaq.com/oofaq2/
[/muggeziftersmode]