PDA

View Full Version : کنترل وجود یک کلید در رجیستری



hadi2010
شنبه 20 اسفند 1384, 17:33 عصر
سلام به دوستان برنامه نویس من یک کلید تویه رجیستری ساختم می خوام اول اجرای برنامه وجود اون کلید کنترل بشه اگر امکانش هست راهنمائی کنید

Payman62
شنبه 20 اسفند 1384, 20:19 عصر
این یه مثال
RegOpenKeyExA HKEY_CLASSES_ROOT, "Software\Microsoft\MediaPlayer", 0, KEY_READ, hKey
hKey هندل این کلید هست: HKEY_CLASSES_ROOT\Software\Microsoft\MediaPlayer
حالا میتونی این کلید رو پاک کنی یا تو این کلید دنبال کلید دیگر یا یک value بگردی یا ...
با تابع RegEnumKeyExA میتونی دنبال کلیدت بگردی. به این صورت:


Private Const READ_CONTROL = &H20000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL
Private Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
Private Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const HKEY_PERFORMANCE_DATA = &H80000004

Private Declare Function RegOpenKeyExA Lib "advapi32" (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 RegEnumKeyExA Lib "advapi32" (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 RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
Private Const ERROR_NO_MORE_ITEMS = 259&

Private Sub Form_Load()
Dim sName As String, strRegKeyName
Dim Ret As Long, hKey As Long, Cnt As Long
Const BUFFER_SIZE As Long = 255
Ret = BUFFER_SIZE
sName = Space(BUFFER_SIZE)
RegOpenKeyExA HKEY_CLASSES_ROOT, "Software\Microsoft\MediaPlayer", 0, KEY_READ, hKey
While RegEnumKeyExA(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
strRegKeyName = Left$(sName, Ret)
If strRegKeyName = "Esme kelideto inja bezar" Then
'har kari lazeme anjam beshe va RegCloseKey hKey va exit sub ham toosh bezar
End If
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
Wend
RegCloseKey hKey
End Sub

davood110
یک شنبه 21 اسفند 1384, 13:37 عصر
سلام
دوست عزیز خیلی ساده می تونی این کاررا بکنی تابع getsetting که مقداری را از رجیستری می خونه آخرین پارامترش مقدار پیش فرض است(defualt) که اگر این کلید وجود نداشته باشه یا مقداری نداشته باشه این تابع مقدار پیش فرض ورودی را برمی گردونه خیلی ساده پارامتر defualt را یه مقداری که می دونی اصلا توی اون کلید ذخیره نمی شه قرار بده و بعد هر جای برنامه که خواستی چک کن ببین تابع getsetting مقدار defualt را برمی گردونه یا نه؟