• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Hướng dẫn xử lý Registry trong VB6

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
QuangHoa
Guru
Guru
Bài viết: 542
Ngày tham gia: T.Năm 27/03/2008 9:02 am
Đến từ: Quê hương Đại tướng Võ Nguyên Giáp
Been thanked: 5 time
Liên hệ:

Hướng dẫn xử lý Registry trong VB6

Gửi bàigửi bởi QuangHoa » T.Hai 09/06/2008 10:05 am

Tên bài viết: Xử lý Registry trong Visual Basic 6.0
Tác giả: Võ Quang Hòa
Cấp độ bài viết: Từ cơ bản đến nâng cao
Tóm tắt: Thông tin về Registry, các kiểu dữ liệu có thể dùng, các hằng số, các hàm cùng với những thao tác chủ yếu


Một chút về Registry
Bình thường Registry gồm có 5 khóa cơ sở đó là

Mã: Chọn hết

  1. 1)  HKEY_CLASSES_ROOT Thông tin hệ điều hành
  2. 2)  HKEY_CURRENT_CONFIG Thông tin cấu hình hiện tại của máy tính
  3. 3)  HKEY_LOCAL_MACHINE Thông tin các chương trình cho mọi người dùng
  4. 4)  HKEY_CURRENT_USER Thông tin các chương trình cho người dùng hiện tại
  5. 5)  HKEY_USERS Thông tin cho tất cả người dùng

Hình ảnh
Mỗi khóa cơ sở chứa các khóa con, mỗi khóa con lại chứa các khóa con với lớp thấp hơn. Vì vậy nên một khóa bất kỳ trong registry có thể là khóa con của khóa này nhưng cũng có thể là khóa cha của khóa kia.
Trong một khóa có thể có một hay nhiều giá trị (String Value). Giá trị (Default) là giá trị luôn có trong một khóa. Mỗi giá trị đó có mỗi dữ liệu riêng tương ứng với kiểu dữ liệu của nó, đây là phần quan trọng nhất của registry . Trong registry có nhiều kiểu dữ liệu, phổ biến là.

Mã: Chọn hết

  1. 1)  REG_BINARY Một dãy bit thông tin
  2. 2)  REG_DWORD Một số nguyên 32 Bit
  3. 3)  REG_SZ    Một chuổi Unicode
  4. 4)  REG_MULTI_SZ Nhiều chuổi Unicode


Visual Basic đã cung cấp 4 hàm để xử lý Registry

Mã: Chọn hết

  1. 1.   GetAllSettings (appname, section)

Chức năng: lấy tất cả các thông tin của appname trong registry.
Ví dụ lấy các thông tin trong khóa Startup của Myapp

Mã: Chọn hết

  1. MySettings = GetAllSettings("MyApp", "Startup")
  2.  

Mã: Chọn hết

  1. 2GetSetting (appname, section, key [, default]) 

Chức năng, lấy thông tin được lưu trong key, thuộc khóa section của appname, giá trị default (có thể bỏ qua) là giá trị trả về nếu thông tin muốn lấy về không có trong registry
Ví dụ

Mã: Chọn hết

  1. MySettings = GetSetting(“MyApp", “Startup","Left", "25")
  2.  
  3.  

3. SaveSetting appname, section, key, setting
Chức năng: Lưu thông tin trong registry
Ví dụ

Mã: Chọn hết

  1. SaveSetting "MyApp", "Startup", "Left", 50

4. DeleteSetting appname, section [, key]
Chức năng, xóa khóa section trong appname
Ví dụ xóa thông tin của MyApp trong khóa Startup

Mã: Chọn hết

  1. DeleteSetting "MyApp", "Startup"


Thực chất thì các giá trị registry được lưu trong khóa HKEY_CURRENT_USER\Software\VB and VBA Program Settings. Còn nếu muốn làm việc trên các khóa khác thì ta phải dùng một số hàm API để xử lý. Chú ý tất cả các hằng, các biến kiểu, các hàm dưới đây bạn phải thêm từ khóa là Private ở phía trước nếu muốn dùng trong Form, và Private hoặc là Public nếu bạn dùng trong một Module. Và trong một số ví dụ tôi sẻ bỏ qua những phần khai báo chúng .

Giới thiệu vài hằng số thông dụng trong API khi xử lý registry

Mã: Chọn hết

  1. 1)  Các khóa cơ sở của registry
  2. • HKEY_CLASSES_ROOT = &H80000000
  3. • HKEY_CURRENT_CONFIG = &H80000005
  4. • HKEY_LOCAL_MACHINE = &H80000002
  5. • HKEY_CURRENT_USER = &H80000001
  6. • HKEY_USERS = &H80000003

2) Các kiểu truy xuất registry

Mã: Chọn hết

  1. • KEY_ALL_ACCESS = &HF003F ‘Mọi kiểu truy xuất
  2. • KEY_CREATE_LINK = &H20 ‘ Quyền tạo liên kết ký hiệu
  3. • KEY_CREATE_SUB_KEY = &H4 ‘Quyền tạo khóa con
  4. • KEY_ENUMERATE_SUB_KEYS = &H8 ‘Quyền liệt kê khóa con
  5. • KEY_EXECUTE = &H20019 ‘Quyền đọc
  6. • KEY_NOTIFY = &H10
  7. • KEY_QUERY_VALUE = &H1
  8. • KEY_READ = &H20019 ‘Quyền đọc
  9. • KEY_SET_VALUE = &H2 ‘Quyền đặt giá trị
  10. • KEY_WRITE = &H20006 ‘Quyền viết dữ liệu

3) Các kiểu giá trị trong registry

Mã: Chọn hết

  1. • REG_BINARY = 3  ‘Một chuổi nhị phân
  2. • REG_DWORD = 4   ‘ Một số nguyên 32 bit                
  3. • REG_DWORD_BIG_ENDIAN = 5  ‘Số nguyên 32 bit        
  4. • REG_DWORD_LITTLE_ENDIAN = 4  ‘Số nguyên 32 bit              
  5. • REG_EXPAND_SZ = 2   ‘Một chuổi kết thúc bởi Null  
  6. • REG_LINK = 6  ‘Liên kết Unicode  
  7. • REG_MULTI_SZ = 7 ‘ Nhiều chuổi kết hợp bởi kt Null    
  8. • REG_NONE = 0   ‘ Không rỏ kiểu    
  9. • REG_SZ=1  ‘ Một chuổi  
  10. • REG_RESOURCE_LIST = 8 ‘ Danh sách tài nguyên

II. Biến kiểu

Mã: Chọn hết

  1. 1)  Kiểu SECURITY_ATTRIBUTES
  2. Type SECURITY_ATTRIBUTES
  3.         nLength As Long ‘Chiều dài của chuổi bảo mật
  4.         lpSecurityDescriptor As Long ‘ Chuổi bảo mật
  5.         bInheritHandle As Long ‘ hanle
  6. End Type

2) Kiểu FILETIME

Mã: Chọn hết

  1. Type FILETIME
  2.         dwLowDateTime As Long
  3.         dwHighDateTime As Long
  4. End Type

III. Các hàm cần dùng khi xử lý Registry
1) Hàm RegOpenKeyEx
Khai báo

Mã: Chọn hết

  1. 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

Hàm có nhiệm vụ mở một khóa trong registry, nếu thành công, hàm sẻ trả về giá trị là 0, đồng thời biến phkResult sẻ mang giá trị hanle của khóa được mở. Nếu có lỗi xãy ra, có thể là do khóa registry không tồn tại hoặc tồn tại nhưng bị cấm truy cập thì hàm trả về mã lỗi khác 0.
Các tham số
• hKey
Chỉ đến khóa chính, là một trong các khóa chính ở mục I (1)
• lpSubKey
Là tên khóa cần mở.
• ulOption
Không cần thiết, có thể lập thành 0
• samdesired
Khai báo kiểu truy cập, là một hoặc kết hợp nhiều giá trị trong các giá trị ở mục I (2)
• phkResult
Là biến nhận hanle của khóa registry nếu khóa được mở thành công.
2) Hàm RegCreateKey
Khai báo

Mã: Chọn hết

  1. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Tương tự hàm RegOpenKeyEx nhưng khác ở chổ nếu khóa chưa tồn tại thì hàm sẻ tạo ra nó.
Các tham số
• hKey
Chỉ đến khóa chính, là một trong các khóa chính ở mục I (1)
• lpSubKey
Là tên khóa cần tạo
• phkResult
Biến nhận hanle của khóa được tạo hoặc được mở
3) Hàm RegCreateKeyEx
Khai báo

Mã: Chọn hết

  1. 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, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

Tương tự hàm RegCreateKey nhưng khác chút là có thêm một số thiết lập là
• Reserved
Thiết lập là 0
• lpClass
Tên lớp hoặc đối tượng của khóa, có thể đặt là chuổi rổng (“”)
• dwOption
Là 0 nếu muốn lưu lâu dài trong registry, là 1 nếu chỉ muốn lưu tạm thời, sẻ bị mất khi Window Shutdown.
• samdesired
Khai báo kiểu truy cập, là một hoặc kết hợp nhiều giá trị trong các giá trị ở mục I (2)
• lpSecurityAttributes
Thiết lập đặc tính bảo mật cho khóa được tạo ra.
• lpdwDisposition
Biến nhận kết quả là 1 nếu khóa chưa có và được tạo mới, là 2 nếu khóa đã tồn tại và mở ra.
4) Hàm RegCloseKey
Khai báo

Mã: Chọn hết

  1. Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As Long

Hàm có nhiệm vụ đóng lại khóa sau khi đã được mở bởi hàm trên. Giá trị trả về là 0 nếu thành công hoặc là một mã lỗi khác 0 nếu có lỗi xảy ra.
Tham số hKey là hanle của khóa cần đóng. Tương ứng với tham số phkResult trong hai hàm trên.
Ví dụ
a) Mở khóa HKEY_CURRENT_USER\Software\VBClub Soft. Sau đó đóng khóa lại.

Mã: Chọn hết

  1. Dim retval As Long ‘Nhận giá trị trả về của hàm
  2. Dim hkey As Long ‘ Nhận Hanle của khóa
  3. Private Sub Form_Load()
  4. retval = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\VBClub Soft", 0, KEY_ALL_ACCESS, hkey)
  5. If retval <> 0 Then
  6.     MsgBox "Khoa chua co !", vbCritical, "Error"
  7. Else
  8.     MsgBox "Khoa da co va vua duoc mo !", vbInformation, "Infomation"
  9. End If
  10. retval = RegCloseKey(hkey)
  11. End Sub

b) Mở khóa HKEY_CURRENT_USER\Software\VBClub Soft. Nếu khóa chưa có thì tạo mới. Sau đó đóng khóa lại.

Mã: Chọn hết

  1. Dim retval As Long ‘nhan giá trị tra ve
  2. Dim hkey As Long ‘Nhan hanle cua khoa
  3. Dim keynew As Long ‘ Xem xem khoa da co hay chua
  4. Dim SA As SECURITY_ATTRIBUTES ‘Khong co y nghia
  5. Private Sub Form_Load()
  6. retval = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\VBClub Soft", 0, "", 0, KEY_ALL_ACCESS, SA, hkey, keynew)
  7. If retval <> 0 Then
  8.     MsgBox "Loi khi tao khoa !", vbCritical, "Error"
  9. Else
  10.     If keynew = 1 Then
  11.         MsgBox "Khoa da duoc tao moi !", vbInformation, "Infomation"
  12.     Else
  13.         MsgBox "Khoa da ton tai", vbInformation, "Infomation"
  14.     End If
  15. End If
  16. retval = RegCloseKey(hkey)
  17. End Sub
5) Hàm RegDeleteValue
Khai báo

Mã: Chọn hết

  1. Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long

Hàm xóa chuổi giá trị trong registry. Giá trị trả về sẻ là 0 nếu thành công và trả về mã lỗi khác 0 nếu thất bại. Với Windows hiện hành, hàm đều thực hiện thành công nếu trong khóa còn có các khóa con. Chú ý là trước khi xóa một giá trị trong key thì ta phảI mở Key đó ra trước đã.
Tham số
• Hkey
Là hanle của khóa chưa khóa cần xóa
• lpValueName
Tên giá trị bị xóa
Ví dụ
Xóa chuổi giá trị “num” trong khóa HKEY_CURRENT_USER\Software\VBClub Soft

Mã: Chọn hết

  1. Dim retval As Long
  2. Dim hKey As Long
  3. Private Sub Form_Load()
  4. retval = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\VBClub Soft", 0, KEY_ALL_ACCESS, hKey)
  5. retval = RegDeleteValue(hKey, "num")
  6. If retval = 0 Then
  7.     MsgBox "Da xoa gia tri thanh cong", vbInformation, "Xoa"
  8. Else
  9.     MsgBox "Loi khi xoa khoa", vbCritical, "Error"
  10. End If
  11. retval = RegCloseKey(hKey)
  12. End Sub
6) Hàm RegDeleteKey
Khai báo
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Hàm xóa key trong registry. Giá trị trả về sẻ là 0 nếu thành công và trả về mã lỗi khác 0 nếu thất bại.
Tham số
• Hkey
Là một trong các khóa chính ở mục I(1)
• lpSubKey
Tên khóa bị xóa
Ví dụ xóa khóa HKEY_CURRENT_USER\Software\VBClub Soft\me
Dim retval As Long
Private Sub Form_Load()
retval = RegDeleteKey(HKEY_CURRENT_USER, "Software\VBClub Soft\me")
If retval = 0 Then
MsgBox "Da xoa gia tri thanh cong", vbInformation, "Xoa"
Else
MsgBox "Loi khi xoa khoa", vbCritical, "Error"
End If
retval = RegCloseKey(hKey)
End Sub
7) Hàm RegEnumKey
Khai báo

Mã: Chọn hết

  1. Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long

Hàm lấy một khóa con của một khóa. Khóa chứa khóa con gọi là khóa cha. Nếu thành công, hàm trả về giá trị là 0, nếu có lỗi xảy ra, hàm trả về mã lỗi khác 0. Vì cứ mỗi lần gọi nó lại xác định một khóa con nên ta có thể liệt kê tất cả khóa con của một khóa cha bằng vòng lặp.
Các tham số
• Hkey
Hanle của khóa cha, phảI được mở trước.
• dwIndex
Số thứ tự của khóa con trong số các khóa cha sẻ được lấy ra. Chú ý rẳng trong khóa cha có nhiều khóa con thì các khóa con sẻ được sắp xếp theo tên từ A đến Z. Và dwIndex hợp lệ phảI có giá trị từ 0 đến số khóa con – 1.
• lpName
Một chuổi để chứa tên của khóa con. Chú ý trước khi dùng nó, bạn phảI khởi tạo cho nó, có thể dùng hàm space()
• cbname
Ghi giá trị chính là chiều dài của tên khóa con. Rất quan trọng khi phảI chỉnh lại chiều dài của chuổi lpName.
Ví dụ: Liệt kê tất cả các khóa con của khóa HKEY_CURRENT_USER\Software
Thêm một command vào form.

