Консультация № 109663
16.11.2007, 11:10
0.00 руб.
0 2 2
Добрый день уважаемые эксперты !!! Пожалуйста подскажите как осуществить запись в реестр (в автозагрузку) при помощи Win32 API ????

Обсуждение

Неизвестный
16.11.2007, 12:12
общий
это ответ
Здравствуйте, Trist13!
Для конкретного случая(автозагрузка) можно так:
сама функция:
<i>
Sub AddAutoRun(sAppName, sAppValue)

Dim hKey As Long
Dim sValue As String

RegOpenKeyEx HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_SET_VALUE, hKey

sValue = sAppValue & Chr$(0)

RegSetValueExString hKey, sAppName, 0&, REG_SZ, sValue, Len(sValue)

RegCloseKey (hKey)

End Sub
</i>

В модуле объявления API:
<i>
Public Const REG_SZ As Long = 1
Public Const HKEY_CURRENT_USER = &H80000001
Public Const KEY_SET_VALUE = &H2

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

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

Declare Function RegSetValueExString Lib "advapi32.dll" Alias _
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As _
String, ByVal cbData As Long) As Long

</i>

использовать:
AddAutoRun "calc.exe", "C:\Windows\System32\calc.exe"

Успехов.
Неизвестный
20.11.2007, 18:54
общий
это ответ
Здравствуйте, Trist13!
Создайте форму, кнопку Command1 и вставьте этот код:
Private Sub Command1_Click()
Dim cap As String
sChange = ""
cap = Caption
Caption = "Monitoring..."
Label1 = "Try to change HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Registry Notification\Hello\Testing"
Label1 = Label1 & vbCrLf & "or any other key under HKCU\Software\VB and VBA Program Settings with RegEdit"
Call RegMonitor(HKEY_CURRENT_USER, "Software\VB and VBA Program Settings", True, REG_NOTIFY_CHANGE_ATTRIBUTES + REG_NOTIFY_CHANGE_LAST_SET + REG_NOTIFY_CHANGE_NAME + REG_NOTIFY_CHANGE_SECURITY)
‘ Try to change this key or any other under HKCU
Label1 = "Your key have been changed!!!"
Label1 = Label1 & vbCrLf & "Press command button to start monitoring. (Your App will freeze while monitoring)"
Caption = cap
End Sub

Private Sub Form_Load()
Label1 = "Application created a temporary registry key:"
Label1 = Label1 & vbCrLf & "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Registry Notification\Hello\Testing"
Label1 = Label1 & vbCrLf & "Press command button to start monitoring. (Your App will freeze while monitoring)"
‘Create a temporary registry key
SaveSetting "Registry Notification", "Hello", "Testing", "123"
End Sub

Затем создайте модуль и вставьте этот код:

Public Enum ROOT_KEYS
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000003
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_CURRENT_CONFIG = &H80000005
HKEY_DYN_DATA = &H80000006
End Enum

Public Enum NOTIFY_EVENTS
REG_NOTIFY_CHANGE_NAME = &H1
REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
REG_NOTIFY_CHANGE_LAST_SET = &H4
REG_NOTIFY_CHANGE_SECURITY = &H8
End Enum

Private Declare Function RegNotifyChangeKeyValue Lib "advapi32" (ByVal hKey As Long, ByVal bWatchSubTree As Boolean, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronous As Boolean) 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 RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Public Sub RegMonitor(hKey As ROOT_KEYS, sRegKeyPath As String, bWatchSubTree As Boolean, dwFilters As NOTIFY_EVENTS)
Dim lKeyHandle As Long, lRet As Long
lRet = RegOpenKey(hKey, sRegKeyPath, lKeyHandle)
RegNotifyChangeKeyValue lKeyHandle, bWatchSubTree, dwFilters, 0&, False
lRet = RegCloseKey(lKeyHandle)
End Sub

Удачи!
Форма ответа