Avatar billede lillholm Nybegynder
01. april 2004 - 08:31 Der er 5 kommentarer og
5 løsninger

Hent og gem fra registeringsdatabasen

Jeg har soegt lidt efter mit svar men er kommet frem til at den her er det mest brugbare http://www.eksperten.dk/spm/183370

Det med GetSetting og SaveSetting syntes jeg ikke rigtig jeg kan faa til at virke men har proevet det med den aboutbox. Syntes bare koden bliver ufattelig lang for saa lidt og saa kan jeg kun faa den til at hente fra Registeringsdatabasen.

Nogen der kan hjaelpe mig lidt med at finde en nemmere loesning og etv gi et eksempel der virker :)
Avatar billede vbcoder Nybegynder
01. april 2004 - 08:43 #1
prøv at søge på msdn.microsoft.com efter regobj.dll

der er en glimrende dokumentation med og denne dll giver adgang til alle steder i reg.basen og ikke kun i HKEY_CURRENT_USER\Software\VB and VBA Program Settings

Jeg kan godt komme med nogen fungerende eksempler også

//Vbcoder
Avatar billede midcom Nybegynder
01. april 2004 - 11:07 #3
Lav en form med

Private Sub Form_Load()
UserLogon = UCase(GetString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName"))

End Sub

Og et modul med
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal HKEY As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal HKEY As Long, ByVal lpValueName As String) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public UserLogon As String
Public Const REG_SZ = 1 ' Unicode nul terminated string
Public Const REG_DWORD = 4 ' 32-bit number
Public Function GetString(HKEY As Long, strPath As String, strValue As String)
    Dim keyhand As Long
    Dim datatype As Long
    Dim lResult As Long
    Dim strBuf As String
    Dim lDataBufSize As Long
    Dim intZeroPos As Integer
    r = RegOpenKey(HKEY, strPath, keyhand)
    lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&, lDataBufSize)
    If lValueType = REG_SZ Then
        strBuf = String(lDataBufSize, " ")
        lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf, lDataBufSize)
        If lResult = ERROR_SUCCESS Then
            intZeroPos = InStr(strBuf, Chr$(0))
            If intZeroPos > 0 Then
                GetString = Left$(strBuf, intZeroPos - 1)
            Else
                GetString = strBuf
            End If
        End If
    End If
End Function

I dette eks. henter jeg info på logon navn på bruger
Avatar billede martin_moth Mester
01. april 2004 - 11:55 #4
Jeg kunen heller ikke hitte ud af det engang, og fik det totalt penslet ud i følgende spørgsmål.

Det kræver ikke mere end een linie at læse fra regdatabasen, tilsvarende med at læse

http://www.eksperten.dk/spm/223426
Avatar billede martin_moth Mester
01. april 2004 - 11:57 #5
Fx:

'Læs:
  Text1.Text = GetSetting("Appname", "Setup", "Text", "Text1")

'Skriv
  SaveSetting "Appname", "Setup", "Text", Text1.Text

Og du kan bruge deletesetting til at slette
Avatar billede vbcoder Nybegynder
01. april 2004 - 14:13 #6
getsetting og den ekvivalente savesetting, getallsettings og deletesetting har dog den begrænsning at den kun skriver til et sted i reg.basen

regobj kan meget mere

download regobji.exe fra msdn og installer den.

start vb op og lav en standard exe projekt.

gå til projekt->references og indsæt en reference til

Registration Manipulation Class

Indsæt 2 trykknapper på formen bedst i øverste venstre hjørne
kald den ene cmdGem og sæt caption til Gem
kald den anden cmdHent og sæt caption til Hent

dobbeltklik på standard formen for at lukke kodevinduet op.

tryk Ctrl+A for at markere al eksisterende tekst og indsæt derefter flg.

derefter snipper du nedenstående ind i formen

'----snip start

Option Explicit

' opret en objektreference
Public objRegKey As RegKey
'opret en streng variabel til den relative rod for vores program
Dim strRelRoot As String
'opret en streng variabel til vores software
Dim strRegKey

Private Sub cmdGem_Click()
  'sæt vores reg.db objekt til roden af vores program navn
  Set objRegKey = RegKeyFromString(strRelRoot & strRegKey)
  With objRegKey
      'opret nøgler med værdier til vores placering af programmet
      .Values("Top") = Me.Top
      .Values("Left") = Me.Left
      .Values("Width") = Me.Width
      .Values("Height") = Me.Height
  End With
End Sub

Private Sub cmdHent_Click()
  'sæt objekt til at pege på vores nøgle
  Set objRegKey = RegKeyFromString(strRelRoot & strRegKey)
  'læs nøgler fra regbasen
  With objRegKey
      Me.Move .Values("Left"), .Values("Top"), .Values("Width"), .Values("Height")
  End With

End Sub

Private Sub Form_Load()
 
  'fordi vores nøgle skal ligge under software sektionen i localmachine
  strRelRoot = "\HKEY_LOCAL_MACHINE\Software\"
 
  'læg mærke til at vi i angiver både firmanavn og programnavn
  'fordi vi så får oprettet begge af en gang
  strRegKey = "Fusk&Klamp\MitProgram\"
 
  'hvis programmet ikke har været startet før findes data ikke
  'og vi får naturligvis en runtimefejl
  'denne fanger vi med on error goto
  On Error GoTo NoKeys
 
  'sæt objektet aktivt
  Set objRegKey = RegKeyFromString(strRelRoot & strRegKey)
 
  'her henter vi vores data
  'læs nøgler fra regbasen
  With objRegKey
      Me.Top = .Values("Top")
      Me.Left = .Values("Left")
      Me.Height = .Values("Height")
      Me.Width = .Values("Width")
  End With

ExitSubHere:
 
  Exit Sub
 
NoKeys:
  'reset til standard fejlhåndtering
  On Error GoTo 0
 
 
  ' vi er så nødt til først at oprette vores nøgle før vi kan tilføje elementer
  ' så vi ændrer objektet til at pege på det hvor vi vil starte
  ' her er det hkey_localmachine\software
  Set objRegKey = RegKeyFromString(strRelRoot)
 
  ' derefter opretter vi vores rodnøgle
  objRegKey.SubKeys.Add strRegKey
 
  ' sætter igen objektet til at pege på vores nye rod
  ' og nu kan vi indsætte data i nøglen
  Set objRegKey = RegKeyFromString(strRelRoot & strRegKey)
 
  ' her opretter vi så vores nøgle til programmet
  ' tilføjer data til nøglen
  With objRegKey
      'opret nøgler med værdier til vores placering af programmet
      'læg mærke til at vi indsætter nogle default værdier
      'selve nøglens type kunne også antage andre typer fx. binær eller tekst
      'tal bruges mest long værdier.
      'de øvrige kan ses ved at trykke F2 og i objekt browseren kigge på RegObj
      .Values.Add "Top", 0, RegValueType.rvLong
      .Values.Add "Left", 0, RegValueType.rvLong
      .Values.Add "Width", 10000, RegValueType.rvLong
      .Values.Add "Height", 5000, RegValueType.rvLong
  End With
     
  'vend tilbage og hent værdierne
  Resume
 
End Sub

'----snip slut

Tryk F8 for at steppe gennem koden første gang du kører programmet, så kan du bedre se hvad det er den laver.

Men husk det med referencen til objektet ellers får du fejl.

//vbcoder
Avatar billede midcom Nybegynder
01. april 2004 - 14:39 #7
Lav et modul med dette i


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 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 Any, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Any) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Const REG_SZ = 1
Const REG_BINARY = 3
Const REG_DWORD = 4
Public Enum hKey
    HKEY_CLASSES_ROOT = &H80000000
    HKEY_CURRENT_USER = &H80000001
    HKEY_LOCAL_MACHINE = &H80000002
    HKEY_USERS = &H80000003
    HKEY_CURRENT_CONFIG = &H80000005
    HKEY_DYN_DATA = &H80000006
End Enum
Private Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
    lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
    If lResult = 0 Then
        If lValueType = REG_SZ Then
            strBuf = String(lDataBufSize, Chr$(0))
            lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
            If lResult = 0 Then
                RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
            End If
        ElseIf lValueType = REG_BINARY Or REG_DWORD Then
            Dim strData As Integer
            lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
            If lResult = 0 Then
                RegQueryStringValue = strData
            End If
        End If
    End If
End Function
Function GetString(hKey As hKey, Path As String, Name As String) As String
'Ret = GetString(HKEY_CURRENT_USER, \"KeyPath\", \"StringName eller BinaryName\")
Dim Ret As Long, ReturString As String
    RegOpenKey hKey, Path, Ret
    ReturString = RegQueryStringValue(Ret, Name)
    RegCloseKey Ret
GetString = ReturString
End Function
Function SaveDWordValue(hKey As hKey, KeyPath As String, ValueName As String, DWordValue As Long)
'SaveDWordValue HKEY_CURRENT_USER, \"KeyPath\", \"DWordName\", 999999999
Dim Ret As Long
If Val(DWordValue) > 999999999 Or Val(DWordValue) < 0 Then
    Exit Function
End If
    RegCreateKey hKey, KeyPath, Ret
    RegSetValueEx Ret, ValueName, 0, REG_DWORD, DWordValue, Len(DWordValue)
    RegCloseKey Ret
End Function
Function SaveStringValue(hKey As hKey, KeyPath As String, ValueName As String, StringValue As String) As Long
'SaveStringValue HKEY_CURRENT_USER, \"KeyPath\", \"StringName\", \"ABC\"
Dim Ret, RetErr As Long
    RegCreateKey hKey, KeyPath, Ret
    RetErr = RegSetValueEx(Ret, ValueName, 0, REG_SZ, ByVal StringValue, Len(StringValue))
    RegCloseKey Ret
End Function
Function SaveBinaryValue(hKey As hKey, KeyPath As String, ValueName As String, BinaryValue As Long)
'SaveBinaryValue HKEY_CURRENT_USER, \"KeyPath\", \"BinaryName\", 255
Dim Ret As Long
If Val(BinaryValue) > 255 Or Val(BinaryValue) < 0 Then
    Exit Function
End If
    RegCreateKey hKey, KeyPath, Ret
    RegSetValueEx Ret, ValueName, 0, REG_BINARY, CByte(BinaryValue), 4
    RegCloseKey Ret
End Function
Function DeleteKeySetting(hKey As hKey, KeyPath As String, ValueName As String)
'DeleteKeySetting HKEY_CURRENT_USER, \"KeyPath\", \"ValueName\"
Dim Ret As Long
    RegCreateKey hKey, KeyPath, Ret
    RegDeleteValue Ret, ValueName
    RegCloseKey Ret
End Function
Function DeleteKeyPath(hKey As hKey, KeyPath As String)
'DeleteKeyPath HKEY_CURRENT_USER, \"KeyPath\"
Dim Ret As Long
    RegCreateKey hKey, KeyPath, Ret
    RegDeleteKey Ret, "\"
    RegCloseKey Ret
End Function


For at læse

UserLogon = GetString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows T\CurrentVersion\Winlogon", "DefaultUserName")

Gem 'SaveDWordValue HKEY_CURRENT_USER, \"KeyPath\", \"DWordName\", 999999999

SaveDWordValue HKEY_CURRENT_USER, "Software\VB and VBA Program Settings\SagsDb\Filter", "Name", 22
Avatar billede kedde65 Praktikant
01. april 2004 - 15:54 #8
Jeg vil da også give mit bud på sagen. Sæt en reference til Windows Script Host Object Model og kør følgende kode.

Private Sub Command1_Click()
    Dim wsh As IWshRuntimeLibrary.WshShell
    Set wsh = New IWshRuntimeLibrary.WshShell
   
    wsh.RegWrite "HKEY_CURRENT_USER\Software\TG\", "Christian"
    MsgBox wsh.RegRead("HKEY_CURRENT_USER\Software\TG\")
   
    wsh.RegDelete "HKEY_CURRENT_USER\Software\TG\"
   
    Set wsh = Nothing
End Sub

VH CK
Avatar billede lillholm Nybegynder
01. april 2004 - 20:33 #9
Hold da helt op....

Det er jo helt sindsygt saa mange der har svaret :D det er sgu fedt der er nogen der gider bruge tid paa det

Bliver desvaere noed til at hoppe i seng fordi jeg skal naa et fly imorgen kl 6 i kastruplufthavn og bor ca halvanden times tid derfra men kigger paa det imorgen :D

Mange tak alle sammen....

kan lige sige lidt mere der hvor jeg skal ha aendret i registeringsdatabasen er under.. ja hvor fanden er der det nu... sider i linux lige nu men under run (stedet hvor alt hvad der ligger bliver koert naar windows starter op)
det er vel under noget windows/microsoft/currentblablalba/run tror jeg nok
Avatar billede wannadoo Nybegynder
12. april 2004 - 22:52 #10
Strenge under disse mapper, bliver kørt når Windows Starter op:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Evt. genveje i menuen Start, i mappen Start(Menuen Start\Programmer\Start), bliver også kørt ved opstart af Windows.

Go' Tur :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester