PDA

نسخه کامل مشاهده نسخه کامل : تابع RegSetValueEx



HAMID484
26-07-2006, 17:25
من دارم برنامه ای میسازم که عکسی رو هنگام بالا اومدن ویندوز نشون بده که باید در رجیستری تغییراتی داده شود


HKEY_USERS\.DEFAULT\Control Panel\Desktop\Wallpaper

حالا این تغییرات رو میخوام با تابع Reg Set ValueEX انجام بدم


Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal _
hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType _
As Long, lpData As Any, ByVal cbData As Long) As Long

حالا مشکل من اینه که نمیدونم ادرس عکس مرتبط با کدوم متغییر هستش ظاهرا به LpData مربوطه ولی نمیدونم

چرا پیغام خطا میده

Payman_62
27-07-2006, 02:14
سلام.
اول با RegOpenKeyExA کلیدتو باز کن. بعد هندل به دست اومده رو بذار تو RegSetValueEx.
مقدار جدید رو هم درسته در lpData قرار بده.

HAMID484
27-07-2006, 19:39
اقا پيمان در متغيير Lpdata نميشه ادرس عكس رو بذاري , error ميده

Erfun
28-07-2006, 02:29
سلام
من یه سورس واست میزارم
اینو بخونی فکر کنم کاملا مشکلت حل بشه
فقط باید یک Textbox و دوتا command button توی فرم بذاری
البته چون محیط فارسیه یکم قاطی شده وقتی توی VB کپی کنی درست میشه




Private Const ERROR_SUCCESS = 0&

Private Const REG_OPTION_VOLATILE = 1
Private Const REG_OPTION_NON_VOLATILE = 0

Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_DYN_DATA = &H80000006
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003

Private Const KEY_WRITE = &H20006
Private Const KEY_READ = &H20019
Private Const KEY_ALL_ACCESS = &HF003F

Private Const REG_BINARY = 3
Private Const REG_DWORD = 4
Private Const REG_SZ = 1
Private Const REG_EXPAND_SZ = 2

Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal _
hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, _
phkResult As Long) As Long

Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal _
hKey As Long, ByVal lpValueName As String) As Long

Private Declare Function 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 As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, _
lpdwDisposition As Long) As Long

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal _
hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType _
As Long, lpData As Any, ByVal cbData As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long


Private Sub Command1_Click()
Dim hKey As Long
Dim subkey As String
Dim Retval As Long
Dim Buffer As Long
Dim secattr As SECURITY_ATTRIBUTES

subkey = "Software\Microsoft\Windows\CurrentVersion\Policies \Explorer"
secattr.nLength = Len(secattr)
secattr.lpSecurityDescriptor = 0
secattr.bInheritHandle = 1

Retval = RegCreateKeyEx(HKEY_CURRENT_USER, subkey, 0, "", 0, KEY_WRITE, secattr, hKey, ByVal 0&)
If Retval <> 0 Then
Exit Sub
End If
Buffer = &H1 'Value for Drive A
RegSetValueEx hKey, "NoDrives", 0, REG_BINARY, Buffer, Len(Buffer)
RegCloseKey hKey
Text1.Text = "NoDrives-->=Open"
End Sub


Private Sub Command2_Click()
Dim hKey As Long
Dim Retval As Long
Dim subkey As String

subkey = "Software\Microsoft\Windows\CurrentVersion\Policies \Explorer"
Retval = RegOpenKeyEx(HKEY_CURRENT_USER, subkey, 0, KEY_ALL_ACCESS, hKey)
If Retval = 0 Then
RegDeleteValue hKey, "NoDrives"
RegCloseKey hKey
Text1.Text = "NoDrives------->=Deleted"
End If
End Sub

Payman_62
28-07-2006, 20:25
سلام.
اگه مشکلت با کد آقا عرفان حل شد که هیچی. اگه نشد تیکه کدتو بذار تا مشکلشو پیدا کنیم.