วิธีการใช้รีจิสทรี API เพื่อบันทึก และเรียกคืนการตั้งค่า

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 145679 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

ถึงแม้ว่าจะมี Visual Basic SaveSetting และ GetSetting functionsto บันทึก และดึงข้อมูลจากรีจิสทรี onlyoperate ฟังก์ชันเหล่านี้ในส่วนเฉพาะของรีจิสทรี Visual Basic และการตั้งค่า VBAProgram ของคีย์ HKEY_CURRENT_USER ราก

บทความนี้ทั่วไปเกี่ยวกับการใช้ฟังก์ชัน Windows API 32-บิต beused ใดสามารถตั้ง และรับค่าจากที่ใดก็ได้ในรีจิสทรี การอ้างอิงฟังก์ชัน topicsand ในบทความนี้สามารถถูก generalized รีจิสทรี the16 บิตโปรแกรม

ฟังก์ชัน API แบบ 32 บิตยังรวมถึงการสนับสนุนสำหรับการรักษาความปลอดภัย ถึงแม้ว่า anoverview ความปลอดภัยอยู่นอกขอบเขตของบทความนี้

หมายเหตุ: ฟังก์ชัน SaveSetting และ GetSetting จะไม่เป็นส่วนหนึ่งของไลบรารี VBAfunction อย่างไรก็ตาม โค้ดตัวอย่างด้านล่างนี้ยังคงใช้กับ 32 bitapplications ที่ใช้ VBA

ข้อมูลเพิ่มเติม

ข้อมูลรีจิสทรีทั่วไป

รีจิสทรีถูกใช้ โดยโปรแกรมประยุกต์และ Windows จะเก็บ configurationdata นี้เป็นเช็คแทน thatproliferated แฟ้ม INI ใน Windows 3.x เครื่องจำนวนมาก และยังถูกใช้งานมาก โดย OLE

รีจิสทรีถูกจัดเรียงโดยใช้ชุดของคีย์และ valuesresembling แผนภูมิลำดับชั้น แต่ละคีย์ ขึ้นต้น ด้วย rootkeys กำหนดไว้ล่วงหน้าหก หนึ่งสามารถมีคีย์ย่อยและค่าที่เกี่ยวข้อง การ areorganizational คีย์ และตั้งชื่อหน่วย และปรากฏในโฟลเดอร์แฟ้ม Windows รีจิสทรี Editorsas ค่ารายการข้อมูล และปรากฏเป็นรายการข้อความในบานหน้าต่าง theright ของหน้าต่างตัวแก้ไขรีจิสทรี คีย์ไม่จำเป็นต้องมี associatedvalues ใด ๆ แต่อาจมีหลาย แต่ละค่ามีชนิดข้อมูลที่เกี่ยวข้อง ประเภทข้อมูลรีจิสทรี twomost ที่ใช้กันทั่วไปคือ REG_SZ เป็น null-terminatedstring และ REG_DWORD ตัวเลข 32 บิต

กระบวนการพื้นฐานที่ใช้ในการเขียน หรืออ่านจากตำแหน่งที่ตั้งในรีจิสทรีจะเหมือนกัน การอ้างอิง กำหนดคีย์หรือค่าใด ๆ ที่คุณต้องมีหมายเลขอ้างอิงที่ไปยังคีย์ เมื่อได้รับหมายเลขอ้างอิงนี้ ค่าและคีย์ย่อยของหมายเลขอ้างอิง thatthis ที่อ้างอิงถึงคีย์สามารถอ่าน ตั้งค่า หรือ (ที่ระบุ) ที่แสดงในรายการ

กำหนดตำแหน่งที่ตั้งในรีจิสทรี เพื่อขอรับหมายเลขอ้างอิงถึงคีย์ mustbegin คุณกับหนึ่งในหกล่วงหน้าแป้น (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, andHKEY_DYN_DATA) และดำเนินกับรีจิสทรีทรีจนถึง isreached คีย์ที่ต้องการ ผู้ใช้โปรแกรมอ่าน และเขียนจาก HKEY_CURRENT_USER andHKEY_LOCAL_MACHINE บ่อยที่สุด ถ้ามีคีย์กำลังถูกตรวจสอบแล้ว คุณสามารถเรียกใช้ฟังก์ชัน RegOpenKey หรือ RegOpenKeyEx usea ชุด ถ้า keysneed จะสร้าง RegCreateKey และ RegCreateKeyEx ฟังก์ชันการทำงาน

มีหมายเลขอ้างอิงไปยังคีย์ที่ต้องการ สามารถเรียกว่าฟังก์ชันใช้รายการ ตั้งค่า ข้อมูล andretrieve ในกรณีที่ทั้งหมด ฟังก์ชันที่ มี Exsuffix จะทำงานบนแพลตฟอร์ม 32 บิตเท่านั้น ฟังก์ชันที่ไม่ มี maywork ต่อท้ายบน Windows รุ่นทั้ง 16-บิต และ 32 บิต โปรดระลึกไว้ว่าฟังก์ชันการรีจิสทรี notall ขาดคำต่อท้าย 'แลกเปลี่ยน' มีฟังก์ชันให้บิต for16 กัน คำเสริมท้ายเพิ่มเติมถูกเพิ่มเมื่อฟังก์ชัน of16 บิตความสามารถถูกขยายเท่านั้น ฟังก์ชันที่มีอยู่ทั้งหมดใหม่และแพลตฟอร์ม 32-บิต specificto ไม่มีส่วนขยายเพิ่มเติม

ฟังก์ชัน RegSetValue และ RegSetValueEx อนุญาตให้มีการตั้งค่าของ valueto ถูกปรับเปลี่ยน RegQueryValue และ RegQueryValueEx เรียก thecurrent ตั้งค่าเป็น ข้อจำกัดของ versionsof ไม่ใช่อดีต 16 บิต APIs เหล่านี้ได้มาก evident ที่นี่ เมื่อใช้ RegSetValuefunction แบบ 16 บิตที่ไม่มีวิธีที่ ให้ค่าชื่อ และด้วย เหตุนี้ RegSetValuecan't สามารถใช้ค่าที่มากกว่าหนึ่งการเชื่อมโยงกับแต่ละคีย์ นอกจากนี้ ค่าทั้งหมดที่เขียนขึ้น โดย RegSetValue มีชนิดข้อมูลเป็นชนิด REG_SZ Theselimitations กำลังอยู่ในเกี่ยวกับรีจิสทรี 16 บิต RegSetValueEx ทำให้ thecreation จำนวนหลายค่าที่มีชนิดข้อมูลที่มีอยู่ใด ๆ

วิธีการเขียนไปยังตำแหน่งที่ตั้งของรีจิสทรีที่ระบุ

หลังจากกำหนดฟังก์ชันใดคุณจะจำเป็นต้องใช้สำหรับโครงการของคุณ เกี่ยวข้องสำเนาประกาศจากรหัสที่ส่วนท้ายของบทความนี้กับโมดู abasic กระบวนการสองงาน Visual Basic รวม (SetValueEx andQueryValueEx) มีการห่อหุ้มสำหรับ RegSetValueEx และ RegQueryValueEx APIfunctions และการใช้ที่ง่ายขึ้นอย่างมาก หมายเหตุด้านล่างให้ใช้ฟังก์ชันพื้นฐาน theseVisual อย่างไรก็ตาม คุณจะสามารถโทรโดยตรงไปยัง theAPI ถ้าคุณต้องการ

สร้าง/ปรับเปลี่ยนคีย์และค่า:

มีการประกาศค่าและกระบวนงานที่พร้อมใช้งาน คุณสามารถสร้าง และ openkeys เพิ่ม ปรับเปลี่ยน และอ่านค่าได้ สามวิธี sectionsexplain วิธีสร้างคีย์ ตั้งค่า หรือแก้ไขค่า และค่าของแบบสอบถาม

สร้างหมายเลขใหม่:

สร้างคีย์ใหม่ได้โดยใช้ขั้นตอนต่อไปนี้CreateNewKey นำชื่อของคีย์ที่จะสร้างคีย์กำหนดไว้ล่วงหน้าเพื่อสร้างคีย์อยู่ภายใต้การ constantrepresenting และ โทร toRegCreateKeyEx ไม่ได้ใช้ประโยชน์จากกลไกการรักษาความปลอดภัยที่ได้รับอนุญาต แต่ไม่สามารถปรับเปลี่ยนการดำเนินการดังกล่าว การสนทนาของรีจิสทรี isoutside การรักษาความปลอดภัยขอบเขตของบทความนี้
   Private Sub CreateNewKey (sNewKeyName As String, lPredefinedKey As Long)
       Dim hNewKey As Long         'handle to the new key
       Dim lRetVal As Long         'result of the RegCreateKeyEx function

       lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, _
                 vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
                 0&, hNewKey, lRetVal)
       RegCloseKey (hNewKey)
   End Sub
				

ตามขั้นตอนนี้เป็นการเรียก:
   CreateNewKey "TestKey", HKEY_LOCAL_MACHINE
				

จะสร้างหมายเลขเรียกว่า TestKey ภายใต้ HKEY_LOCAL_MACHINE

เรียก CreateNewKey ดังนี้:
      CreateNewKey "TestKey\SubKey1\SubKey2", HKEY_LOCAL_MACHINE
				

จะสร้างคีย์ซ้อนสามขึ้นต้น ด้วย TestKey ทันที underHKEY_CURRENT_USER ผู้ใต้บังคับบัญชาของ SubKey1, TestKey และ SubKey3 underSubKey2

การตั้งค่า/แก้ไขค่า:

การสร้าง และการตั้งค่าของคีย์ที่ระบุสามารถทำให้สำเร็จได้กับขั้นตอนสั้น ๆ ดังต่อไปนี้ SetKeyValue ใช้คีย์ที่ valuewill จะเชื่อมโยงกับ ชื่อของค่า ตั้งค่า และชนิดของค่า (andREG_DWORD REG_SZ SetValueEx ฟังก์ชันการเฉพาะสนับสนุน แต่นี้สามารถปรับเปลี่ยนได้ถ้าจำเป็น) ระบุ valuefor sValueName ที่มีอยู่เป็นแบบใหม่จะปรับเปลี่ยนการตั้งค่าปัจจุบันของค่านั้น
   Private Sub SetKeyValue (sKeyName As String, sValueName As String, _
   vValueSetting As Variant, lValueType As Long)
       Dim lRetVal As Long         'result of the SetValueEx function
       Dim hKey As Long         'handle of open key

       'open the specified key
       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
                                 KEY_SET_VALUE, hKey)
       lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
       RegCloseKey (hKey)
   End Sub
				

การเรียกของ:
   SetKeyValue "TestKey\SubKey1", "StringValue", "Hello", REG_SZ
				

จะสร้างค่าของชนิด REG_SZ ที่เรียกว่า "StringValue" ด้วยการตั้งค่าของ "Hello" ค่านี้จะเชื่อมโยงกับคีย์ SubKey1 "TestKey"

ในกรณีนี้ "TestKey" เป็นคีย์ย่อยของ HKEY_CURRENT_USER แต่นี้สามารถ bemodified โดยการเปลี่ยนแปลงการเรียกไปยัง RegOpenKeyEx การเรียกนี้จะล้มเหลวถ้าไม่มี "TestKey\SubKey1" เมื่อต้องการหลีกเลี่ยงปัญหานี้ ใช้แบบ toRegCreateKeyEx โทรแทนการเรียก RegOpenKeyEx Opena จะ RegCreateKeyEx ระบุคีย์ถ้ามีอยู่แล้ว

สอบถามค่า:

ขั้นตอนถัดไปสามารถใช้เพื่อการตั้งค่าของ existingvalue การตรวจสอบให้ QueryValue นำชื่อของหมายเลขและชื่อของ valueassociated ที่ มีคีย์นั้น และกล่องข้อความที่ มี correspondingvalue ปรากฏขึ้น ใช้การเรียกไปยัง QueryValueEx wrapper ฟังก์ชันกำหนดเองด้านล่าง ที่สนับสนุนเฉพาะ ชนิด REG_SZ และ REG_DWORD
   Private Sub QueryValue (sKeyName As String, sValueName As String)
       Dim lRetVal As Long         'result of the API functions
       Dim hKey As Long         'handle of opened key
       Dim vValue As Variant      'setting of queried value

       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
   KEY_QUERY_VALUE, hKey)
       lRetVal = QueryValueEx(hKey, sValueName, vValue)
       MsgBox vValue
       RegCloseKey (hKey)
   End Sub
				

ตามขั้นตอนนี้ เป็นการเรียก:
   QueryValue "TestKey\SubKey1", "StringValue"
				

จะแสดงกล่องข้อความ ด้วยการตั้งค่าปัจจุบันของค่า "StringValue" และถือว่า "StringValue" ที่มีอยู่ในคีย์ "TestKey\SubKey1"

ถ้าไม่มีค่าที่คุณถาม แล้ว QueryValue จะส่งกลับรหัส anerror 2 - 'ERROR_BADKEY'

หมายเหตุเพิ่มเติม:

ตัวอย่างข้างต้นใช้แบบ registryfunctions เวอร์ชั่น 32-บิตแบบขยายเท่านั้น ฟังก์ชันเหล่านี้อนุญาตให้มีค่ามากกว่าหนึ่งค่าเพื่อ beassociated กับแต่ละคีย์ ตามที่กล่าวถึงข้างต้น andRegQueryValue RegSetValue แบบ 16 บิตทำหน้าที่บนค่า ๆ เดียวที่เกี่ยวข้องกับคีย์ปัจจุบัน (whichis ของชนิด REG_SZ เสมอ) ฟังก์ชันเหล่านี้ปรากฏในตัวแก้ไข 32 bitRegistry ด้วยชื่อของ<NO name=""> เมื่อต้องการตั้งค่า ปรับเปลี่ยน หรือสอบถามค่า thisspecial ที่เกี่ยวข้อง หนึ่งต้องใช้ฟังก์ชันของรีจิสทรี 16 บิตอ่าน และเขียนจากรีจิสทรีในสภาพแวดล้อมแบบ 16 บิตคือ muchsimpler กว่าในสภาพแวดล้อมแบบ 32 บิต ตามขั้นตอนพื้นฐานเหมือนกัน: เปิดคีย์ และรับหมายเลขอ้างอิงการเรียกหมายเลขอ้างอิง withthat ของฟังก์ชันแก้ไข แต่ไม่มีความต้องการการพิจารณาจะทำ สำหรับหลาย associatedvalues หรือชนิดข้อมูลของค่าที่แตกต่างกัน Createand สามารถเป็นโปรแกรมประยุกต์ 16 บิตที่ปรับเปลี่ยนคีย์และค่าที่ มีการประกาศค่าของฟังก์ชัน RegCreateKey, RegOpenKey, RegQueryValue, RegSetValue และ RegCloseKey</NO>

ในบางกรณี ไม่จำเป็นต้องไม่มีค่าใด ๆ ที่จะเชื่อมโยงกับคีย์นี้โปรแกรมประยุกต์อาจเพียงแต่รู้ว่ามีบางคีย์หรือค่าอยู่ andnot ดูแลเกี่ยวกับลักษณะของค่าของคีย์นั้น ในสถานการณ์เช่นนี้ ฟังก์ชัน RegEnumKey, RegEnumKeyEx และ RegEnumValue สามารถใช้ todetermine ว่ามีคีย์หรือค่าบางอย่าง ฟังก์ชัน onthese ข้อมูลเพิ่มเติมสำหรับการอ้างอิงเพื่อแสดงข้อความของ API และ/หรืออ้างอิง Windows API

ฟังก์ชัน API และการประกาศค่าคงที่

   Option Explicit

   Public Const REG_SZ As Long = 1
   Public Const REG_DWORD As Long = 4

   Public Const HKEY_CLASSES_ROOT = &H80000000
   Public Const HKEY_CURRENT_USER = &H80000001
   Public Const HKEY_LOCAL_MACHINE = &H80000002
   Public Const HKEY_USERS = &H80000003

   Public Const ERROR_NONE = 0
   Public Const ERROR_BADDB = 1
   Public Const ERROR_BADKEY = 2
   Public Const ERROR_CANTOPEN = 3
   Public Const ERROR_CANTREAD = 4
   Public Const ERROR_CANTWRITE = 5
   Public Const ERROR_OUTOFMEMORY = 6
   Public Const ERROR_ARENA_TRASHED = 7
   Public Const ERROR_ACCESS_DENIED = 8
   Public Const ERROR_INVALID_PARAMETERS = 87
   Public Const ERROR_NO_MORE_ITEMS = 259

   Public Const KEY_QUERY_VALUE = &H1
   Public Const KEY_SET_VALUE = &H2
   Public Const KEY_ALL_ACCESS = &H3F

   Public Const REG_OPTION_NON_VOLATILE = 0

   Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long
   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 Long, phkResult As Long, lpdwDisposition As Long) As Long
   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
   Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As String, lpcbData As Long) As Long
   Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, lpData As _
   Long, lpcbData As Long) As Long
   Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As Long, lpcbData As Long) As Long
   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
   Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, _
   ByVal cbData As Long) As Long
				

และฟังก์ชัน QueryValueEx Wrapper SetValueEx:
   Public 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
       Select Case lType
           Case REG_SZ
               sValue = vValue & Chr$(0)
               SetValueEx = RegSetValueExString(hKey, sValueName, 0&, _
                                              lType, sValue, Len(sValue))
           Case REG_DWORD
               lValue = vValue
               SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, _
   lType, lValue, 4)
           End Select
   End Function

   Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As _
   String, vValue As Variant) As Long
       Dim cch As Long
       Dim lrc As Long
       Dim lType As Long
       Dim lValue As Long
       Dim sValue As String

       On Error GoTo QueryValueExError

       ' Determine the size and type of data to be read
       lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
       If lrc <> ERROR_NONE Then Error 5

       Select Case lType
           ' For strings
           Case REG_SZ:
               sValue = String(cch, 0)

   lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, _
   sValue, cch)
               If lrc = ERROR_NONE Then
                   vValue = Left$(sValue, cch-1)
               Else
                   vValue = Empty
               End If
           ' For DWORDS
           Case REG_DWORD:
   lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, _
   lValue, cch)
               If lrc = ERROR_NONE Then vValue = lValue
           Case Else
               'all other data types not supported
               lrc = -1
       End Select

   QueryValueExExit:
       QueryValueEx = lrc
       Exit Function

   QueryValueExError:
       Resume QueryValueExExit
   End Function
				

ข้อมูลอ้างอิง

การเขียนโปรแกรม Windows 95 เฟซ บท 10 - "ใช้ theRegistry"

สำหรับการอ้างอิงฟังก์ชัน: คำแนะนำใด ๆ ของ Win16 หรือ Win32 API

คุณสมบัติ

หมายเลขบทความ (Article ID): 145679 - รีวิวครั้งสุดท้าย: 14 ตุลาคม 2556 - Revision: 5.0
ใช้กับ
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic for Applications 6.0
Keywords: 
kbcode kbhowto kbtophit kbmt KB145679 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:145679

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com