PDA

View Full Version : سوال: سرچ در ریجستری و پیدا کردن key یا type مورد نظر



R2du-soft
چهارشنبه 18 مرداد 1391, 01:26 صبح
سلام
چطوری میشه تو ریجستری سرچ کرد و key مورد نظر رو حذف کرد؟
ویا Value مورد نظر رو پیدا کرد و حذف کرد؟
مثلا چطور بگیم هرچی key با نام reza بود رو پیدا و حذف کنه و یا هرچی Value در ریجستری با نام reza هست رو حذف کنه?
هرچی تو سایت گشتم مطلبی درباره سرچ در ریجستری پیدا نکردم!
میشه راهنماییم کنید؟
ممنون:قلب:

setroyd
چهارشنبه 18 مرداد 1391, 18:42 عصر
نیست چون برای این کار نیاز به یه کد نویسی قوی هست که فرمول خاصی داره باری کار رو رجیستری همون api های موجود کافیه که تو سایت هست ولی برای سرچ کردن نیاز به یه کد نویسی پیچیده هست امیدوارم متوجه منظورم شده باشید

R2du-soft
چهارشنبه 18 مرداد 1391, 22:44 عصر
یعنی هیچ کسی تاحالا پیدا نشده که این کد رو نوشته باشه و در اختیار عموم قرار داده باشه؟ :متفکر:

setroyd
چهارشنبه 18 مرداد 1391, 23:22 عصر
چرا من چندتا سورس تو این زمینه دانلود کرده بودم ولی هزچی گشتم ندیدمش حالا پیدا کردم برات میزارم .

R2du-soft
چهارشنبه 18 مرداد 1391, 23:52 عصر
دست گلت درد نکنه ، خیلی ممنون لطف میکنی گلم :قلب:

butterfly8528
پنج شنبه 19 مرداد 1391, 01:58 صبح
سلام .
انجام اين كار با استفاده از توابع RegEnumKeyEx و RegEnumValue به راحتي امكان پذير است .
مثال :
Const ERROR_NO_MORE_ITEMS = 259&
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim hKey As Long, Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long
Const BUFFER_SIZE As Long = 255
'Set the forms graphics mode to persistent
Me.AutoRedraw = True
Me.Print "RegEnumKeyEx"
Ret = BUFFER_SIZE
'Open the registry key
If RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\VisualStudio\6.0", hKey) = 0 Then
'Create a buffer
sName = Space(BUFFER_SIZE)
'Enumerate the keys
While RegEnumKeyEx(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
'Show the enumerated key
Me.Print " " + Left$(sName, Ret)
'prepare for the next key
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
Wend
'close the registry key
RegCloseKey hKey
Else
Me.Print " Error while calling RegOpenKey"
End If
Me.Print vbCrLf + "RegEnumValue"
Cnt = 0
'Open a registry key
If RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\VisualStudio\6.0", hKey) = 0 Then
'initialize
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
'enumerate the values
While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
'show data
If RetData > 0 Then Me.Print " " + Left$(sName, Ret) + "=" + Left$(sData, RetData - 1)
'prepare for next value
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
Wend
'Close the registry key
RegCloseKey hKey
Else
Me.Print " Error while calling RegOpenKey"
End If
End Sub



موفق باشيد . :لبخندساده:

R2du-soft
پنج شنبه 19 مرداد 1391, 16:43 عصر
ممنون داداشی butterfly8528 (http://barnamenevis.org/member.php?75627-butterfly8528) خیلی لطف کردی
فقط یه زحمتی میکشی که در مورد این کد توضیح بدی و بگی که چطوری میشه با این تابع هرچی key توی ریجستری با مثلا اسم reza هست رو بگرده و پیدا و بالاخره پاکشون کنه؟
و دوم اینکه هرچی key که خالی هستن رو بگرده و پاک کنه؟
بعد برای استفاده از این تابع از Refrences چیزی نمیخواد که انتخلب کنیم؟
ممنون :قلب:

محسن واژدی
پنج شنبه 19 مرداد 1391, 19:21 عصر
در مورد این کد توضیح بدی سلام علیکم
RegEnumKeyEx: زیرکلیدهای موجود در یک کلید را برمیگرداند(زیرکلید های ریشه در کلید اصلی)
RegEnumValue: داده های موجود در یک کلید را برمیگرداند (نام داده ها)

در واقع میتوانیم از این دو تابع + سایر توابع کنترل ریجستری یک جستجوگر ریجستری بنویسیم


بگی که چطوری میشه با این تابع هرچی key توی ریجستری با مثلا اسم reza هست رو بگرده و پیدا و بالاخره پاکشون کنه؟
و دوم اینکه هرچی key که خالی هستن رو بگرده و پاک کنه؟ همانطور که در بالا عرض شد این توابع درواقع ابزاری هستند که با آنها + سایر توابع ریجستری میتوانیم یک جستجوگر قوی ایجاد کنیم


بعد برای استفاده از این تابع از Refrences چیزی نمیخواد که انتخلب کنیم؟ خیر

موفق باشید

butterfly8528
پنج شنبه 19 مرداد 1391, 23:42 عصر
سلام .
توضيحات لازم رو آقاي واژدي لطف كردن دادند .
نمونه كد هاي زير رو هم بررسي كنيد :
RegEdit 2.0 BETA (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=67968&lngWId=1)
Registry Tree View (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=73646&lngWId=1)
Registry Editor (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=73070&lngWId=1)
موفق باشيد . :لبخندساده: