PDA

View Full Version : سوال: پاک کرد کلید ها و مقدار ها در رجیستری



good_boy
دوشنبه 28 بهمن 1387, 21:48 عصر
سلام دوستان
یه مشکل دارم من وقتی می خوام تمام مقدار های این زیر کلید پاک کنم شدنی
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run
ولی وقتی می خوام تمام مقدارها(value) و زیرکلیدها رو پاک کنم در این مسیر نمیشه
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run
من از این سورس کد استفاده می کنم
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long

Private Sub Command1_Click()
Me.Caption = RegDeleteKey(&H80000002, "Software\microsoft\windows\currentversion\run")
End Sub
حد اقل بگید چطور میشه فقط محتویات این کلید پاک کرد
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run

xxxxx_xxxxx
دوشنبه 28 بهمن 1387, 22:41 عصر
سلام
دليلش اينه كه تو اون مسير زير كليدي وجود نداره ولي تو مسيري كه از LOCAL_MACHINE ميريد زير كليد داره
منظور زيركليدهاي Run هست.
اول بايد اونها رو پاك كنيد بعد Run رو پاك كنيد.

good_boy
سه شنبه 29 بهمن 1387, 08:27 صبح
سلام دوست عزیز
حالا دستوری وجود نداره که فقط محتویاط کلید پاک کنه و به زیر کلید ها کاری نداشته باشه
چون من فقط می خوام محتویات کلید run پاک کنم و با زیر کلید ها کاری ندارم

xxxxx_xxxxx
سه شنبه 29 بهمن 1387, 13:35 عصر
دو حالت وجود داره:
1- شما از نام مقادير موجود در كليد Run آگاهي داريد.
2- " " " " " " " نداريد.

براي حالت اول مي تونيد از دو تابع RegOpenKeyExA و RegDeleteValueA استفاده كنيد. به اين صورت كه اول مسيرو باز مي كنيد و بعد مقدار موردنظر رو از اون مسير حذف مي كنيد. به اين صورت:
تعريف توابع:

Private Declare Function RegOpenKeyExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
Private Declare Function RegDeleteValueA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String) As Long

دستورات:


Dim h As Long
Me.Caption = RegOpenKeyExA(&H80000002, "Software\microsoft\windows\currentversion\run", 0, &H2, h)
Me.Caption = RegDeleteValueA(h, "ABC")

مقداري با نام ABC از اون مسير حذف ميشه.
----------
حالت دوم اين كه شما نام مقادير موجود در كليد Run رو نمي دونيد. در اين حالت بايد از يك تابع ديگه به نام RegEnumValueA استفاده كنيد. اين تابع براي شما يك مقدار از يك كليد رو برميگردونه. و شما بايد با استفاده از يك حلقه تمام مقادير رو برگردونيد.(نام هايشان را). بعد هم تو همون حلقه يكي يكي مقادير رو توسط نامشون حذف كنيد.
اين روشي بود كه به ذهنم رسيد. اگه دوستان روش ديگه رو مدنظر دارند بگند تا ما هم ياد بگيريم.
من تاحالا از اين تابع (RegEnumValueA) استفاده نكردم، نمي تونم نمونه مثال براتون بزارم. فقط نحوه تعريف اين تابع:


Private Declare Function RegEnumValueA Lib "advapi32.dll" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long


موفق باشيد/

good_boy
چهارشنبه 30 بهمن 1387, 18:40 عصر
کسی راهکاری بهتر نداره