PDA

View Full Version : دو سوال در مورد رجیستری !!



rtech
جمعه 23 دی 1384, 09:11 صبح
سلام بر دوستان برنامه نویس عزیز
من 2 تا سوال در مورد رجیستری در VB دارم
من یک TExt box دارم که یک مقدار از کاربر دریافت میکند و بازدن دکمه ای آن را در قسمتی از رجیستری ویندوز ذخیره میکند سوال من این است که چگونه میتواند این مقدار را چک کرد و در دستوراتی را برای آن اعمال کرد

2- در این مورد فقط کاربر میتواند عدد وارد کند چون متغیری که در رجیستری میسازد DWORD میباشد سوال من این است که چگونه میتوان متغیری از نوع رشته ای ساخت

با تشکر از شما دوستان عزیز

حامد مصافی
جمعه 23 دی 1384, 11:17 صبح
یادمه چند روز پیش در یکی از تاپیک ها ماژول کار با رجیستری رو آپلود کردم

Typisch_VB6
جمعه 23 دی 1384, 13:28 عصر
ba ejazeye Blackdal man ye bare dige UP mikonam....

___________________________________________
I'm standing in the circle of humans...

حامد مصافی
جمعه 23 دی 1384, 21:45 عصر
اگه در کامپیوتری windows scripting host نصب نشده باشه این کد کار نمی کنه



Rem Hamed Masafi
Rem Ineed: No Module!


Option Explicit
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) 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, _
ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
ByRef phkResult As Long, _
ByRef lpdwDisposition As Long) As Long
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, _
ByRef phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
ByRef lpType As Long, _
ByVal lpData As String, _
ByRef lpcbData 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, _
ByVal lpData As String, _
ByVal cbData As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" ( _
ByVal hKey As Long, _
ByVal lpValueName As String) As Long

' Reg Data Types...
Const REG_SZ = 1 ' Unicode nul terminated string
Const REG_EXPAND_SZ = 2 ' Unicode nul terminated string
Const REG_DWORD = 4 ' 32-bit number

' Reg Create Type Values...
Const REG_OPTION_NON_VOLATILE = 0 ' Key is preserved when system is rebooted

' Reg Key Security Options...
Const READ_CONTROL = &H20000
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20

Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL

Const KEY_READ = KEY_QUERY_VALUE + _
KEY_ENUMERATE_SUB_KEYS + _
KEY_NOTIFY + _
READ_CONTROL
Const KEY_EXECUTE = KEY_READ
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

'This lines disabled by me' Reg Key ROOT Types...
'Const HKEY_CLASSES_ROOT = &H80000000
'Const HKEY_CURRENT_USER = &H80000001
'Const HKEY_LOCAL_MACHINE = &H80000002
'Const HKEY_USERS = &H80000003
'Const HKEY_PERFORMANCE_DATA = &H80000004

' Return Value...
Const ERROR_NONE = 0
Const ERROR_BADKEY = 2
Const ERROR_ACCESS_DENIED = 8
Const ERROR_SUCCESS = 0

'---------------------------------------------------------------
'- This lines added with me
'---------------------------------------------------------------

Public Enum eKeyRoot
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_PERFORMANCE_DATA = &H80000004
End Enum

'---------------------------------------------------------------
'- Registry Security Attributes TYPE...
'---------------------------------------------------------------
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type

Public Function RegWriteA(KeyRoot As eKeyRoot, KeyName As String, SubKeyName As String, SubKeyValue As String) As Boolean
Dim rc As Long ' Return Code
Dim hKey As Long ' Handle To A Registry Key
Dim hDepth As Long '
Dim lpAttr As SECURITY_ATTRIBUTES ' Registry Security Type

lpAttr.nLength = 50 ' Set Security Attributes To Defaults...
lpAttr.lpSecurityDescriptor = 0 ' ...
lpAttr.bInheritHandle = True ' ...

'------------------------------------------------------------
'- Create/Open Registry Key...
'------------------------------------------------------------
rc = RegCreateKeyEx(KeyRoot, _
KeyName, _
0, _
REG_SZ, _
REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, _
lpAttr, _
hKey, _
hDepth) ' Create/Open //KeyRoot//KeyName

If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' Handle Errors...

'------------------------------------------------------------
'- Create/Modify Key Value...
'------------------------------------------------------------
If (SubKeyValue = vbNullString) Then SubKeyValue = " " ' A Space Is Needed For RegSetValueEx() To Work...

rc = RegSetValueEx(hKey, _
SubKeyName, _
0, _
REG_SZ, _
SubKeyValue, _
LenB(StrConv(SubKeyValue, vbFromUnicode)))

If (rc <> ERROR_SUCCESS) Then GoTo CreateKeyError ' Handle Error
'------------------------------------------------------------
'- Close Registry Key...
'------------------------------------------------------------
rc = RegCloseKey(hKey) ' Close Key

RegWriteA = True ' Return Success
Exit Function ' Exit
CreateKeyError:
RegWriteA = False ' Set Error Return Code
rc = RegCloseKey(hKey) ' Attempt To Close Key
End Function

Public Function RegReadA(KeyRoot As eKeyRoot, _
KeyName As String, _
SubKeyRef As String, _
Optional ElseValue As String = vbNullString) As String
Dim I As Long ' Loop Counter
Dim rc As Long ' Return Code
Dim hKey As Long ' Handle To An Open Registry Key
Dim hDepth As Long '
Dim sKeyVal As String
Dim lKeyValType As Long ' Data Type Of A Registry Key
Dim tmpVal As String ' Tempory Storage For A Registry Key Value
Dim KeyValSize As Long ' Size Of Registry Key Variable

' Open RegKey Under KeyRoot {HKEY_LOCAL_MACHINE...}
'------------------------------------------------------------
rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey)

If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' Handle Error...

tmpVal = String$(1024, 0) ' Allocate Variable Space
KeyValSize = 1024 ' Mark Variable Size

'------------------------------------------------------------
' Retrieve Registry Key Value...
'------------------------------------------------------------
rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
lKeyValType, tmpVal, KeyValSize) ' Get/Create Key Value

If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' Handle Errors

tmpVal = Left$(tmpVal, InStr(tmpVal, Chr(0)) - 1)

'------------------------------------------------------------
' Determine Key Value Type For Conversion...
'------------------------------------------------------------
Select Case lKeyValType ' Search Data Types...
Case REG_SZ, REG_EXPAND_SZ ' String Registry Key Data Type
sKeyVal = tmpVal ' Copy String Value
Case REG_DWORD ' Double Word Registry Key Data Type
For I = Len(tmpVal) To 1 Step -1 ' Convert Each Bit
sKeyVal = sKeyVal + Hex(Asc(Mid(tmpVal, I, 1))) ' Build Value Char. By Char.
Next
sKeyVal = Format$("&h" + sKeyVal) ' Convert Double Word To String
End Select

RegReadA = sKeyVal
rc = RegCloseKey(hKey) ' Close Registry Key
Exit Function

GetKeyError:
RegReadA = ElseValue
rc = RegCloseKey(hKey) ' Close Registry Key
End Function

Public Function RegDeleteA(KeyRoot As eKeyRoot, _
KeyName As String, _
SubKeyRef As String) As Boolean
Dim rc As Long
Dim hKey As Long
Dim df As Long

rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey)
If (rc <> ERROR_SUCCESS) Then GoTo DeleteKeyError ' Handle Error...
df = RegDeleteValue(hKey, SubKeyRef)
RegDeleteA = df = 0

Exit Function
DeleteKeyError:
RegDeleteA = df = 0
End Function

rtech
شنبه 24 دی 1384, 04:49 صبح
خیلی از شما دوستان عزیز سپاسگذارم
خیلی مفید و عالی بود

rtech
یک شنبه 25 دی 1384, 11:48 صبح
د وستان میشه یک کم بیشتر در مورد اون ماژول توضیح بدید که چطوری یک مقدار رو بخونیم و ازش استفاده کنیم ؟

rtech
یک شنبه 25 دی 1384, 11:59 صبح
من یک text Box در فرم گذاشتم تا مقداری از کاربر دریافت کنه و سپس در رجیستری مثلا در بخش Software\project1 و از نوع رشته ای ذخیره کنه
سپس با استفاده از دستور regread که در ماژول تعریف شده مقدارشو بخونم و در یک متغیر بریزم و دستورات را بهش بدم
میشه راهنمایی کنید

roomezonline
دوشنبه 21 مرداد 1387, 16:01 عصر
سلام بر دوستان برنامه نویس عزیز
من 2 تا سوال در مورد رجیستری در VB دارم
من یک TExt box دارم که یک مقدار از کاربر دریافت میکند و بازدن دکمه ای آن را در قسمتی از رجیستری ویندوز ذخیره میکند سوال من این است که چگونه میتواند این مقدار را چک کرد و در دستوراتی را برای آن اعمال کرد

2- در این مورد فقط کاربر میتواند عدد وارد کند چون متغیری که در رجیستری میسازد DWORD میباشد سوال من این است که چگونه میتوان متغیری از نوع رشته ای ساخت

با تشکر از شما دوستان عزیز


اينطورب راحت و بدون دردسر




Dim objShell As Object
Set objShell = CreateObject("Wscript.Shell")

objShell.regwrite "HKEY_CURRENT_USER\Software\YAHOO\PAGER\SAVE PASSWORD", "oook""

حامد مصافی
دوشنبه 21 مرداد 1387, 20:14 عصر
به تاریخ پست ها نگاه کردی؟؟
بعد از 3 سال اومدی و روش ارائه کردی؟؟
اگه تاپیک رو کامل می خوندی متوجه می شدی همون سال 84 در مورد ضعف این روش چی گفته شده.

roomezonline
دوشنبه 21 مرداد 1387, 22:51 عصر
به تاریخ پست ها نگاه کردی؟؟
بعد از 3 سال اومدی و روش ارائه کردی؟؟
اگه تاپیک رو کامل می خوندی متوجه می شدی همون سال 84 در مورد ضعف این روش چی گفته شده.

ميشه در مورد ضعفش خود شما واسه من توضيح بديد
شرمنده من حواسم به تاريخ پست نبود
منتظر توضيحات شما در رابطه با ضعف اين روش هستم

حامد مصافی
دوشنبه 11 شهریور 1387, 19:30 عصر
ســـــ لام


اگه در کامپیوتری windows scripting host نصب نشده باشه این کد کار نمی کنه