Mã: Chọn hết

  1. Option Explicit
  2. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  3. 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
  4. Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
  5. Private Const HKEY_CURRENT_USER = &H80000001
  6. Private Const KEY_ALL_ACCESS = &HF003F
  7. Dim retval As Long
  8. Dim hKey As Long
  9. Dim namekey As String ‘Ten khoa con
  10. Dim lenname As Long ‘ Ghi chieu dai cua khoa con
  11. Dim index As Long ‘ So thu thu cua khoa con
  12. Private Sub Command1_Click()
  13. Me.Cls ‘ Xoa nhung gi trong form
  14. namekey = Space(255) ‘ Khoi tao bien namekey
  15. lenname = 255
  16. index = 0
  17. retval = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, hKey)
  18. Do While retval = 0
  19. retval = RegEnumKey(hKey, index, namekey, lenname)
  20. If retval = 0 Then Me.Print Left(namekey, lenname) ‘In namekey
  21. index = index + 1
  22. Loop
  23. MsgBox "Khoa co tat ca " & index -1  & " khoa con", vbInformation, "Thong tin"
  24. retval = RegCloseKey(hKey)
  25. End Sub
8) Hàm RegEnumKeyEx
Khai báo

Mã: Chọn hết

  1. Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Tương tự hàm RegEnumKey, nhưng nó có điểm khác là thêm các tham số sau:
• lpReserved
Không có ý nghĩa, bạn khai báo ByVal 0
• lpClass
Chuổi chứa tên khóa con, tương tự như tham số lpName. Phải khởi tạo trước khi sử dụng.
• lpcbClass
Kích thước của lpClass
• lpftLastWriteTime
Chứa thời gian ghi, chỉnh sửa khóa cuối cùng.
9) Hàm RegEnumValue
Khai báo

Mã: Chọn hết

  1. Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Hàm đọc một thông tin trong registry . Trong một khóa có nhiều giá trị thì các chúng đó được sắp xếp có thứ tự và hàm sẻ lấy giá trị có số thứ tự là dwIndex+1. Do vậy ta có thể liệt kê tất cả các giá trị của một khóa bằng vòng lặp và hiển nhiên tham số dwIndex có các giá trị phù hợp là từ 0 đến số giá trị -1.
Các tham số
• hKey
Là hanle của khóa cần lấy giá trị
• dwIndex
là số thứ tự của giá trị cần lấy. Có giá trị phù hợp là 0 đến số giá trị -1.
• lpValueName
Nhận tên của giá trị mà hàm trả về.
• lpcbValueName
Chiều dài thực sự của giá trị. (Để chỉnh lại độ dài chuổi lpValueName)
• lpReserved
Thiết lập thành ByVal 0
• lpType
Biến nhận kiểu giá trị trả về, là một trong số các hằng số ở mục I(3)
• lpData
Biến nhận dữ liệu, nếu không cần thì thiết lập ByVal 0
• lpcbData
Biến nhận kích thước dữ liệu, nếu không cần thì thiết lập ByVal 0
Ví dụ liệt kê tất cả các giá trị có trong khóa HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{91FF042A-6000-11D3-8CFE-0150048383C9}và lấy thông tin của nó

Mã: Chọn hết

  1. Option Explicit
  2. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  3. 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
  4. Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
  5. Private Const HKEY_LOCAL_MACHINE = &H80000002
  6. Private Const HKEY_CURRENT_USER = &H80000001
  7. Private Const KEY_ALL_ACCESS = &HF003F
  8. Private Const REG_SZ = 1
  9. Private Const REG_BINARY = 3                     ' Free form binary
  10. Private Const REG_DWORD = 4                      ' 32-bit number
  11. Private Const REG_EXPAND_SZ = 2                  ' Unicode nul terminated string
  12. Private Const REG_MULTI_SZ = 7                   ' Multiple Unicode strings
  13. Dim retval As Long
  14. Dim hKey As Long
  15. Dim NameKey As String
  16. Dim lpType As Long
  17. Dim LenName As Long
  18. Dim Data(0 To 255) As Byte
  19. Dim DataLen As Long
  20. Dim DataString As String
  21. Dim index As Long
  22. Dim i As Long
  23. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  24. Me.Cls
  25. retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{91FF042A-6000-11D3-8CFE-0150048383C9}", 0, KEY_ALL_ACCESS, hKey)
  26. index = 0
  27. Do While retval = 0
  28.     NameKey = Space(255)
  29.     DataString = Space(255)
  30.     LenName = 255
  31.     DataLen = 255
  32.     retval = RegEnumValue(hKey, index, NameKey, LenName, ByVal 0, lpType, Data(0), DataLen)
  33.     If retval = 0 Then
  34.         NameKey = Left(NameKey, LenName) ‘Rút bỏ khoản trống thừa
  35.         DataString = ""
  36. ‘ Xử lý thông tin theo kiểu của nó và đưa vào biến DataString
  37.         Select Case lpType
  38.              Case REG_SZ
  39.                 For i = 0 To DataLen - 1
  40.                     DataString = DataString & Chr(Data(i)) ‘ Nối các chử cái thành chuổi
  41.                 Next
  42.              Case REG_BINARY
  43.                 For i = 0 To DataLen - 1
  44.                     Dim temp As String
  45.                     temp = Hex(Data(i))
  46.                     If Len(temp) < 2 Then temp = String(2 - Len(temp), "0") & temp
  47.                     DataString = DataString & temp & " "
  48.  ‘ Nối các cặp số nhị phân lại với nhau
  49.                 Next
  50.             Case REG_DWORD
  51.                 For i = DataLen - 1 To 0 Step -1
  52.                     DataString = DataString & Hex(Data(i)) ‘Nối các sô hexa với nhau
  53.                 Next
  54.             Case REG_MULTI_SZ
  55.                 For i = 0 To DataLen - 1
  56.                     DataString = DataString & Chr(Data(i))
  57.     ‘Nối các ký tự bao gồm ký tự vbNullChar (để cách dòng) thành một chuổi, bạn có thể sử dụng một mảng gồm nhiều string thay vì là một
  58.                 Next
  59.             Case REG_EXPAND_SZ
  60.                 For i = 0 To DataLen - 2
  61.                     DataString = DataString & Chr(Data(i))
  62.     ‘Nối các ký tự lại với nhau, bỏ ký tự NULL cuối cùng
  63.                 Next   
  64.             Case Else
  65.                 DataString = " Khong xac dinh duoc !"
  66.         ‘ Trên đây là 5 kiểu có trên WinXP
  67.         End Select
  68.     End If
  69.     Me.Print Left(NameKey, LenName) & " = " & DataString
  70.     index = index + 1
  71. Loop
  72. MsgBox "Co tat ca " & index - 1 & " gia tri"
  73. retval = RegCloseKey(hKey)
  74. End Sub      
Ghi chú: Tôi lấy khóa trên vì thấy nó có khá nhiều kiểu dữ liệu, bạn hãy làm thử với nhiều khóa khác sẻ thu được kết quả tương tự.
10) Hàm RegQueryValue
Khai báo
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Hàm đọc dữ liệu của một giá trị trong registry. Hàm trả về 0 nếu thành công hoặc là một mã lỗi khác 0 nếu thất bại. Thực tế rất khó vận dụng hàm này vì không biết được kiểu dữ liệu của nó để xử lý. Bạn không nên quan tâm đến hàm này.
11) Hàm RegQueryValueEx
Khai báo

Mã: Chọn hết

  1. 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         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Hàm đọc dữ liệu của một giá trị trong registry. Trả về 0 nếu thành công và một mã lỗi khác 0 nếu thất bại. Thực tế hàm này không khác mấy so với hàm RegEnumValue, trên lý thuyết hàm có khả năng đọc dữ liệu tốt hơn hàm RegEnumValue vì biến số nhận dữ liệu lpData có thể là nhiều kiểu khác nhau như Byte, Long, String… nên có thể nhận trực tiếp một số kiểu giá trị mà không cần phải xử lý. Tuy nhiên trên Windows XP ta chỉ gặp phải năm kiểu dữ liệu như trên ví dụ, và việc xử lý cũng không mấy phức tạp lắm.
Các tham số
Hoàn toàn tương tự như hàm RegEnumValue, chỉ khác ở chổ tham số lpData bạn có thể khai báo bằng các kiểu là Integer, Byte, Long, String và một kiểu bất kỳ do bạn tự định nghĩa. Lưu ý nếu là khai báo kiểu String thì bạn phải đặt từ khóa ByVal ở đầu (bắt buộc).
12) Hàm RegQueryValueEx
Khai báo

Mã: Chọn hết

  1. 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         ' Note that if you declare the lpData parameter as String, you must pass it By Value.

Hàm ghi dữ liệu vào registry, có thể ghi với nhiều kiểu dữ liệu khác nhau. Giá trị trả về là 0 nếu thành công hoặc một mã lỗi khác 0 nếu thất bại.
Các tham số
• hKey
Hanle của khóa cần ghi dữ liệu.
• lpValueName
Tên giá trị cần lưu, nếu đã có thì hàm sẻ ghi đè thông tin vào nó, nếu chưa có thì hàm sẻ tạo mới. Đặc biệt nếu bạn muốn lưu thông tin vào giá trị Default thì bạn truyền vào một chuổi rổng (“”).
• Reserved
Thiết lập là 0.
• dwType
Chỉ rỏ kiểu của dữ liệu cần ghi, có thể là một trong các giá trị ở mục I(3). Lưu ý hàm sẻ tự động xử lý dữ liệu lpData để ghi vào registry phù hợp với kiểu dữ liệu nên trong đa số trường hợp bạn không phải bận tâm xử lý dữ liệu như lúc đọc registry.
• lpData
Một biến, có thể là một hoặc một mảng các Byte, Integer, Long, String, hoặc một kiểu biến tự định nghĩa để đưa thông tin cần lưu. Chú ý nếu đã định nghĩa là String thì bắt buộc phải thêm ByVal ở trước.
• cbData
Kích thước (tính bằng byte) của dữ liệu đưa vào. Có thể xác định bằng hàm Len().
Ví dụ

Mã: Chọn hết

  1. DataString = "My Setting" vbNullChar
  2. retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\Quang Hoa", _ 0, KEY_ALL_ACCESS, hKey)
  3. retval = RegSetValueEx(hKey, "Setting", 0, REG_SZ, ByVal DataString,  _  Len(DataString))
  4. retval = RegCloseKey(hKey)

Có gì thắc mắc thì Reply hỏi nhé. Sẻ trả lời sau.
Chúc thành công. Thân.
Có thể tải file gốc bên dưới:
Registry in VISUAL BASIC.rar
bản gốc
(56.89 KiB) Đã tải 2017 lần
Sửa lần cuối bởi QuangHoa vào ngày T.Năm 12/06/2008 9:03 am với 1 lần sửa.


朋友
这些年一个人风也过雨也走,有过泪有过错还记得坚持什么。
真爱过才会懂会记没会回手,终有梦中有你在心中。
朋友一生一起走那些日子不再有,一句话一辈子一生情一杯九。
朋友不曾孤单过一声朋友你会懂,还有伤还有痛还要走还有我。

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Ba 18/11/2008 10:32 am

Tên bài viết: Hướng dẫn thao tác trên Registry (Với kỹ thuật Script WMI)
Tác giả: truongphu
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Script WMI thao tác dễ dàng trên tất cả các định dạng của khóa và được xem là code chuẩn của kỹ thuật Script khi thao tác với Registry


Hướng dẫn thao tác trên Registry
Với kỹ thuật Sript WMI

Trong bài “Registry với VBS” http://caulacbovb.com/forum/viewtopic.php?f=30&t=2145&start=0&st=0&sk=t&sd=a
Tôi có giới thiệu hai kỹ thuật thao tác trên Registry nhanh, gọn và dễ nắm bắt:
- Script Shell với lệnh khai báo thông thường là:

Mã: Chọn hết

  1. Set obj = CreateObject("WScript.Shell")

- Script WMI với lệnh khai báo thông thường là:

Mã: Chọn hết

  1. Set objRegistry = GetObject("winmgmts:\\" & "." & "\root\default:StdRegProv")


Script Shell thì quá đơn giản chỉ với 3 phương thức:
obj.RegRead để đọc
obj.RegDelete để xóa
obj.RegWrite để viết
Tuy nhiên nhược điểm của Script Shell là chỉ thao tác với các giá trị của khóa có định dạng là String: REG_SZ. Các định dạng của khóa khác tôi cố tìm hiểu nhưng đến giờ vẫn chưa gặp! Trong khi đó Script WMI lại thao tác dễ dàng trên tất cả các định dạng của khóa và được xem là code chuẩn của kỹ thuật Script khi thao tác với Registry. Thế cho nên, hôm nay tôi viết lại bài “Registry với VBS”, với mục WMI có phần khúc chiết hơn…

A- Các hằng số trong Registry
A1- Hằng số Gốc các nhánh: thông thường hay dùng:

Mã: Chọn hết

  1. Const HKEY_CURRENT_USER = &H80000001
  2. Const HKEY_LOCAL_MACHINE = &H80000002

A2- Hằng số định dạng giá trị của khóa: biết nhưng không dùng

Mã: Chọn hết

  1. Const REG_SZ = 1
  2. Const REG_EXPAND_SZ = 2
  3. Const REG_BINARY = 3
  4. Const REG_DWORD = 4
  5. Const REG_MULTI_SZ = 7


B- Cấu trúc câu lệnh SCRIPT/WMI
Xét câu lệnh:

Mã: Chọn hết

  1. objReg.GetStringValue &H80000002, strKeyPath, strValueName, strValue

- objReg là đối tượng được khai báo ban đầu
- GetStringValue là phương thức mà objReg làm việc
- &H80000002 hoặc HKEY_LOCAL_MACHINE là gốc một nhánh registry
- strKeyPath (đối số) là đường dẫn sau gốc nhánh
- strValueName (đối số) là tên khóa
- strValue (đối số) là giá trị của khóa
Lưu ý Đối tượng và các đối số có thể đặt tên tùy ý nhưng phương thức thì không thay đổi, vì đó là hàm mà đối tượng gọi ra để thao tác.
(Còn tiếp)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Ba 18/11/2008 9:39 pm

C- Khai báo đối tượng (object) để thao tác:

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")

Câu trên là code được rút gọn (TTD)
Winmgmt (ở trên có ký tự s) là trình tương tác với toàn bộ máy tính (và mạng), nằm trong WINDOWS\system32\wbem
Ta gán objReg là object có các thuộc tính của nhánh thư mục StdRegProv, đây là nhánh mà object có các phương thức thao tác trên các file registry

D- Các phương thức thao tác trên Registry

D1- Code đọc các giá trị khóa có định dạng: REG_SZ
Đọc giá trị của khóa DNS Server trong NetWorking. Nếu máy tính để chế độ Auto, giá trị của khóa nầy thông thường chính là địa chỉ IP của Modem ASDL

Dùng phương thức GetStringValue

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  2. strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1CD45787-B794-487F-AC99-414A4479C570}"
  3. strValueName = "NameServer"
  4. objReg.GetStringValue &H80000002, strKeyPath, strValueName, strValue
  5. MsgBox strValue


D2- Code đọc các giá trị khóa có định dạng: REG_DWORD
Đọc giá trị của khóa EnableDHCP trong NetWorking. Nếu máy tính để chế độ Auto, giá trị của khóa nầy là 1, nếu chủ động Disable, giá trị là 0

Dùng phương thức GetDWORDValue

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  2. strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1CD45787-B794-487F-AC99-414A4479C570}"
  3. strValueName = "EnableDHCP"
  4. objReg.GetDWORDValue &H80000002, strKeyPath, strValueName, dwValue
  5. MsgBox dwValue


D3- Code đọc các giá trị khóa có định dạng: REG_MULTI_SZ
Đọc giá trị của khóa IPAddress trong NetWorking

Dùng phương thức GetMultiStringValue kèm vòng lặp For...Next

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  2. strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1CD45787-B794-487F-AC99-414A4479C570}"
  3. strValueName = "IPAddress"
  4. objReg.GetMultiStringValue &H80000002, strKeyPath, strValueName, arrValues
  5. For Each strValue In arrValues
  6.     MsgBox strValue
  7. Next

(Còn tiếp)
Sửa lần cuối bởi truongphu vào ngày T.Tư 19/11/2008 9:16 am với 1 lần sửa.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Tư 19/11/2008 9:15 am

D4- Code đọc các giá trị khóa có định dạng: REG_EXPAND_SZ
Đọc giá trị của khóa UIHost trong WinLogon

Dùng phương thức GetExpandedStringValue ( cũng có thể dùng GetMultiStringValue)

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon"
  4. strValueName = "UIHost"
  5. objReg.GetExpandedStringValue HKEY_LOCAL_MACHINE, strKeyPath, _
  6.     strValueName, strValue
  7.  
  8. MsgBox "The Windows logon UI host is: " & strValue


D5- Code đọc các giá trị khóa có định dạng: REG_BINARY
Đọc giá trị của khóa LicenseInfo trong CurrentVersion

Dùng phương thức GetBinaryValue với vòng lặp For…Next

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  4. strValueName = "LicenseInfo"
  5. objReg.GetBinaryValue &H80000002, strKeyPath, strValueName, strValue
  6.  
  7. For i = LBound(strValue) To UBound(strValue)
  8.     b = b & strValue(i) & " "
  9. Next
  10. MsgBox b


D6- Code đọc nhiều giá trị khóa
Đọc tất cả các khóa trong strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1CD45787-B794-487F-AC99-414A4479C570}"

a- Gọi phương thức: EnumValues để tạo các tên khóa và giá trị đi kèm vào 2 mảng arrValueNames, arrValueTypes.
b- Sau đó tiến hành đọc theo MỘT trong các phương thức như trên với vòng lặp For…Next

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1CD45787-B794-487F-AC99-414A4479C570}"
  4. objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
  5.  
  6. For i = 0 To UBound(arrValueNames)
  7.  a = a & "File Name: " & arrValueNames(i)
  8.  objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames(i), arrValueTypes(i)
  9.  a = a & vbTab & vbTab & "Value: " & arrValueTypes(i) & vbCrLf
  10. Next
  11. MsgBox a


Như các bạn test và thấy: một số giá trị không biểu hiện vì chúng khác định dạng REG_SZ nên hàm GetStringValue không nhận được giá trị trả về.
Ví dụ thay objReg.GetStringValue bằng objReg.GetDWORDValue chúng ta lại có kết quả khác: các giá trị REG_DWORD hiện ra ..
(Còn nữa)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Tư 19/11/2008 12:09 pm

Cố viết cho xong, sao lại dài thế nhỉ? tưởng đâu đơn giản...
D7- Code liệt kê các Subkey
Liệt kê tất cả các Subkey dưới nhánh HKLM\SYSTEM\CurrentControlSet\Services.

Dùng phương thức EnumKey để tạo các tên các Subkey vào mảng arrSubkeys, dùng vòng lặp For…Next để nhận giá trị các Subkey

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SYSTEM\CurrentControlSet\Services"
  4. objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
  5.  
  6. For Each subkey In arrSubKeys
  7.     a = a & subkey & vbTab
  8. Next
  9. MsgBox a


Với Code trên, bạn có thể liệt kê tạo cây thư mục của bất cứ nhánh Registry nào sẵn có
Ví dụ: Code Liệt kê các Subkey dưới gốc HKEY_LOCAL_MACHINE

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = ""
  4. objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
  5.  
  6. For Each subkey In arrSubKeys
  7.     a = a & subkey & vbTab
  8. Next
  9. MsgBox a

…vv

D8- Code tạo một subkey
Tạo một subkey “aaaa” trong nhánh HKEY_LOCAL_MACHINE\Sofware

Dùng phương thức CreateKey

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\aaaa"
  4. objReg.CreateKey HKEY_LOCAL_MACHINE, strKeyPath


và ta có thể cứ như thế tạo tiếp subkey “d” dưới subkey “SOFTWARE\bbb\cc” (đi tắt, khỏi tạo lần lượt bbb rồi cc)

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc\d"
  4. objReg.CreateKey HKEY_LOCAL_MACHINE, strKeyPath

Lưu ý: Trong các bài tới tôi sẽ xóa các Subkey vừa tạo ra trên
(Còn nữa, tối nay hoặc sáng mai là hết)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Tư 19/11/2008 1:31 pm

D9- Code tạo một khóa định dạng REG_SZ
Tạo khóa “String Value Name” dưới nhánh HKLM\SOFTWARE\aaaa
(Ghi chú: nhánh HKLM\SOFTWARE\aaaa phải có, nếu không có thì không tác dụng)

Dùng phương thức SetStringValue
Const HKEY_LOCAL_MACHINE = &H80000002

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  2. strKeyPath = "SOFTWARE\aaaa"
  3. strValueName = "String Value Name"
  4. strValue = "asdf123"
  5.  
  6. objReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue


D10- Code tạo một khóa định dạng REG_EXPAND_SZ
Tạo khóa “Expanded String Value Name” dưới nhánh HKLM\SOFTWARE\bbb\cc\d
(nhánh trên phải có)

Dùng phương thức SetExpandedStringValue

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc\d"
  4. strValueName = "Expanded String Value Name"
  5. strValue = "%PATHEXT%"
  6.  
  7. objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue


D11- Code tạo một khóa định dạng REG_DWORD
Tạo khóa “Expanded String Value Name” dưới nhánh HKLM\SOFTWARE\bbb\cc

Dùng phương thức SetDWORDValue

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc"
  4. strValueName = "DWORD Value Name"
  5. dwValue = 82
  6.  
  7. objReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, dwValue


D12- Code tạo một khóa định dạng REG_MULTI_SZ
Tạo khóa “Multi String Value Name” dưới nhánh HKLM\SOFTWARE\bbb\cc\d

Khai báo một mảng String và dùng phương thức SetMultiStringValue

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc\d"
  4. strValueName = "Multi String Value Name"
  5. arrStringValues = Array("first string", "second string", "third string", "fourth string")
  6.  
  7. objReg.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath, _
  8.     strValueName, arrStringValues

