• 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

Registry với VBS

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Registry với VBS

Gửi bàigửi bởi truongphu » T.Tư 18/06/2008 9:19 pm

Thủ thuật: Registry với VBS
Tác giả: truongphu
Mô tả: Xử lý Registry với VBS đơn giản vô cùng


Bài viết "Hướng dẫn sử xử lý Registry trong VB6" của tác giả quanghoa thật là chi tiết và công phu. Tôi thành thật khen ngợi.

Tuy nhiên dưới mắt một người chuyên viết VBS, tôi nghỉ rằng theo thời gian, tiến bộ tiện ích không ngừng tăng, những việc đơn giản như trên có thể giao lại cho VBS để code gọn gàng, và quan trọng hơn là bạn đọc dễ nắm bắt nội dung.

Code xử lý Registry đã được hai Coder PhuongThanh37 và phongvanvu đề cập trên DĐ cũ. Tôi chỉ làm nhiệm vụ hướng dẫn minh bạch tiếp theo.

1- Đầu tiên bạn tạo một biến đối tượng thuộc WScript.Shell như code sau:
Set obj = CreateObject("WScript.Shell")

2- Muốn đọc Registry, bạn chi cần gọi phương thức obj.RegRead (Chuỗi Registry)

3- Muốn xóa Registry, bạn chi cần gọi phương thức obj.RegDelete (Chuỗi Registry)

4- Muốn viết Registry, bạn chi cần gọi phương thức obj.RegWrite (Chuỗi Registry, giá trị, kiểu chuỗi)

Quá đơn giản phải không các bạn? Để các bạn nhanh quen, xin đi vào Code
Code sau đây Không cho phép thay đổi nội dung trang Homepage khi giá trị là 1

A- Đọc Registry: Chỉ có đọc Registry mới cần thêm một biến để tải nội dung đọc.

Mã: Chọn hết

  1. Dim obj, Ðoc
  2. Set obj = CreateObject("WScript.Shell")
  3. Ðoc = obj.RegRead  ("HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage")


Chuỗi Registry là toàn bộ đường dẫn đầy đủ ở ô bên trái của Registry Editor và một record trong cột "Name" ở ô bên phải của Registry Editor. Trong câu code trên, "Homepage" nằm cuối đường dẫn chính là một record trong cột "Name" ở ô bên phải của Registry Editor
ghi chú: đường dẫn đầy đủ ở ô bên trái của Registry Editor thường hiện dưới thanh StatusBar của Registry Editor, bỏ từ "My Computer" và nên viết tắt như "HKCU" = "HKEY_CURRENT_USER"

B- Xóa Registry:

Mã: Chọn hết

  1. obj.RegDelete  "HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage"


C- Viết Registry:

Mã: Chọn hết

  1. obj.RegWrite  "HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage", 1


Đoạn code trên, sau chuỗi Registry, giá trị là 1
phần kiểu chuổi sau đó để trống, máy tính ngầm hiểu là kiểu "REG_SZ", nghĩa là đúng ra phải viết:

Mã: Chọn hết

  1. obj.RegWrite  "HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage", 1, "REG_SZ"


Chỉ thế thôi! :D Các tham số khác, mời các bạn đọc bài viết của tác giả quanghoa
Sửa lần cuối bởi truongphu vào ngày CN 29/06/2008 8:10 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: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Registry với VBS

Gửi bàigửi bởi truongphu » T.Năm 19/06/2008 9:17 am

Và đây là kỹ thuật WMI thao tác với Registry

1- Đầu tiên bạn cũng tạo một biến đối tượng, nhưng lần nầy lại gọi WMI theo code sau:

Mã: Chọn hết

  1. Set objRegistry = GetObject("winmgmts:\\" & "." & "\root\default:StdRegProv")
  2. 'Const HKEY_CURRENT_USER = &H80000001: Const HKEY_LOCAL_MACHINE = &H80000002


2- Muốn đọc Registry, bạn chi cần gọi phương thức objRegistry.GetStringValue &H80000001
,strKeyPath,strValueName,strValue
(hay phương thức objRegistry.GetDWORDValue và dwValue)

3- Muốn xóa Registry, bạn chi cần gọi phương thức objRegistry.DeleteValue &H80000001, strKeyPath, strValueName

4- Muốn viết Registry, bạn chi cần gọi phương thức objRegistry.CreateKey &H80000001, strKeyPath
và gán giá trị với phương thức objRegistry.SetDWORDValue &H80000001, strKeyPath, strValueName, dwValue
hay objRegistry.SetStringValue &H80000001, strKeyPath, strValueName, strValue

strKeyPath là đường dẫn sau nhánh gốc của ô bên trái Registry Editor
strValueName là record trong cột Name của ô bên phải Registry Editor
strValue là record trong cột Data của ô bên phải Registry Editor
Phương thức GetDWORDValue, SetDWORDValue dwValue đi kèm dwValue
Phương thức GetStringValue, SetStringValue dwValue đi kèm strValue

Mời các bạn thử đoạn code không có giá trị gì sau:

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Set objRegistry = GetObject("winmgmts:\\" & "." & "\root\default:StdRegProv")
  3. strKeyPath = "SOFTWARE\Script Center"
  4. strValueName = "My DWORD Value"
  5. dwValue = 13
  6. objRegistry.CreateKey &H80000001, strKeyPath
  7. objRegistry.SetDWORDValue &H80000001, strKeyPath, strValueName, dwValue
  8. dwValue = 5 ' cho dwValue giá tri khác
  9. objRegistry.GetDWORDValue &H80000001, strKeyPath, strValueName, dwValue
  10. MsgBox dwValue ' kiêm tra giá tri dwValue Ðã ghi trong Registry, phai là 13
  11. objRegistry.DeleteValue &H80000001, strKeyPath, strValueName
  12. End Sub

Cũng quá đơn giản phải không các bạn? Chúc các bạn quen Registry
Sửa lần cuối bởi truongphu vào ngày T.Sáu 20/06/2008 9:28 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: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Registry với VBS

Gửi bàigửi bởi truongphu » T.Năm 19/06/2008 3:57 pm

kỹ thuật WMI thao tác với Registry (Tiếp theo)

Đọc nhiều giá trị; gọi phương thức: objReg.EnumValues để tạo các tên khóa và giá trị đi kèm vào 2 mảng arrValueNames, arrValueTypes.

Mã: Chọn hết

  1. objReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValueNames, arrValueTypes

Sau đó tiến hành đọc theo phương thức như trên

code đọc các giá trị khai báo trong Regional and Language Options như sau:

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Const HKEY_CURRENT_USER = &H80000001: Const HKEY_LOCAL_MACHINE = &H80000002
  3.  
  4. Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\default:StdRegProv")
  5. strKeyPath = "Control Panel\International"
  6. objReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValueNames, arrValueTypes
  7.  
  8. For i = 0 To UBound(arrValueNames)
  9.  a = a & "File Name: " & arrValueNames(i)
  10.  objReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, arrValueNames(i), arrValueTypes(i)
  11.  a = a & vbTab & vbTab & "Value: " & arrValueTypes(i) & vbCrLf
  12. Next
  13. MsgBox a
  14. End Sub

Bài viết hay thế mà không ai khen một tiếng ư? :-? >:P

16:30 thôi, tắt máy tính [dzo2] [dzo1]
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: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Registry với VBS

Gửi bàigửi bởi truongphu » T.Sáu 20/06/2008 8:50 am

Kỹ thuật WMI thao tác với Registry (Bài cuối)

Phải viết nốt cho xong: Ghi theo kỹ thuật nhị phân (Write Binary Data to the Registry)
Ta tạo mảng gồm các số muốn ghi, vd
arrValues = Array(88, 205)
xong gọi phương thức objRegistry.SetBinaryValue
Code như sau:

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Const HKEY_CURRENT_USER = &H80000001
  3. Set objRegistry = GetObject("winmgmts:\\" & "." & "\root\default:StdRegProv")
  4.  
  5. strKeyPath = "Software"
  6. strValueName = "BinaryTest"
  7. arrValues = Array(88, 205)
  8.  
  9. errReturn = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, arrValues)
  10. End Sub

Thân tặng các bạn :x
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: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Registry với VBS

Gửi bàigửi bởi truongphu » T.Hai 23/06/2008 8:13 am

@ anton, NoBi : cảm ơn hai bạn, ít ra cũng sôi nổi :"> :">
Tôi nhận có khuyết điểm, xin sửa, rút lại những lời không thích hợp (đã edit ở trên)
Riêng về code, chúng chỉ thiếu dấu ( ), lỗi nầy dễ thấy trong câu:

Mã: Chọn hết

  1. Ðoc = obj.RegRead  "HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage"

ngoài ra code chạy êm

Tôi viết phần Test Code Bài 1 như sau:

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Set obj = CreateObject("WScript.Shell")
  3. ' Có thê trên máy không có ChuôiRegistry sau:
  4. ChuôiRegistry$ = "HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage"
  5. ' Vì thê, khi Ðoc se gây Lôi --> vân Run tiêp tuc, Ghi ChuôiRegistry
  6. On Error Resume Next
  7. If obj.RegRead(ChuôiRegistry) = 0 Then obj.RegWrite ChuôiRegistry, 1, "REG_SZ"
  8. ' Ðoc xác nhân Ðã có ChuôiRegistry
  9. MsgBox obj.RegRead(ChuôiRegistry)
  10. ' Xóa ChuôiRegistry
  11. obj.RegDelete ChuôiRegistry
  12. On Error GoTo Lôi  'khi Ðoc se gây Lôi --> Thông báo Lôi
  13. MsgBox obj.RegRead(ChuôiRegistry)
  14. Exit Sub
  15. Lôi:
  16. MsgBox "Giá tri ChuôiRegistry Ðã bi Xóa"
  17. End Sub


Bài 3, câu Code

Mã: Chọn hết

  1. Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\default:StdRegProv")

có thể viết như bài 2 và bài 4:

Mã: Chọn hết

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


Tự phạt 3 ngày không được vào CLB :((
Hẹn gặp lại
o0o--truongphu--o0o

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

ditimtriky
Bài viết: 2
Ngày tham gia: T.Sáu 11/11/2011 3:14 pm

Re: Registry với VBS

Gửi bàigửi bởi ditimtriky » T.Sáu 11/11/2011 3:25 pm

Cám ơn
Cám ơn
Cám ơn
Cám ơn
Cám ơn
Cám ơn
Cám ơn
Cám ơn
Cám ơn
ĐÚng cái mình cần
Ko biết nói gì ngoài cảm ơn!:D

tranthuthuy
Bài viết: 1
Ngày tham gia: CN 08/01/2012 9:52 am

Re: Registry với VBS

Gửi bàigửi bởi tranthuthuy » CN 08/01/2012 10:21 am

cám ơn bác nhiều lắm ạ....


Quay về “[VB] Mẹo vặt khác”

Đ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.0 khách