الموضوع السابق   الموضوع التالي 

الوصول إلى معلومات بعيدة

Function: ConnectToRemoteRegistry
Procedure: DisconnectRemoteRegistry
Function: OpenRemoteSubKey
Procedure: CloseRemoteSubKey

الغرض
الاتصال بسجل النظام (Windows Registry) في حاسوب آخر على الشبكة.


الصيغة

function ConnectToRemoteRegistry(const ComputerName: string;
    RegKey: HKEY; var RegKeyHandle: HKEY): Boolean;

procedure DisconnectRemoteRegistry(RegKeyHandle: HKEY);

function OpenRemoteSubKey(const RegKeyHandle: HKEY;
    const RegSubKey: string; var RegSubKeyHandle: HKEY): Boolean;

procedure CloseRemoteSubKey(RegSubKeyHandle: HKEY);


الوسائط (Parameters)

الدالة ConnectToRemoteRegistry:

ComputerName اسم الحاسوب المطلوب الاتصال بسجل النظام فيه. يمكن أن يكون اسم الحاسوب كما هو (ComputerName) أو مسبوقاً بشرطتين مائلتين (\\ComputerName)
RegKey بارامتر من النوع HKEY يحدد المفتاح الأساسي المطلوب فتحه في سجل النظام على الحاسوب البعيد، و يجب أن يكون أحد المفاتيح الأساسية التالية المعرفة في النظام Windows:

  HKEY_CLASSES_ROOT
  HKEY_CURRENT_USER
  HKEY_LOCAL_MACHINE
  HKEY_PERFORMANCE_DATA
  HKEY_USERS
  HKEY_CURRENT_CONFIG
  HKEY_DYN_DATA

RegKeyHandle بارامتر متغير (var) من النوع HKEY حيث سيتم تخزين مقبض المفتاح في حال نجاح الدالة.

الإجراء DisconnectRemoteRegistry:

RegKeyHandle بارامتر من النوع HKEY يمثل مقبض المفتاح الأساسي الذي تم فتحه سابقاً باستعمال الدالة ConnectToRemoteRegistry.

الدالة OpenRemoteSubKey:

RegKeyHandle بارامتر من النوع HKEY يمثل مقبض المفتاح الأساسي الذي تم فتحه سابقاً باستعمال الدالة ConnectToRemoteRegistry.
RegSubKey المسار الكامل للمفتاح الفرعي المطلوب فتحه - حيث توجد القيمة أو القيم المطلوب قراءتها أو حفظها- مثلاً: Hardware\Description\System\CentralProcessor.
RegSubKeyHandle بارامتر متغير (var) من النوع HKEY حيث سيتم تخزين مقبض المفتاح الفرعي في حال نجاح الدالة.

الإجراء CloseRemoteSubKey:

RegSubKeyHandle بارامتر من النوع HKEY يمثل مقبض المفتاح الفرعي الذي تم فتحه سابقاً باستعمال الدالة OpenRemoteSubKey.

الشرح
هذه الدوال و الإجراءات تمثل جزءاً من الخطوات اللازمة للوصول إلى سجل النظام (Windows Registry) الموجود على حاسوب آخر لغرض الحصول على معلومات مخزنة في سجل نظام ذلك الحاسوب، أو حفظ (تخزين) معلومات فيه.
استعمل الدالة ConnectToRemoteRegistry لتأسيس اتصال بأحد المفاتيح الأساسية في سجل نظام الحاسوب البعيد. هذه الدالة تعيد True في حالة نجاحها في تأسيس الاتصال، مع تخزين المقبض الذي يشير إلى ذلك المفتاح الأساسي في البارامتر المتغير RegKeyHandle، و تعيد False إذا فشلت في ذلك، و تكون قيمة RegKeyHandle صفراً (0).
استعمل الإجراء DisconnectRemoteRegistry لقطع الاتصال بسجل نظام الحاسوب البعيد بعد الانتهاء من فراءة أو كتابة (حفظ) قيمة واحدة أو أكثر تابعة لمفتاح فرعي واحد أو أكثر. عند استدعاء هذا الإجراء يجب تمرير قيمة مقبض المفتاح الأساسي الذي تم فتحه سابقاً باستعمال الدالة ConnectToRemoteRegistry.

استعمل الدالة OpenRemoteSubKey لفتح المفتاح الفرعي الذي يحتوي على القيمة أو القيم التي تريد قراءتها أو حفظها. هذا المفتاح الفرعي يجب أن يكون تابعاً للمفتاح الأساسي الذي تم فتحه سابقاً باستعمال الدالة ConnectToRemoteRegistry. هذه الدالة (OpenRemoteSubKey) تعيد True في حالة نجاحها في فتح المفتاح الفرعي، مع تخزين المقبض الذي يشير إلى ذلك المفتاح الفرعي في البارامتر المتغير RegSubKeyHandle، و تعيد False إذا فشلت في ذلك، و تكون قيمة RegSubKeyHandle صفراً (0).
استعمل الإجراء CloseRemoteSubKey لإغلاق المفتاح الفرعي بعد الانتهاء من فراءة أو حفظ قيمة واحدة أو أكثر تابعة لذلك المفتاح. عند استدعاء هذا الإجراء يجب تمرير قيمة مقبض المفتاح الفرعي الذي تم فتحه سابقاً باستعمال الدالة OpenRemoteSubKey.

ما بين فتح المفتاح الفرعي (OpenRemoteSubKey) و إغلاقه (CloseRemoteSubKey) يمكنك استدعاء دوال قراءة المعلومات البعيدة و إجراءات كتابة المعلومات البعيدة للحصول على مختلف أنواع البيانات الموجودة في سجل نظام الحاسوب البعيد أو حفظها فيه.

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

مثال

const
   APP_REGISTRY_KEY = 'software\Daniyah Software Center\SchoolMoney0100SE';
   REG_SK_GENERAL = APP_REGISTRY_KEY + '\General';
var
   RegKeyHandle, RegSubKeyHandle: HKEY;
   SchoolYear: Integer;
   LastUser: string;
begin
   try
      if ConnectToRemoteRegistry('\\DANIYAH-CENTER',
            HKEY_CURRENT_USER, RegKeyHandle) then begin
         try
            if OpenRemoteSubKey(RegKeyHandle, REG_SK_GENERAL,
                  RegSubKeyHandle) then begin
               SchoolYear := ReadRegInteger(RegSubKeyHandle,
                  'SchoolYear');
               MsgBox(IntToStr(SchoolYear));
               LastUser := ReadRegString(RegSubKeyHandle,
                  'LastUser');
               MsgBox(LastUser);
               WriteRegString(RegSubKeyHandle, 'LastUser',
                  'ناجي إبراهيم');
               // Result3 := ReadRegXXX ....
               // ....
            end;
         finally
               CloseRemoteSubKey(RegSubKeyHandle);
            end;
         end;
      finally
         DisconnectRemoteRegistry(RegKeyHandle);
      end;
end;


 أعلى الصفحة
 الموضوع السابق   الموضوع التالي