نمایش نتایج: از شماره 1 تا 5 , از مجموع 5

موضوع: کار با ریجستری در ویژوال بیسیک

  1. #1
    کاربرسایت PARS آواتار ها
    تاریخ عضویت
    ۸۷-۰۲-۲۵
    نوشته ها
    666
    سپاس ها
    0
    سپاس شده 0 در 0 پست

    کار با ریجستری در ویژوال بیسیک

    کار با ریجستری در ویژوال بیسیک
    رجيستري چيست؟

    سيستم عامل ويندوز تنظيمات سخت افزاري و نرم افزاري خودرا بطور مرکزي در يک بانک اطلاعاتي با ساختار سلسله مراتبي ذخيره مي کندکه رجيستري نام دارد . رجيستري جايگزيني براي بسياري از فايلهاي پيکربنديINI ، SYS و COM است که در نسخه هاي اوليه ويندوز موجود بود . رجيستري ،سيستم عامل را با مهيا کردن اطلاعات موردنيز براي اجراي برنامه ها و loadشدن component ها ، کنترل مي کند .

    رجيستري شامل انواع مختلفي از اطلاعات مي باشد مثل :

    - اطلاعات سخت افزارهاي نصب شده روي سيستم
    - اطلاعات درايورهاي نصب شده روي سيستم
    - اطلاعات برنامه هاي نصب شده روي سيستم
    - اطلاعات پروتکلهاي شبکه اي مورد استفاده در سيستم

    ساختار رجيستري شامل چندين مجموعه رکورد است که داده هاي اين رکوردها توسطبسياري از برنامه ها و اجزاي سيستم عامل خوانده و يا نوشته مي شود .

    اجزاي رجيستري

    اجزاي تشکيل دهنده رجيستري عبارتند از :

    1 – subtree : Subtree ها همانند folder هاي موجود در ريشه يک درايو هارد هستند . رجستری ويندوز داراي پنج subtree مي باشد :
    - HKEY_LOCAL_MACHINE : شامل تمام داده هاي پيکربندي براي کامپيوتر ميباشد و شامل 5 key است :Hardware ، SAM ، Security ، Software و System
    - HKEY_USERS : شامل داده هاي مربوط به تنظيمات سيستم عامل براي هر user است مثل تنظيمات desktop و محيط ويندوز
    - HKEY_CURRENT_USER : شامل داده هاي کاربر فعلي سيستم
    - HKEY_CLASSES_ROOT : شامل اطلاعات پيکربندي نرم افزار است مثل داده هاي OLE و داده هاي کلاسهاي متناظر با فايل
    - HKEY_CURRENT_CONFIG : شامل اطلاعات مورد نياز براي تنظيمات داريورهاي سخت افزاري و غيره
    2 – Key : key ها همانند folder ها و subfolder هاي روي هارد هستند . هرkey متناظر با object هاي نرم افزاري يا سخت افزاري مي باشد . subkey هاkey هايي هستند که درون يکسري key قراردارند .

    3 – Entry : هر key داراي يک يا چند entry است . هر entry داراي سه بخش مي باشد:
    - نام Name
    - نوع داده اي Data Type : مقدار هر entry يکي از انواع داده هاي زير است:
    REG_DWORD ، REG_SZ ، REG_EXPAND_SZ ، REG_BINARY ،
    REG_MULTI_SZ ، REG_FULL_RESOURCE_DESCRIPTOT

  2. #2
    کاربرسایت PARS آواتار ها
    تاریخ عضویت
    ۸۷-۰۲-۲۵
    نوشته ها
    666
    سپاس ها
    0
    سپاس شده 0 در 0 پست

    Re: کار با ریجستری در ویژوال بیسیک

    - مقدار Value


    نکته 1 : براي مشاهده رجيستري و اعمال تغييرات در آن ( لطفاً اگر هيچتجربه اي در تنظيم کردن رجيستري نداريد اطلاعات آنرا تغيير ندهيد ) ، ميتوانيد از برنامه regedit.exe و يا regedt32.exe موجود در ويندوز استفادهکنيد . براي اينکار کافيست نام برنامه را در کادر Run وارد کنيد .

    براي کار با رجيستري در ويژوال بيسيک کلاس Registery.bas را مطابق مطالب زير ايجاد کرده و در پروژه هاي خود از آن استفاده کنيد :

    1 - تعريف ثابتهاي مورد نياز : براي نوشتن اين کلاس نياز به تعريف چهار دسته ثابت داريم :

    - ثابتهاي مربوط به تعريف data type هاي entry هاي رجيستري :

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


    - ثابتهاي مربوط به تعريف key هاي رجيستري

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

    - ثابتهاي مربوط به خطاهاي کار با رجيستري

    Global Const ERROR_NONE = 0

    Global Const ERROR_BADDB = 1
    Global Const ERROR_BADKEY = 2
    Global Const ERROR_CANTOPEN = 3
    Global Const ERROR_CANTREAD = 4
    Global Const ERROR_CANTWRITE = 5
    Global Const ERROR_OUTOFMEMORY = 6
    Global Const ERROR_INVALID_PARAMETER = 7
    Global Const ERROR_ACCESS_DENIED = 8
    Global Const ERROR_INVALID_PARAMETERS = 87
    Global Const ERROR_NO_MORE_ITEMS = 259

    - ثابتهاي متفرقه
    Global Const KEY_ALL_ACCESS = &H3F
    Global Const REG_OPTION_NON_VOLATILE = 0

    2 - Declare کردن Api هاي مورد نياز : براي کار با رجيستري از توابعکتابخانه Advapi32.dll استفاده مي کنيم . اين توابع عبارتند از :


    - تابع RegCloseKey : آزاد کردن handle مربوط به يک key
    Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    - تابع RegCreateKeyEx : ساخت يک key در رجيستري ( اگر key قبلاً وجود داشته باشد ، اين تابع آنرا باز مي کند):

    DeclareFunction 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 AsLong, ByVal lpSecurityAttributes As Long, phkResult As Long,lpdwDisposition As Long) As Long


    -تابع RegOpenKeyEx : باز کردن يک key
    DeclareFunction RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByValhKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByValsamDesired As Long, phkResult As Long) As Long



    - تابع RegQueryValueExLong : استخراج type و data ي يک نام متناظر با يک key باز شده


    DeclareFunction 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 AsLong) 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

  3. #3
    کاربرسایت PARS آواتار ها
    تاریخ عضویت
    ۸۷-۰۲-۲۵
    نوشته ها
    666
    سپاس ها
    0
    سپاس شده 0 در 0 پست

    Re: کار با ریجستری در ویژوال بیسیک

    - تابع RegSetValueEx : ذخيره يک مقدار در فيلد value يک کليد با
    DeclareFunction RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA"(ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved AsLong, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData AsLong) 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, ByValcbData As Long) As Long

    - تابع RegDeleteKey : پاک کردن يک کليد و کليه اطلاعات مرتبط با آن
    PrivateDeclare Function RegDeleteKey& Lib "advapi32.dll" Alias"RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)

    - تابع RegDeleteValue : حذف مقدار يک key
    PrivateDeclare Function RegDeleteValue& Lib "advapi32.dll" Alias"RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
    3- توابع کمکي : براي نوشتن توابع اصلي کار با رجيستري نياز به نوشتن توابع کمکي زير است:
    - تابع 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 ' type of value is string
    sValue = vValue
    SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))x
    Case REG_DWORD ' type of value is Double word
    lValue = vValue
    SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)x
    End Select
    End Function

    - تابع QueryValueEx : سايز و نوع داده اي يک داده را که بايد خوانده شود مشخص مي کند.
    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
    lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)x
    Select Case lType
    ' For strings
    Case REG_SZ:
    sValue = String(cch, 0)x
    lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)x
    If lrc = ERROR_NONE Then
    vValue = Left$(sValue, cch)x
    Else
    vValue = Empty
    End If
    ' For DWORDS
    Case REG_DWORD:
    lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)x
    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

  4. #4
    کاربرسایت PARS آواتار ها
    تاریخ عضویت
    ۸۷-۰۲-۲۵
    نوشته ها
    666
    سپاس ها
    0
    سپاس شده 0 در 0 پست

    Re: کار با ریجستری در ویژوال بیسیک

    4 - توابع اصلي : توابع مربوط به پاک کردن يک کليد از رجيستري ، ساخت يک کليد جديد در رجيستري و مقداردهي به يک کليد :

    - تابع DeleteKey : اين تابع يک کليد از رجيستري را حذف مي کند . داراي دو پارامتر ورودي است :
    Location که يکي از مقادير HKEY_CLASSES_ROOT ، HKEY_CURRENT_USER
    ، HKEY_LOCAL_MACHINE و يا HKEY_USERS است .
    KeyName که نام کليدي است که بايد از رجيستري حذف شود . اين کليد ممکنست شامل subkey هايي نيز باشد مثلاً Key1\SubKey1
    Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)x
    Dim lRetVal As Long
    lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)x
    DeleteKey = lRetVal ' return function value

    End Function



    - تابع DeleteValue: اين تابع يک entry را از کليدحذف مي کند . داراي سه پارامتر ورودي است : Location ، KeyName وValueName که نام آن value را مشخص مي کند .


    Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x
    Dim lRetVal As Long
    Dim hKey As Long
    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
    lRetVal = RegDeleteValue(hKey, sValueName)x
    RegCloseKey (hKey)x
    DeleteValue = lRetVal
    End Function



    - تابع CreateNewKey : اين تابع يک کليد جديد ايجاد مي کند . داراي دو پارامتر ورودي است : Location و KeyName
    Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)x
    Dim hNewKey As Long
    Dim lRetVal As Long
    lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&,vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey,lRetVal)x
    RegCloseKey (hNewKey)x
    CreateNewKey = lRetVal
    End Function


    - تابع SetKeyValue : اين تابع پارامتر data يک entryرا تنظيم مي کند . داراي 5 پارامتر ورودي است : Location ، KeyName ،ValueName ، ValueSetting و ValueType

    PublicFunction SetKeyValue(lPredefinedKey As Long, sKeyName As String,sValueName As String, vValueSetting As Variant, lValueType As Long)x
    Dim lRetVal As Long
    Dim hKey As Long
    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
    lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)x
    RegCloseKey (hKey)x
    SetKeyValue = lRetVal
    End Function

    - تابع QueryValue : اين تابع فيلدداده يک entry را برمي گرداند . داراي سه پارامتر ورودي است : Location ،KeyName و ValueName
    Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x
    Dim lRetVal As Long
    Dim hKey As Long
    Dim vValue As Variant
    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
    lRetVal = QueryValueEx(hKey, sValueName, vValue)x
    QueryValue = vValue
    RegCloseKey (hKey)x
    End Function


  5. #5
    کاربرسایت PARS آواتار ها
    تاریخ عضویت
    ۸۷-۰۲-۲۵
    نوشته ها
    666
    سپاس ها
    0
    سپاس شده 0 در 0 پست

    Re: کار با ریجستری در ویژوال بیسیک

    ساخت يک انتصاب فايل يا File Association به يک برنامه

    در اين درس می خواهم با استفاده از کلاسی که در درس قبل معرفی شد تابعیبسازيم که توسط آن بتوانيم فايلهای با پسوندی مشخص را به يک برنامه اختصاصدهيم . بعبارت ديگر تابعی بنويسيم که اطلاعات لازم برای باز شدن فايلهايیبا پسوند 3+x را توسط برنامه MyApp.exe در رجيستری ثبت کند.
    Public Sub CreateAssociation(sExtension As String, sApplication As String, sAppPath As String)x
    Dim sPath, sAppExe As String
    CreateNewKey "." & sExtension, HKEY_CLASSES_ROOT
    SetKeyValue HKEY_CLASSES_ROOT, "." & sExtension, "", sApplication & ".Document", REG_SZ
    CreateNewKey sApplication & ".Document\shell\open\command", HKEY_CLASSES_ROOT
    SetKeyValue HKEY_CLASSES_ROOT, sApplication & ".Document", "", sApplication & " Document", REG_SZ
    sPath = sAppPath & " %1"x
    sAppExe = sApplication & ".exe"x
    SetKeyValue HKEY_CLASSES_ROOT, sApplication& ".Document\shell\open\command", "", sPath, REG_SZ
    CreateNewKey "Software\Microsoft\Windows\CurrentVersion\Explore r\FileExts\." & sExtension, HKEY_CURRENT_USER
    SetKeyValue HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Exp lore r\FileExts\." &sExtension, "Application", sAppExe, REG_SZ
    CreateNewKey "Applications\" & sAppExe & "\shell\open\command", HKEY_CLASSES_ROOT
    SetKeyValue HKEY_CLASSES_ROOT, "Applications\" & sAppExe & "\shell\open\command", "", sPath, REG_SZ
    End Sub

    کاربرد اين تابع بصورت زير است:
    CreateAssociation("3+x","MyApp","c:\MyApp.exe")x


    اجرا شدن يک برنامه در هنگام راه اندازی سيستم
    فرض کنيد می خواهيم برنامه ای بنويسيم که هر بار در هنگام راه اندازيسيستم بطور خودكار اجرا شود. البته نمي خواهم در startup ويندوز ديده شود .
    براي اين كار بايد برنامه موردنظر را در StartUp رجيستري قرار دهيم . بهاين ترتيب كه در يكي از كليدهاي زير يك مقدار رشته اي جديد(String Value)ايجاد کنيم و آدرس برنامه را در آن وارد كنيم:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Curre ntVersion\Run
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run

    براي مثال اگه اسم برنامه مورد نظر MyApp و مسيرش C:\Windows\MyApp.exe است بايد بصورت زير عمل کرد:
    SetKeyValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run ", "MyApp", "C:\MyApp.exe", REG_SZ



    نکته : البته دو تا راه ديگر برای اينکار وجود دارد که برخی تروجانها هم از اين روشها استفاده می کنند تا روی سيستم باقی بمانند :
    يكي استفاده از win.ini و نوشتن نام فايل جلوي = run و ديگري استفاده از system.ini و نوشتن نام برنامه جلوي خط explorer.exe .

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. آموزش گام به گام ویژوال بیسیک6.0
    توسط PARS در انجمن ويژوال و ويژوال بيسيك
    پاسخ ها: 84
    آخرين نوشته: دوشنبه ۱۹ بهمن ۸۸, ۲۰:۱۹
  2. تاریخچه ویژوال بیسیک
    توسط PARS در انجمن ويژوال و ويژوال بيسيك
    پاسخ ها: 0
    آخرين نوشته: دوشنبه ۱۹ بهمن ۸۸, ۱۹:۰۴
  3. تست ویژوال بیسیک فصل 2
    توسط SAREH در انجمن ويژوال و ويژوال بيسيك
    پاسخ ها: 0
    آخرين نوشته: پنجشنبه ۲۸ شهریور ۸۷, ۲۳:۰۵
  4. فصل اول و دوم ویژوال بیسیک
    توسط SAREH در انجمن ويژوال و ويژوال بيسيك
    پاسخ ها: 0
    آخرين نوشته: پنجشنبه ۲۸ شهریور ۸۷, ۰۰:۳۳
  5. توابع ریاضی در ویژوال بیسیک
    توسط hrg1356 در انجمن برنامه نویسی
    پاسخ ها: 0
    آخرين نوشته: چهارشنبه ۰۹ آبان ۸۶, ۲۰:۵۹

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •