كيفية استخدام التسجيل API إلى حفظ و استرداد إعداد

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية145679
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
بالرغم من أن يتضمن Visual Basic دالتي SaveSetting و GetSetting حفظ واسترداد المعلومات من التسجيل, تعمل هذه الدالات فقط على قسم محدد من التسجيل Visual Basic وإعدادات البرامج VBA من مفتاح جذر HKEY_CURRENT_USER.

توضح هذه المقالة استخدام وظائف API Windows 32-بت الذي يمكن استخدامه تعيين واسترداد القيم من أي مكان في التسجيل. يمكن أن generalized المواضيع ومراجع الدالة في هذه المقالة إلى التسجيل برنامج 16 بت.

تتضمن وظائف API 32-بت أيضًا دعم من أجل الأمان, على الرغم من أن نظرة عامة حول الأمان خارج نطاق هذا المقال.

ملاحظة: دالات SaveSetting و GetSetting ليست جزءاً من مكتبة دالة VBA. ومع ذلك، نموذج التعليمة البرمجية أدناه لا تزال تنطبق تطبيقات 32-بت التي تقوم بتنفيذ VBA.
معلومات أخرى

معلومات التسجيل عامة

التسجيل المستخدمة من قبل التطبيقات وWindows لتخزين بيانات التكوين. وهو يعتبر بديل عدد كبير من الملفات INI proliferated على الأجهزة 3.x Windows وتستخدم أيضاً بكثرة بواسطة OLE.

تم تنظيم التسجيل باستخدام سلسلة ذات تسلسل هرمي من مفاتيح وقيم resembling شجرة. يمكن أن يحتوي كل مفتاح بدءاً من أحد مفاتيح الجذر المعرفة مسبقاً ستة sub-keys والقيم المقترنة بها. المفاتيح هي وحدات تنظيمية و التسمية وتظهر في محرر التسجيل Windows كمجلدات الملف. القيم إدخالات البيانات وتتم تظهر إدخالات النص في الجزء الأيسر من إطار "محرر التسجيل". مفاتيح تحتاج لا يكون لديك أي القيم المقترنة ولكن قد يكون العديد. كل قيمة يحتوي على نوع بيانات مقترن. هي أنواع بيانات السجل الأكثر استخداماً جهازي REG_SZ "و" سلسلة خالية منتهية; "و" REG_DWORD رقم ٣٢ بت.

العملية الأساسية المستخدمة في الكتابة أو القراءة من موقع في التسجيل هو نفسه. تشير إلى أي قيمة أو مفتاح المعطى, يجب أن يكون لديك مؤشر المفتاح. بمجرد الحصول على مؤشر هذا sub-keys مفتاح يشير هذا المؤشر إلى والقيم يمكن يمكن قراءة أو تعيين أو سرد (قائمة تعداد).

إعطاء موقع في التسجيل للحصول على مؤشر إلى ذلك المفتاح الذي يجب أن تبدأ أحد المفاتيح المعرفة مسبقاً ستة (HKEY_CLASSES_ROOT HKEY_CURRENT_USER ، HKEY_LOCAL_MACHINE ، HKEY_USERS ، HKEY_CURRENT_CONFIG و HKEY_DYN_DATA) ويمكن تجاوز شجرة التسجيل إلى أن يتم الوصول إلى المفتاح المطلوب. برامج المستخدم في أغلب الأحيان القراءة والكتابة من HKEY_CURRENT_USER و HKEY_LOCAL_MACHINE. في حالة وجود مفاتيح يتم traversed بالفعل يمكنك استخدام سلسلة من استدعاءات الدالات RegOpenKey أو RegOpenKeyEx. إذا المفاتيح التي ترغب في إنشاء إجراء دالتي RegCreateKey و RegCreateKeyEx المهمة.

يمكن استدعاء الدالات المستخدمة قائمة مجموعة ومعلومات استرداد مع المقبض إلى المفتاح المطلوب. في كافة الحالات سوف تعمل الوظائف مع لاحقة تقوم فقط على الأنظمة الأساسية 32-بت. قد تعمل وظائف بدون اللاحقة على إصدارات كل من 16-بت و 32-بت من Windows. ضع في الاعتبار التي ليست كافة وظائف السجل ينقصها لاحقة 'الخارجي' دالات توفير للتوافق 16-بت. تم إضافة لاحقة تقوم فقط عند تم توسيع إمكانيات دالات 16-بت. والعميل الدوال كلية والجديدة معينة على الأنظمة الأساسية 32-بت لعدم وجود ملحق تقوم.

السماح دالتي RegSetValue و RegSetValueEx إعدادات قيمة يمكن تعديل ، أثناء RegQueryValue و RegQueryValueEx استرداد الإعداد الحالي قيمة. تقوم - غير القيود، الإصدارات 16-بت من واجهات برمجة التطبيقات هذه evident جداً هنا. عند استخدام دالة RegSetValue 16 بت لا توجد أية طريقة اسم قيمة و وبسبب ذلك، يتعذر استخدام RegSetValue لإقران أكثر من قيمة لكل مفتاح. بالإضافة إلى ذلك، تتضمن كافة القيم التي تم كتابتها مع RegSetValue نوع بيانات REG_SZ. تعتبر هذه الحدود مضمّنة مع التسجيل 16-بت. يسمح RegSetValueEx إنشاء رقم متعددة القيم مع أي نوع من أنواع البيانات المتوفرة.

كيفية الكتابة إلى موقع تسجيل محددة

بعد تعيين وظائف ما ستحتاج إلى استخدام للمشروع, التصريح النسخة ذات الصلة من التعليمات البرمجية في نهاية هذه المقالة إلى وحدة نمطية أساسية. اثنين إجراءات Visual Basic مضمنة (SetValueEx و QueryValueEx) wrappers لوظائف RegSetValueEx و API RegQueryValueEx ويتم تبسيط استخدامها بشكل كبير. الملاحظات أدناه جعل استخدام دالات Visual Basic هذه; ومع ذلك، يمكنك إن شئت لإجراء مكالمات مباشرة إلى API إذا أردت.

إنشاء/التعديل المفاتيح والقيم:

مع التعريفات و الإجراءات المتوفرة التي يمكن إنشاء و فتح مفاتيح ، ثم إضافة وتعديلها قراءة قيم. تشرح المقاطع التالية ثلاثة كيفية إنشاء مفتاح تعيين أو تعديل قيمة والاستعلام قيمة.

إنشاء مفتاح جديد:

يتم إنشاء مفتاح جديد بسيطاً مثل باستخدام الإجراء التالي. تأخذ CreateNewKey اسم المفتاح لإنشاء ثابت يمثل مفتاح معرف مسبقاً لإنشاء مفتاح ضمن. استدعاء RegCreateKeyEx لا الاستفادة من آليات الأمان المسموح بها ولكن قد يمكن تعديل للقيام بذلك. مناقشة الأمان التسجيل خارج نطاق هذا المقال.
   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 مباشرة ضمن HKEY_CURRENT_USER SubKey1 تابعاً TestKey و SubKey3 ضمن SubKey2.

إعداد/التعديل قيمة:

يمكن تحقيق إنشاء وتعيين قيمة المفتاح المحدد مع الإجراء التالي قصيرة. تأخذ SetKeyValue المفتاح الذي ستكون القيمة المقترنة مع اسم قيمة إعداد القيمة ثم اكتب القيمة (SetValueEx الدالة فقط يدعم يمكن تعديل REG_SZ REG_DWORD ولكن هذا إذا كان ذلك ضرورياً). تعيين قيمة جديدة من أجل 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" الإعداد "مرحباً." ستكون هذه القيمة مع مفتاح SubKey1 "TestKey."

في هذه الحالة، "TestKey" فرعي HKEY_CURRENT_USER ولكن يمكن تعديل هذا عن طريق تغيير استدعاء RegOpenKeyEx. ستفشل هذه المكالمة في حالة عدم وجود "TestKey\SubKey1". لتجنب هذه المشكلة، استخدم استدعاء RegCreateKeyEx بدلاً من استدعاء RegOpenKeyEx. سيتم فتح RegCreateKeyEx مفتاح محدد إذا كان موجودًا بالفعل.

الاستعلام عن قيمة:

يمكن استخدام الإجراء التالي تخصيص إعداد قيمة موجودة. يأخذ اسم المفتاح واسم القيمة المقترنة مع هذا المفتاح QueryValue ويتم عرض مربع رسالة مع القيمة المطابقة. يستخدم استدعاء QueryValueEx المجمّع الدالة المعرف أدناه ، التي تعتمد 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 بإرجاع رمز خطأ 2 - 'ERROR_BADKEY'.

ملاحظات إضافية:

تستخدم الأمثلة أعلاه الموسعة إصدارات ٣٢ بت من وظائف السجل بشكل خاص. تسمح هذه الوظائف أكثر من قيمة إقران كل مفتاح. كما هو موضح أعلاه, "16-بت RegSetValue و RegQueryValue" تعمل على قيمة واحدة المقترنة المفتاح الحالي (الذي دوماً من نوع REG_SZ). تظهر هذه الدالات في 32-بت محرر التسجيل باسم < لا NAME >. تعيين أو تعديلها أو الاستعلام عن هذه القيمة المقترنة خاصة أحد عليك استخدام وظائف التسجيل 16-بت. قراءة وكتابة من التسجيل في بيئة 16-بت أسهل بكثير من بيئة 32-بت. اتباع نفس الإجراء الأساسي: فتح مفتاح الحصول على مقبض ومن ثم استدعاء الدالة التعديل مع ذلك المقبض ولكن لا يجب اعتبار على إجراء متعددة القيم المقترنة أو أنواع البيانات قيمة مختلفة. تطبيق 16-بت يمكن إنشاء وتعديل مفاتيح وقيم مع التعريفات دالات RegCreateKey و RegOpenKey RegQueryValue RegSetValue و RegCloseKey.

في بعض الحالات هناك حاجة للحصول على أية قيم كي يتم اقترانه مع مفتاح. قد تحتاج تطبيق فقط لمعرفة ما إذا كان مفتاح أو قيمة معينة وجود ومن لا يهمك حول طبيعة القيم المفتاح. في مثل هذا الحالة، يمكن استخدام الدالات RegEnumKey و RegEnumKeyEx RegEnumValue لتحديد ما إذا كان مفتاح أو قيمة معينة موجوداً. للحصول على مزيد من المعلومات حول هذه الدالات راجع مرجع عارض نص API و/أو Windows API.

دالة API و Declarations ثابت

   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				

SetValueEx ثم دالات التفاف QueryValueEx:
   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 - "باستخدام" التسجيل ""

للحصول على مراجع الدالة: أي دليل Win16 أو Win32 API.
التسجيل

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 145679 - آخر مراجعة: 12/04/2015 13:13:16 - المراجعة: 1.2

Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft Visual Basic 4.0 Standard Edition, Microsoft Visual Basic 4.0 Professional Edition, Microsoft Visual Basic 4.0 Professional Edition, Microsoft Visual Basic 4.0 16-bit Enterprise Edition, Microsoft Visual Basic 4.0 32-Bit Enterprise Edition, Microsoft Visual Basic for Applications 5.0, Microsoft Visual Basic for Applications 6.0

  • kbnosurvey kbarchive kbmt kbcode kbhowto kbtophit KB145679 KbMtar
تعليقات