(Còn tiếp phần cuối: Xóa Registry)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Tư 19/11/2008 3:44 pm

D13- Code tạo một khóa định dạng REG_BINARY
Tạo khóa “Binary Value Name” dưới nhánh HKLM\SOFTWARE\bbb\cc\d
Khai báo một mảng Số và dùng phương thức SetBinaryValue

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc\d"
  4. strValueName = "Binary Value Name"
  5. arrValues = Array(88, 205)
  6.  
  7. objReg.SetBinaryValue HKEY_LOCAL_MACHINE, strKeyPath, _
  8.     strValueName, arrValues


D14- Code Xóa khóa
Xóa tất cả các khóa vừa tạo ở trên dưới nhánh HKLM\SOFTWARE\bbb\cc\d
Dùng phương thức DeleteValue, tác dụng cho tất cả các khóa bất kể định dạng

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc\d"
  4. strMultiStringValueName = "Multi String Value Name"
  5. strExpandedStringValueName = "Expanded String Value Name"
  6. strBinaryValueName = "Binary Value Name"
  7.  
  8. objReg.DeleteValue HKEY_LOCAL_MACHINE, strKeyPath, strMultiStringValueName
  9. objReg.DeleteValue HKEY_LOCAL_MACHINE, strKeyPath, strExpandedStringValueName
  10. objReg.DeleteValue HKEY_LOCAL_MACHINE, strKeyPath, strBinaryValueName


D15- Xóa subkey cuối nhánh Registry
Trong chuỗi strKeyPath được khai báo, subkey cuối sẽ bị xóa nếu nó thực sự là subkey cuối cùng
Nếu không phải subkey cuối (nghĩa là còn mở ra subkey khác), phương thức xóa không tác dụng

Gọi phương thức DeleteKey để xóa subkey cuối cùng, bất kể subkey đó có chứa các giá trị hay không. Code sau xóa subkey cuối: ‘d’ không chứa khóa nào (đã xóa các khóa ở trên).

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc\d"
  4. objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath

 
Code sau đây không tác dụng vì ‘bbb’ chưa phải là subkey cuối, dưới nó còn ‘cc’

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\"
  4. objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath


Và như vậy, ta chịu khó xóa ngược lên nhánh thư mục: Code sau sẽ xóa subkey cuối, lần lượt: ‘cc’, ‘bbb’, ‘aaaa’. Lưu ý hai subkey ‘cc’ và ‘aaaa’ vẫn còn một khóa trong đó, vẫn bị xóa.

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\bbb\cc"
  4. objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
  5. strKeyPath = "SOFTWARE\bbb"
  6. objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
  7. strKeyPath = "SOFTWARE\aaaa"
  8. objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath


Ghi chú: Tôi đã test câu:

Mã: Chọn hết

  1. strKeyPath = "SOFTWARE\aaaa "
  2. objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath

Nhưng không sao xóa được subkey ‘aaaa’! Dò kỹ mới biết sau ‘aaaa‘ trong câu lệnh trên có một dấu cách!

E- Tóm tắt nội dung bài viết: (Giờ mới tóm tắt được..)

* Mục C- Khai báo đối tượng (object) để thao tác:

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")


Đọc Registry

* Mục D1- Code đọc các giá trị khóa: REG_SZ
Dùng phương thức GetStringValue
* Mục D2- Code đọc các giá trị khóa: REG_DWORD
Dùng phương thức GetDWORDValue
* Mục D3- Code đọc các giá trị khóa: REG_MULTI_SZ
Dùng phương thức GetMultiStringValue kèm vòng lặp For...Next
* Mục D4- Code đọc các giá trị khóa: REG_EXPAND_SZ
Dùng phương thức GetExpandedStringValue
* Mục D5- Code đọc các giá trị khóa: REG_BINARY
Dùng phương thức GetBinaryValue với vòng lặp For…Next
* Mục D6- Code đọc nhiều giá trị khóa
Gọi phương thức: EnumValues với vòng lặp For…Next
* Mục D7- Code liệt kê các Subkey
Dùng phương thức EnumKey và vòng lặp For…Next

Viết registry

* Mục D8- Code tạo một subkey
Dùng phương thức CreateKey
* Mục D9- Code tạo một khóa REG_SZ
Dùng phương thức SetStringValue
* Mục D10- Code tạo một khóa REG_EXPAND_SZ
Dùng phương thức SetExpandedStringValue
* Mục D11- Code tạo một khóa REG_DWORD
Dùng phương thức SetDWORDValue
* Mục D12- Code tạo một khóa REG_MULTI_SZ
Khai báo một mảng String và dùng phương thức SetMultiStringValue
* Mục D13- Code tạo một khóa REG_BINARY
Khai báo một mảng Số và dùng phương thức SetBinaryValue

Xóa Registry

* Mục D14- Code Xóa khóa
Dùng phương thức DeleteValue
* Mục D15- Xóa subkey cuối nhánh Registry
Gọi phương thức DeleteKey

Hy vọng với bài viết trên, thao tác với Registry không còn khó khăn với chúng ta nữa.
Phù ;)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Tư 19/11/2008 7:41 pm

PHỤ LỤC: Tham Khảo thêm (tôi mới xem, chưa test !)
http://www.ddth.com/archive/index.php?t-202088.html
ngochoan2003 14-07-2008, 13:43

Các bạn cho mình hỏi là mình muốn tạo một form theo dõi sự thay đổi của Registry ( Xóa, tạo mới ...) thì làm như thế nào ?
Cụ thể :
Khi chương trình chạy nó sẽ theo dõi và kiểm tra Reg, nếu thấy có tác động thêm , xóa thì nó sẽ hiển thị thông báo cho mình biết.
Mong được sự giúp đỡ !


huytranaz 18-07-2008, 10:55
Bạn có thể sử dụng dịch vụ Active Scripting của Windows (WbemScripting.SWbemSink) để làm điều này. Xem qua các ví dụ sau nhé:

1. Theo dõi Entry events:

