1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش کار با رجیستری در سی شارپ

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن C #C++

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    در هنگام نوشتن یک برنامه در مواقعی بایستی مقداری را در یک مکان از سیستم کاربر ذخیره کنیم . انتخاب برنامه نویسان در این گونه موارد معمولا از بین سه گزینه ی زیر می باشد :
    1- DataBase
    2- فایل های INI
    3- رجیستری ( تنها در برنامه نویسی برای سیستم های ویندوزی کاربرد دارد )


    استفاده از DataBase : به منظور نگهداری تعداد زیادی از مقادیر ، بهترین گزینه است . همچنین در صورتی که پای امنیت اطلاعات ذخیره شده در میان است ، در انجام این روش شک نکنید . در این روش میتوانید از قابلیت Password Protection که در تمامی بانک های اطلاعاتی وجود دارد ، استفاده کنید .
    استفاده از فایل های INI: در بعضی موارد هم میتوان از این روش استفاده کرد . البته این روش همراه با پیچیدگی و امنیت پایین میباشد .
    استفاده از رجیستری : روشی که قصد توضیح آن را داریم ، همین روش است . این روش دارای امنیت نسبتا پایینی ست . پس امنیت اطلاعات خود را با این روش به خطر نیاندازید . البته میتوانید اطلاعات خود را به صورت Encrypt شده در رجیستری قرار دهید ( مثلا مواقعی که قصد ذخیره یک رمز عبور ، در یک برنامه ساده را دارید ) . یکی از مزایای این روش سادگی و راحتی آن است .
    اگر موافق باشید ، به سراغ مراحل عملی کار برویم :
    یک پروژه ی جدید سی شارپ باز کنید و اسم آن را [SIZE=+0]Registry in CS بگذارید .[/SIZE]
    حالا وارد قسمت کد نویسی شده و Name Space زیر را در قسمت General تعریف کنید :
    using Microsoft.Win32;
    حالا میتوانید خیلی راحت در هر جایی از برنامتان از کلاس Registry استفاده کنید .
    در قسمت زیر اجزای این کلاس را مورد بررسی قرار خواهیم داد :
    1- [SIZE=+0]Registry.ClassesRoot[/SIZE]
    از این قسمت میتوانید برای انجام عملیات مختلف بر روی شاخه HKEY_CLASSES_ROOT استفاده کنید .
    چون متدها به صورت Alphabetic مرتب شده اند ، بنده هم آنها را به ترتیب توضیح میدهم . البته در یک مورد استثنا وجود دارد . آن هم متد OpenSubKey هست که باید در ابتدا توضیح بدهم ، چون تعداد زیادی از متدها به این متد وابستگی دارند .
    1-1 : [SIZE=+0]OpenSubKey[/SIZE]
    بوسیله این متد میتوانید یک زیر کلید را باز کنید . برای مثال به کد زیر دقت کنید :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    در این کد نکات زیادی وجود دارد .
    خط اول : یک متغییر از نوع RegistryKey تعریف کردیم .
    خط دوم : مقدار متغییر reg را که در بالا تعریف کرده بودیم ، برابر کلید بازشده ( GC ) قرار دادیم تا بتوانیم عملیات مورد نظر خود را روی کلید باز شده انجام دهیم .
    البته اگر خواستید زیر کلیدهای بیشتری را باز کنید ، باید از کد زیر استفاده کنید :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GCClsid”,true);
    در همان خط دوم یک کلمه [SIZE=+0]true می بینید . شاید بپرسید این کلمه چه معنایی دارد ؟! این کلمه به برنامه میگوید که کاربر دسترسی به این کلید را تایید میکند ( در بعضی مواقع دسترسی باید تایید شود ) .[/SIZE]
    1- 2 : [SIZE=+0]Close[/SIZE]
    این متد کلید قبلی را که توسط متد OpenSubKey باز شده بود ، میبندد . بهتر است بعد از هر بار که متد OpenSubKey را به کار میگیرید ، در پایان کارتان متد Close را اجرا کنید .
    1- 3 : [SIZE=+0]CreateSubKey[/SIZE]
    وظیفه این متد ساخت یک زیر کلید است . کد زیر را ببینید :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    reg.CreateSubKey(“NewSubKey”);
    1- 4 : [SIZE=+0]DeleteSubKey[/SIZE]
    اگر خواستید یک زیر کلید را حذف کنید ، میتوانید از این متد استفاده کنید . کد زیر همان کلید قبلی را که ساختیم پاک میکند :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    reg.DeleteSubKey(“NewSubKey”);
    1- 5 : [SIZE=+0]DeleteSubKeyTree[/SIZE]
    این متد یک کلید با تمام زیر کلیدهایش و مقادیر زیر مجموعه اش را پاک میکند :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    [SIZE=+0]reg.DeleteSubKeyTree(“NewSubKey”);[/SIZE]​
    1- 6 : [SIZE=+0]DeleteValue[/SIZE]
    این متد هم که از نامش پیداست . پاک کردن یک مقدار کار این متد است . به کد زیر توجه کنید :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    [SIZE=+0]reg.DeleteValue(“Your Value”); [/SIZE]​
    1- 7 : [SIZE=+0]Flush[/SIZE]
    خوب است در هر قسمتی که کارتان با رجیستری تمام شد ، یک بار این متد را فراخوانی کنید . البته متد Close کار این متد ( Flush ) را هم انجام خواهد داد .
    [SIZE=+0]Registry.ClassesRoot.Flush();[/SIZE]​
    1- 8 : [SIZE=+0]GetAccessControl[/SIZE]
    به MSDN مایکروسافت مراجعه کنید .
    1- 9 : [SIZE=+0]GetSubKeyName[/SIZE]
    با استفاده از این کد میتوانید زیر کلیدهای یک کلید رجیستری را بدست بیاورید . فقط قبل از اینکه کد زیر را اجرا کنید ، یک لیست باکس به فرمتان اضافه کنید و خاصیت Name آن را برابر با listBox قرار دهید :
    [SIZE=+0]RegistryKey Reg;[/SIZE]​
    Reg = Registry.CurrentUser.OpenSubKey(“Software”);
    //————-
    foreach (string strSubKeysName in Reg.GetSubKeyNames())
    {
    listBox.Items.Add(strSubKeysName);
    }
    1- 10 : [SIZE=+0]GetValue[/SIZE]
    این متد میتواند مقدار یک Value را برگرداند . کد زیر را ببینید :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    [SIZE=+0]MessageBox.Show(reg.GetValue(“Your Value”).ToString());[/SIZE]​
    1- 11 : [SIZE=+0]GetValueKind[/SIZE]
    با این متد میتوانید نوع یک Value را دریافت کنید .
    انواع Value عبارتنداز :
    1- String
    2- Binary
    3- DWORD
    4- Multi-String
    5- Expandable
    به این کد توجه کنید :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    MessageBox.Show(reg.GetValueKind(“Your Value”).ToString());
    1- 12 : [SIZE=+0]GetVlaueNames[/SIZE]
    با این کد هم میتوانید مقادیر موجود در یک کلید را بدست بیاورید . کد زیر :
    [SIZE=+0]RegistryKey Reg;[/SIZE]​
    Reg = Registry.CurrentUser.OpenSubKey(“SoftwareMy APPSettings”);
    //————-
    foreach (string strSubKeysName in Reg.GetValueNames())
    {
    listBox1.Items.Add(strSubKeysName);
    [SIZE=+0]}[/SIZE]​
    1- 13 : [SIZE=+0]Name[/SIZE]
    این یکی هم مسیر جاری رجیستری را برمیگرداند :
    [SIZE=+0]RegistryKey reg;[/SIZE]​
    reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
    MessageBox.Show (reg.Name);
    1- 14 : [SIZE=+0]SetAccessControl[/SIZE]
    به MSDN مایکروسافت مراجعه کنید .
    1- 15 : [SIZE=+0]SetValue[/SIZE]
    بوسیله این متد میتوانید یک مقدار را در رجیستری بنویسید :
    [SIZE=+0]RegistryKey Reg;[/SIZE]​
    Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);
    //————-
    [SIZE=+0]Reg.SetValue(“My Value”, “Program”,RegistryValueKind.String); [/SIZE]​
    یک نکته در این کد وجود دارد . در خط سوم کدها آنجا که نوشته شده [SIZE=+0]RegistryValueKind.String، اینجا نوع متغییر تنظیم شده است . انواع متغیر ها را میتوانید در راهکار 1- 11 مشاهده کنید . [/SIZE]
    1- 16 : [SIZE=+0]SubKeyCount [/SIZE]
    این یکی هم تعداد زیر کلیدهای یک کلید رجیستری را بازگشت خواهد داد :
    [SIZE=+0]RegistryKey Reg;[/SIZE]​
    Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);
    //————-
    [SIZE=+0]MessageBox.Show(Reg.SubKeyCount.ToString()); [/SIZE]​
    1- 17 : [SIZE=+0]ValueCount[/SIZE]
    و اما آخرین مورد . بوسیله این تابع میتوانید تعداد متغییرهای داخل یک کلید را بدست بیاورید .
    [SIZE=+0]RegistryKey Reg;[/SIZE]​
    Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);
    //————-
    [SIZE=+0]MessageBox.Show(Reg.ValueCount.ToString()); [/SIZE]​