Parsi Coders

نسخه‌ی کامل: دلفی و رجیستری
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
برنامه ی رجیستری برنامه ای می باشد كه ویندوز آن را در اختیار كاربر قرار داده است تا بتواند در دستورات و مقدارهای registery تغییراتی را به دلخواه ایجاد كند .
می توان گفت كه انگیزه ی ساختن برنامه ی رجیستری از آنجایی شروع شد كه كاربران Ms-DOS از این كه عملا هیچگونه اختیاری در تنظیم منو ، پنجره ها و ... نداشتند ،خسته شدند. البته Ms-DOS از رجیستری مستثنی نبود و سه فایل Config.sys , MsDos.sys, Autoexec.Bat وجود داشتند كه سیستم عامل Dos و جمعا برنامه های كاربردی تنظیماتی مانند اختصاص دادن Buffer و یا تعریف Cdrom و غیره را در این فایل ها ثبت می كردند. در واقع این سه فایل نقش رجیستری را ایفا می كردند. بعد از DOS سیستم عامل Win۳X به بازار آمد. در این سیستم عامل فایلهایی با پسوند ini كه مهمترین آنها Win.ini , System.ini, Control.ini بودند، وظیفه رجیستری را بر عهده داشتند . در نهایت نسل سوم رجیستری با روی كار آمدن ویندوز ۹X وارد بازار شد. در این سیستم ها علاوه بر داشتن سه فایل Win۳X دو فایل دیگر با نامهای System.dat , User.dat اضافه شد .

تعریف رجیستری : برنامه ی رجیستری برنامه ای می باشد كه ویندوز آن را در اختیار كاربر قرار داده است تا بتواند در دستورات و مقدارهای registery تغییراتی را به دلخواه ایجاد كند .
لازم به ذكر است كه اگر اطلاعات كافی در مورد قسمتی از رجیستری ندارید هیچگاه آن را تغییر ندهید زیرا هر تغییری در رجیستری سریعا اعمال خواهد شد و برنامه ی regedit.exe هیچگونه تاییدی از كاربر نخواهد گرفت . Regedit.exe را چه چگونه اجرا كنیم؟ برای اجرا كردن Regedit.exe وارد منوی Run از دكمه Start شده، تایپ كنید Regedit.exe ، با فشردن دكمه ی OK برنامه اجرا خواهد شد . رجیستری شامل دو پنجره است كه در پنجره ی سمت چپ ریشه و در پنجره ی سمت راست مقدارها مشخص می شود. در پنجره ی سمت چپ یك ریشه به نام My Computer و۵ شاخه با عنوان های زیر وجود دارد : ۱ - HKEY_CLASSES_ROOT : شامل تناظر پسوند فایل ها و سایر تنظیمات ویندوز است . ۲ -HKEY_CURRENT_USER : شامل تنظیماتی كه مختص كاربر فعلی است . ۳ - HKEY_LOCAL_MACHINE : شامل تنظیماتی كه به طور سراسری اعمال می شود و به كاربر وابسته نیست . ۴ -HKEY_USERS : شامل تنظیماتی كه مختص هر یك از كاربران متعدد كامپیوتر ، از جمله كاربر فعلی است . ۵ - HKEY_CURRENT_CONFIG : شا مل تنظیماتی كه مختص پیكربندی سخت افزار موجود می باشد . اگر مفاهیم اولیه ی رجیستری را به خوبی یاد بگیرید دیگر هیچگاه واهمه ای در اعمال تغییرات در آن نخواهید داشت .

====================================

برای استفاده از رجیستری ابتدا باید یونیت Registry را به لیست یونیتهای دلفی در قسمت Uses اضافه کنید.
دکمه ای روی فرم قرار داده در رویداد OnClick اون ابتدا قبل از Begin کلمه ی Var را اضافه کرده و متغیری مانند Reg از نوع Tregistry تغریف نمایید.
بعد از Begin کلاس رجیستری را ایجاد می نماییم. کد شما یه شکل زیر خواهد بود.
کد:
procedure TForm1.Button1Click(Sender: TObject);
var
  reg:tregistry
begin
  reg:=TRegistry.Create;
end;
بعد از این خط کلمه ی reg را وارد کرده و نقطه را بزنید. لیست متدها و دستورات مرتبط با کلاس رجیستری ظاهر می گردند . شما می توانید با توجه به توضیح پست اول با مفهوم آنها آشنا شوید. در قسمت بعد به طور مختصر توضیحی در مورد هر یک خواهیم داد و در نهایت یک برنامه ی ساده را خواهیم نوشت تا نحوه ی کار با اون آشنا بشید.

====================================
ابتدا متد Rootkey .
این متد برای تعریف یک شاخه ی پیش فرض اولیه به کار می رود و مقدار اون فقط می تواند 5 شاخه ی ذکر شده در پست اول باشد.
مثلا
کد:
reg.rootkey:=Hkey_current_user;
با تعریف این دستور به دلفی می گوییم که تمام اعمالی که روی رجیستری از جمله ثبت و خواندن زیرشاخه ها و مقادیر انجام می گردد مربوط به این شاخه می باشد. در صورتی که عمل خواند را باید در شاخه ی دیگری انجام دهیم باید به طور مستقیم این شاخه را تغییر دهیم و مقدار دیگری را به آن اختصاص دهیم
شما برای کار با رجیستری در دلفی نیاز به تعریف و نوشتن هیچ کلاس و متد و آبجکت ندارید شرکت برای کار با رجیستر یه یونیت با همین نام Registry ارائه داده است برای کار با رجیستر شامل کلاس TRegistry که دارای روال ها و تابع های خاصی مثل

CreateKey یا WriteString یا DeleteKey یا MoveKey یا ReadFloat و....میباشد. نحو اصلی کار با رجیستری و ثبت کردن مقدار ایجاد یک کلید و.... به این صورت می باشد که :

ابتدا یونیت رجیستری رو به لیست Uses یونیتمون اضافه می کنیم به شکل زیر :
کد:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Registry;
متغیر باید از نوع کلاس TRegistry تعریف کنیم تا بتوانیم از توابع آن ها استفاده کنیم. به شکل زیر
کد:
Var
B:TRegistry;
سپس باید یک نوع از کلاس را بوجود بیاوریم که طبق معمول باید از constructorایجاد کنیم مربوط به اکثر کلاس ها استفاده کنیم به شکل زیر
کد:
b:=TRegistry.Create;
برای کار با رجیستری باید به یکی از کلیدهای زیر اشاره کنیم که عبارتند از :
کد پی‌اچ‌پی:
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG
HKEY_DYN_DATA 
برای این که یکی از این مقدار ها را انتخاب کنیم باید از پراپرتی RootKey به شکل زیر استفاده کنید :

B.RootKey:=HKEY_LOCAL_MACHINE;

سپس باید آدرس مربوط به کلیدی که می خواهیم در آن اعمال انجام دهیم رو با استفاده از تابع OpenKey مشخص کنیم به شکل زیر :

B.OpenKey(آدرس کلید مربوطه , اجازه بوجود آوردن کلید )

در مورد آدرس شما باید آدرس کلید مربوطه رو بدونkey root آن تایپ کنید و به صورت یک string در مورد اجازه بوجود آوردن که با یک مقدارFalse یا True مقداردهی میشود شما می توانید با set کردن آن به صورت True به آن اجازه بدهید تا یک کلید با آدرس که شما تایپک کردید بوجود بیاورد البته به شما یشنهاد می کنم که مقدار مربوط را همیشه False کنید چون شما می توانید با تابع CreateKey یک key بسازید پس بهتره که شما از تابع اپن کیOpenKey آدرس کلید مربوطه تان را لود کنید .

سپس شما در این مرحله قادر هستید تا هر کاری انجام دهید مثلا می توانید :

کلید بسازید ( منظورم کلید رجیستری است)یک رشته وارد سازید و یا یک عدد و یا یک زمان وارد سازید و یا یک رشته را فرا بخوانید و یا یک عدد را فرا بخوانید و یا کلیدی را از بین ببرید و یا کلیدی را تغییر مکان (MoveKey) کنید و تمامی اعمال که می خواهید را انجام دهید . برای مثال به کد زیر یک نگاه بیندازید این کد task manager (ctrl+Alt+Delete) را غیر فعال می کند:
کد:
var
dbm: Tregistry;
begin
DbM:= tregistry.Create;
DbM.RootKey:= HKEY_CURRENT_USER;
DbM.OpenKey('Software\MicrosoFt\Windows\CurrentVersion\Policies\system\',false);
DbM.WriteInteger('DisableTaskMgr',0);
DbM.Free;
end;
فکر کنم که کار با توابع رجیستری رو آموخته باشید همین طور که می بینید تمام کار ها گفته شده انجام شده و تمام تابع ها آشنا می باشد در ضمن تابع WriteInteger توابعی از این دست برای ثبت یک عدد ویا یک مقدار در رجیستری می باشد این تابع ها خیلی زیادند وهمه دارای ساختمانی به شکل زیر می باشند

نام تابع (نام مقداری که باید از نو ثبت شود و یا با نویسی شود , مقدار)

همچنین توابعی نیز برای خوندن یک مقدار و باز گرداندن یک مقدار ووجود دارد مثل ReadString که اکثرا داری یک نوع ساختمان می باشند برای مثال با استفاده از کد زیر می توانید مسیر کوکی ها را از رجیستری بخوانید :
کد:
var
reg : tregistry;
Cooki:String;
begin
reg := tregistry.Create;
reg.RootKey := hkey_current_user ;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',true);
Cooki := reg.ReadString('Cookies');


end;
ساختمان تابع های خواندنی به شکل زیر می باشد

نام تابع (نام عبارتی که باید خوانده شود )