Mã: Chọn hết

  1. Set wmiServices = GetObject("winmgmts:" _
  2. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  3.  
  4. Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
  5.  
  6. wmiServices.ExecNotificationQueryAsync wmiSink, _
  7. "SELECT * FROM RegistryValueChangeEvent WHERE " & _
  8. "Hive='HKEY_LOCAL_MACHINE' AND " & _
  9. "KeyPath='SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion'" _
  10. & " AND ValueName='CSDVersion'"
  11.  
  12. WScript.Echo "Listening for Registry Change Events..." & vbCrLf
  13.  
  14. While(1)
  15. WScript.Sleep 1000
  16. Wend
  17.  
  18. Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
  19. WScript.Echo "Received Registry Change Event" & vbCrLf & _
  20. wmiObject.GetObjectText_()
  21. End Sub



2. Theo dõi Subkey events:

Mã: Chọn hết

  1. ' Monitor Registry Subkey Events
  2.  
  3. ' Windows Server 2003 : Yes
  4. ' Windows XP : Yes
  5. ' Windows 2000 : Yes
  6. ' Windows NT 4.0 : Yes
  7. ' Windows 98 : Yes
  8.  
  9. Set wmiServices = GetObject("winmgmts:" _
  10. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
  11.  
  12. Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
  13.  
  14. wmiServices.ExecNotificationQueryAsync wmiSink, _
  15. "SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' " & _
  16. "AND KeyPath='SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion'"
  17.  
  18. WScript.Echo "Listening for Registry Change Events..." & vbCrLf
  19.  
  20. While(1)
  21. WScript.Sleep 1000
  22. Wend
  23.  
  24. Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
  25. WScript.Echo "Received Registry Change Event" & vbCrLf & _
  26. wmiObject.GetObjectText_()
  27. End Sub


3. Theo dõi subtree events:

Mã: Chọn hết

  1. ' Monitor Registry Subtree Events
  2.  
  3. ' Windows Server 2003 : Yes
  4. ' Windows XP : Yes
  5. ' Windows 2000 : Yes
  6. ' Windows NT 4.0 : Yes
  7. ' Windows 98 : Yes
  8.  
  9. Set wmiServices = GetObject("winmgmts:" _
  10. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
  11.  
  12. Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
  13.  
  14. wmiServices.ExecNotificationQueryAsync wmiSink, _
  15. "SELECT * FROM RegistryTreeChangeEvent WHERE Hive= " _
  16. & "'HKEY_LOCAL_MACHINE' AND RootPath=''"
  17.  
  18.  
  19. WScript.Echo "Listening for Registry Change Events..." & vbCrLf
  20.  
  21. While(1)
  22. WScript.Sleep 1000
  23. Wend
  24.  
  25. Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
  26. WScript.Echo "Received Registry Change Event" & vbCrLf & _
  27. wmiObject.GetObjectText_()
  28. End Sub


Chúc vui,

ngochoan2006 19-07-2008, 16:00
Tôi thử không được. bạn có thể viết thành 1 Project được không ?

huytranaz 19-07-2008, 17:51
Code ở trên là code mẫu viết bằng vb script.
Mình không upload được, bạn làm như sau nhé:

Bước 1: Bạn tạo 1 project mới trong vb. Sau đó vào menu Project -> Refference. Tìm: Microsoft WMI Scripting Vx.x Library (trong đó Vx.x là phiên bản của thư viện WMI).

Bước 2: Dán đoạn code sau vào form
Lưu ý:
- Chương trình theo dõi sự thay đổi ở nhánh registry: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run . Bạn có thể sửa lại theo ý.

- Chương trình sẽ thông báo bằng cách in ra màn hình watch của IDE, bạn có thể sửa lại theo ý mình.


Mã: Chọn hết

  1. Option Explicit
  2. Dim wmiServices As Object
  3. Dim WithEvents wmiSink As WbemScripting.SWbemSink
  4. '--
  5. '--
  6. Private Sub Form_Load()
  7.  
  8. Set wmiServices = GetObject("winmgmts:" _
  9. & "{impersonationLevel=impersonate}!\\.\root\default")
  10.  
  11. Set wmiSink = CreateObject("WbemScripting.SWbemSink", "")
  12.  
  13. wmiServices.ExecNotificationQueryAsync wmiSink, _
  14. "SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' " & _
  15. "AND KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVers ion\\Run'"
  16.  
  17. Debug.Print "Listening for Registry Change Events..." & vbCrLf
  18.  
  19. End Sub
  20.  
  21. Private Sub wmiSink_OnCompleted(ByVal iHResult As WbemScripting.WbemErrorEnum, ByVal objWbemErrorObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
  22. Debug.Print "Sink completed!"
  23. End Sub
  24.  
  25. Private Sub wmiSink_OnObjectPut(ByVal objWbemObjectPath As WbemScripting.ISWbemObjectPath, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
  26. Debug.Print "Object put!"
  27. End Sub
  28.  
  29. Private Sub wmiSink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
  30. Debug.Print "Change event!" & objWbemObject.GetObjectText_()
  31. End Sub
  32.  
  33. Private Sub wmiSink_OnProgress(ByVal iUpperBound As Long, ByVal iCurrent As Long, ByVal strMessage As String, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
  34. Debug.Print "Progress: " & iCurrent & "/"; iUpperBound & ": " & strMessage
  35. End Sub

Chúc cuối tuần vui vẻ,

Trên đây là toàn văn nội dung trang web. các bạn cứ tham khảo và trao đổi. Đề tài cũng hay đấy chứ!
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Sáu 21/11/2008 2:51 pm

Có bạn hỏi "Làm sao dùng code để biết định dạng rất nhiều khóa trong một strKeyPath?"
Câu hỏi hay, xin bổ sung vào bài viết
D16- Code đọc định dạng của các khóa trong một đường dẫn
Đọc định dạng tất cả các khóa của nhánh "HKLM\SYSTEM\CurrentControlSet\Control\Lsa". Đây là nhánh có nhiều định dạng khóa
a- Dùng phương thức EnumValues để tạo các tên khóa và giá trị đi kèm vào 2 mảng arrValueNames, arrValueTypes. (Như mục D6- Code đọc nhiều giá trị khóa).
b- Dùng vòng lặp For..Next để đọc từng giá trị khóa, phân tách từng trường hợp của arrValueTypes

Mã: Chọn hết

  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. Const REG_SZ = 1
  3. Const REG_EXPAND_SZ = 2
  4. Const REG_BINARY = 3
  5. Const REG_DWORD = 4
  6. Const REG_MULTI_SZ = 7
  7.  
  8. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  9.  
  10. strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa"
  11.  
  12. objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
  13.  
  14. For i = 0 To UBound(arrValueNames)
  15.     a = a & "Value Name: " & arrValueNames(i)
  16.    
  17.     Select Case arrValueTypes(i)
  18.         Case REG_SZ
  19.             a = a & vbTab & "Data Type: String" & vbCr
  20.  
  21.         Case REG_EXPAND_SZ
  22.             a = a & vbTab & "Data Type: Expanded String" & vbCr
  23.  
  24.         Case REG_BINARY
  25.             a = a & vbTab & "Data Type: Binary" & vbCr
  26.  
  27.         Case REG_DWORD
  28.             a = a & vbTab & "Data Type: DWORD" & vbCr
  29.  
  30.         Case REG_MULTI_SZ
  31.             a = a & vbTab & "Data Type: Multi String" & vbCr
  32.  
  33.     End Select
  34. Next
  35. MsgBox a
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Bảy 22/11/2008 11:45 am

Bổ sung
D17- Một khóa có tồn tại hay không?
Ít dùng vì Script WMI không báo lỗi nếu thiếu đối số, khác với script Shell
Dùng phương thức GetStringValue và kiểm tra giá trị thu nhận.
Kiểm tra giá trị của khóa DNS Server trong NetWorking có tồn tại hay không:

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
  2. strKeyPath = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1CD45787-B794-487F-AC99-414A4479C570}"
  3. strValueName = "NameServer"
  4. objReg.GetStringValue &H80000002, strKeyPath, strValueName, strValue
  5. If IsNull(strValue) Then MsgBox "Khóa không có" Else MsgBox "Khóa có"
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
thuongall
Quản trị
Quản trị
Bài viết: 455
Ngày tham gia: T.Tư 26/01/2005 8:05 am
Đến từ: Quê hương Đồng Khởi
Been thanked: 9 time
Liên hệ:

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi thuongall » T.Năm 21/05/2009 4:24 pm

Cái WMI này thấy có vấn đề, EnumValues quên mất cái Default Value đi thì phải và làm thế nào để Get cái Default Value này vậy ta? Bác truongphu viết tiếp nhé! :D

PhuongThanh37
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 87
Ngày tham gia: T.Sáu 09/09/2005 1:38 pm
Đến từ: Liên Hà, Đông Anh, HN
Liên hệ:

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi PhuongThanh37 » T.Hai 08/06/2009 11:33 pm

truongphu đã viết:...Trong bài “Registry với VBS” http://caulacbovb.com/forum/viewtopic.php?f=30&t=2145&start=0&st=0&sk=t&sd=a
...Tuy nhiên nhược điểm của Script Shell là chỉ thao tác với các giá trị của khóa có định dạng là String: REG_SZ. Các định dạng của khóa khác tôi cố tìm hiểu nhưng đến giờ vẫn chưa gặp! ...

Cháu đọc trong bài topic 2145 kia và ở đâu cũng đều có thấy là RegWrite(Nam, Value, [Type])
Vậy sao lại là chỉ làm thao tác với định dạng REG_SZ?
Với lại câu chú nói "Các định dạng của khóa khác tôi cố tìm hiểu nhưng đến giờ vẫn chưa gặp!" hi hi nghĩa là chú chưa search thấy ai dùng hả chú
Uống Chanh & nghe Chanh hát

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi truongphu » T.Ba 09/06/2009 5:18 am

PhuongThanh37 đã viết:Với lại câu chú nói "Các định dạng của khóa khác tôi cố tìm hiểu nhưng đến giờ vẫn chưa gặp!" hi hi nghĩa là chú chưa search thấy ai dùng hả chú


Tôi viết bài nầy năm ngoái
Hồi đó tìm hiểu các hàm RegWrite và RegRead tôi thấy nó nghèo nàn quá, không chú tâm lắm thành ra câu nói trên là không đúng
Bổ sung bài của Microsoft

http://msdn.microsoft.com/en-us/library/yfdfhz1b.aspx

RegWrite Method

Creates a new key, adds another value-name to an existing key (and assigns it a value), or changes the value of an existing value-name.

Mã: Chọn hết

  1. object.RegWrite(strName, anyValue [,strType])


Arguments
object
WshShell object.

strName
String value indicating the key-name, value-name, or value you want to create, add, or change.

anyValue
The name of the new key you want to create, the name of the value you want to add to an existing key, or the new value you want to assign to an existing value-name.

strType
Optional. String value indicating the value's data type.

(REG_SZ , REG_EXPAND_SZ, REG_DWORD, REG_BINARY.)

(Note:The REG_MULTI_SZ type is not supported for the RegWrite method.
RegWrite will write at most one DWORD to a REG_BINARY value. Larger values are not supported with this method)


Example
The following code creates a key and two values, reads them, and deletes them.

Mã: Chọn hết

  1. Dim WshShell, bKey
  2. Set WshShell = WScript.CreateObject("WScript.Shell")
  3.  
  4. WshShell. RegWrite"HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
  5. WshShell. RegWrite"HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"
  6.  
  7. bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
  8. WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")
  9.  
  10. WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
  11. WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
  12. WshShell.RegDelete "HKCU\Software\ACME\"
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
thuongall
Quản trị
Quản trị
Bài viết: 455
Ngày tham gia: T.Tư 26/01/2005 8:05 am
Đến từ: Quê hương Đồng Khởi
Been thanked: 9 time
Liên hệ:

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi thuongall » T.Ba 09/06/2009 10:52 am

truongphu đã viết:Kiếm Default Value ở đâu vậy ta?

Ý của cháu là giá trị trong khung màu đỏ đấy. EnumValues "quên" nó rồi thì phải. :(

default.png

Hình đại diện của người dùng
thuongall
Quản trị
Quản trị
Bài viết: 455
Ngày tham gia: T.Tư 26/01/2005 8:05 am
Đến từ: Quê hương Đồng Khởi
Been thanked: 9 time
Liên hệ:

Re: Hướng dẫn thao tác trên Registry

Gửi bàigửi bởi thuongall » T.Bảy 13/06/2009 11:59 am

Hôm nay mới đọc lại chủ đề này. Có gì đâu mà bác sợ chứ, sao cháu dám đùa vui với bác chứ. :D Thật ra thì giá trị default ít khi sử dụng và vì thế nên thằng Script WMI "quên" nó luôn chăng (bug của Script WMI?)
Còn với Script Shell thì lấy giá trị default đơn giản thế này:

Mã: Chọn hết

  1. MsgBox WshShell.RegRead("HKCU\Control Panel\Cursors\")

Với API hình như cũng tương tự, còn Script WMI thì không được.

Duong_Act
Thành viên chính thức
Thành viên chính thức
Bài viết: 12
Ngày tham gia: T.Sáu 03/06/2011 7:31 am
Has thanked: 4 time

Re: Hướng dẫn xử lý Registry trong VB6

Gửi bàigửi bởi Duong_Act » T.Bảy 02/07/2011 6:15 am

Em thao tác trên registry với WScript.Shell và winmgmts
Khá là khó chịu khi một số thằng Antivirus nó cứ xơi béng File của em do báo là TrojanVB :|
Em nghĩ chắc là nó giống với đoạn code mấy thằng virus hay dùng , các bác có cách sử lý nào không hơn nữa là các bác có cách nào chống dịch mã VB không chứ em không thích file của mình bị phanh thây moi ruột dễ dàng như bình thường được :((
Các bác cố giúp ! Thank các bác

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: Hướng dẫn xử lý Registry trong VB6

Gửi bàigửi bởi VuVanHoanh » T.Bảy 02/07/2011 9:06 am

Chống dịch ngược mã VB6 đã có bàn nhiều nhưng hình như chẳng ai có cách giải quyết cả.
Còn về vụ virus, bạn thử kiểm tra xem máy bạn có dính virus không? Sợ nó cắn vào file của bạn luôn đó.
Since 2008...
One love! :x

neods
Thành viên chính thức
Thành viên chính thức
Bài viết: 12
Ngày tham gia: CN 03/07/2011 11:45 am

Re: Hướng dẫn xử lý Registry trong VB6

Gửi bàigửi bởi neods » CN 17/07/2011 7:21 pm

Sử dụng SaveSetting thì key mới sẽ đc tạo ở HKEY_Current_User\Software\Vb and VBa Program Setting\Vblib vậy em muốn nó đổi sang HKEY_LOCAL_MACHINE/S​OFTWARE chẳng hạn thì làm như thế nào ạ :(?
Em đã thử SaveSetting appname:="HKEY_LOCAL_MACHINE/S​OFTWARE", section:="test", Key:="test", setting:=(Text1.Text)
nhưng kết quả thì nó vẫn ko thay đổi vị trí. Các bác giúp e với.
Tiện cho em hỏi, em muốn sử dụng Check_Click() để show một frame(trước khi tick vẫn bị ẩn) nằm trên cùng một form có đc ko?
Thank các bác nhiều.

hackerga
Bài viết: 1
Ngày tham gia: T.Năm 14/07/2011 7:18 am
Has thanked: 1 time

Re: Hướng dẫn xử lý Registry trong VB6

Gửi bàigửi bởi hackerga » T.Năm 21/07/2011 10:25 pm

Làm sao để lấy thông tin đưa ra cho mọi người thấy nhỉ?

Ai làm với ví dụ này tôi xem với.'

Cám ơn!
http://www.mediafire.com/?87e45b0q52kdug7

Koha JeseMen
Thành viên chính thức
Thành viên chính thức
Bài viết: 24
Ngày tham gia: T.Ba 27/07/2010 9:00 pm
Has thanked: 5 time

Re: Hướng dẫn xử lý Registry trong VB6

Gửi bàigửi bởi Koha JeseMen » T.Ba 09/08/2011 1:08 pm

Nhìn Register đơn giản thế mà lên lập trình ngoằn ngoèo quá :(
Hay tại mấy u viết quá rườm rà :D
Xem xong muốn á khẩu luôn @@ :D


Quay về “[VB] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách