[ Aleksandar Ružičić @ 31.05.2004. 18:24 ] @
Jedno malo registry pitanje...

Kako mogu da citam i unosim vrednosti u neki kljuc u registry-ju iz VB-a?
U API-Guid-u sam pronasao nacin za snimanje(citanje) npr u kljuc:

HKEY_LOCAL_USER\Neki podkljuc (samo jedan podkljuc!)

i onda citam/brisem/unosim neku vrednost u tom podkljucu. E sad mene interesuje kako da dodjem do neke vrednosti koja se nalazi npr u:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

podkljucu?????

Molim sve koji znaju da mi pomognu!

Pozdrav svima!
[ mladenovicz @ 31.05.2004. 18:41 ] @
Code:

Ret = GetString(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", ImeKljuca)


Ovako nesto bi trebalo da radi. Medjutim, pre toga moras u funkciji RegQueryStringValue da obradis ostale tipove podataka, posto ona obradjuje samo REG_SZ i REG_BINARY, a ove vrednosti su REG_DWORD.
[ Aleksandar Ružičić @ 02.06.2004. 17:56 ] @
Hvala ti mladenovicz ko bratu! Sta bi ja bez tebe?? (verovatno bi lup'o glavom o tastaturu )
E, samo sto ne mogu da provalim kako da obradim REG_DWORD...
[ mladenovicz @ 03.06.2004. 10:45 ] @
DWORD ti je 2x2 bajta = Long u VBu. Znaci, ovako nesto bi trebalo da radi.

Code:

        ElseIf lValueType = REG_DWORD Then
            Dim strData As Long
            'retrieve the key's value
            lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
            If lResult = 0 Then
                RegQueryStringValue = strData
            End If
        End If
[ Aleksandar Ružičić @ 03.06.2004. 11:43 ] @
Hvala. Trenutno sam u internet klubu pa ne mogu da isprobam to ali siguran sam da radi. samo imam jedno pitanje
jell citam isto sa
Code:
Ret = GetString  (....)

il nesto drugo?
Izvini na mojim glupim pitanjima ali sam zestoki pocetnik...
[ mladenovicz @ 03.06.2004. 12:27 ] @
Citas sa

Code:

Ret = GetString(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", ImeKljuca)


a ovaj ElseIf dodaj u RegQueryStringValue funkciji.
[ Aleksandar Ružičić @ 04.06.2004. 06:49 ] @
Hvala. Mogu da citam DWORD al kako da ga snimam?
Pokusao sam sa:
Code:
 SaveString HKEY_CURRENT_USER, _
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" _
"NoScrSavPage", "1"

i sa:
Code:

Dim Value as Long
Value = 1
SaveStringLong _
HKEY_CURRENT_USER, _
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" _
"NoScrSavPage", CByte(Value)

U prvom slucaju mi cuva String vrednost a u drugom Binary. Sta da radim?
Takodje sam u global declarations stavio prvo:
Code:

Const REG_DWORD = 2

pa nije radilo a posle sam stavio:
Code:

Const REG_DWORD = 4

Al opet nista...
[ mladenovicz @ 04.06.2004. 09:42 ] @
1. DWORD = 2
2. Kao sto imas SaveString i SaveStringLong, tako treba da dodas metod, npr. SaveNumberLong i uz sitne izmene to je to.
[ Aleksandar Ružičić @ 04.06.2004. 14:17 ] @
Pa znas da sam pocetnik i da ne znam bas mnogo o vb-u (radim u njemu nekih 10-ak dana) pa bih te zamolio da mi objasnis kave promene treba da napravim.....

Hvala!
[ mladenovicz @ 04.06.2004. 14:23 ] @
Otprilike ovako nesto

Code:

Sub SaveNumberLong(hKey As Long, strPath As String, strValue As String, strData As String)
    Dim Ret
    'Create a new key
    RegCreateKey hKey, strPath, Ret
    'Set the key's value
    RegSetValueEx Ret, strValue, 0, REG_DWORD, CLng(strData), 4
    'close the key
    RegCloseKey Ret
End Sub
[ Aleksandar Ružičić @ 05.06.2004. 14:25 ] @
Ne...ne radi ):
Cuva mi string vrednost.
Ja sam sam pokusao nesto. Mislio sam da iz programa napisem neki .reg fajl i da ga potom pozovem shell funkcijom, al imam jedam problem: Windows me pita da li sam siguran da hocu da ubacim nekoime.reg u registry.
Kako da izbegnem to potvrdjivanje. Hocu reci gde da ubacim "/s" parametar. Evo sta sam ja uradio:
Prvo sam u global declarations upisao:
Code:

Private Declare Function ShellExecute Lib "SHELL32.DLL" Alias "ShellExecuteA"(ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Private Const SW_ShowNormal = 1

zatim i funkciju:
Code:

Function InputReg(filename As String)
    If Dir(filename) = "" Then
        MsgBox "Unknown error!", vbCritical, "Error": Exit Function
    Else
        Dim iReturn As Long
        iReturn = ShellExecute(frmMain.hwnd, "Open", filename, vbNullString, App.Path, SW_ShowNormal)
    End If
End Function 

Ako mozes pomogni mi sa ovim ili sa onom SaveNumberLong funkcijom...
[ Aleksandar Ružičić @ 06.06.2004. 00:33 ] @
Izvini, radi (SaveNumberLong), nisam primetio da sam ostavio REG_DWORD = 2 umesto 4! Moja greska.
Nema potrebe da sada petljam sa onim .reg fajlovima. Hvala jos jednom, sad znam da citam i unosim sve vrednosti u registriju...

Necu zaboraviti da tvoje ime stavim u Readme.txt (kad zavrsim program za koji mi je ovo trebalo)!
[ Aleksandar Ružičić @ 06.06.2004. 19:57 ] @
Izgleda da sam se rano pohvalio. Ipak imam jos problema, sad me muci binary vrednost. Nisam je dosad unosio u registry pa nisam ni obracao paznju. Evo sta mi treba:
Hocu da unesem:
Code:

VirtualHDIRQ = 01 00 00 00

al kada u VB-u stavim:
Code:

SaveStringLong HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Control\FileSystem", _
"VirtualHDIRQ", "1"

kao vrednost mi upisuje:
Code:

VirtualHDIRQ = 01 00 30 00

Sta da radim? Takodje mi treba kako da unesem:
Code:

00 00 00 00 00 00 00 00 03 00 00 00 00 00 5B E0 00 00 5C E0 00 00 00 00

Ovo nisam ni pokusavao jer nisam mogao ni ono prvo da provalim. Molim te pomogni mi jos sa ovim.
[ mladenovicz @ 07.06.2004. 10:17 ] @
Probaj da izmenis SaveStringLong da radi ovako

Code:

RegSetValueEx(ret, strValue, 0, REG_BINARY, strData, Len(strData))


P.S.
Nadam se da znas sta radis. Prckanje po registryju nije preporucljivo ako ne znas sta radis. Zbog toga VB ima built-in funkcije za rad sa regystryjem koje mogu da pisu samo u odredjenom delu regystyja (DeleteSetting, SaveSetting, GetSetting). APIje koristis samo ako znas sta radis.
[ Aleksandar Ružičić @ 08.06.2004. 09:33 ] @
Hvala.
I ne brini znam sta radim (bar tako mislim). Pravim neki program na foru X-Setup-a i TweakManagera pa mi zato treba ovo za registry. Sve sam dosad isprobao na mom kompu (samo ono sto je za 98) i radi bez problema...