Страница: 1 | 2 |
|
Вопрос: реестр
|
Добавлено: 09.01.10 20:12
|
|
Автор вопроса: ηikolaŠ~rus | ICQ: 604058327
|
Здрасте!Как програмно записать(при нажатии на кнопку) прогу в реестр в Run (автозагрузка)
Пробовал
Dim q As String
Private Sub Command1_Click()
q = App.Path + "\proga.exe" 'Узнаем путь к нашей программе(App.Path), и прибавляем ее название(НЕЗАБУДЬ ЕЕ ПЕРЕИМЕНОВАТЬ В proga)
SetKeyValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Proga", q, REG_SZ 'Запись!
End Sub
Не идет, назнаю чем автор думал когда ето писал
Ответить
|
Номер ответа: 2 Автор ответа:
Саня

ICQ: 553816426 
Вопросов: 10 Ответов: 99
|
Профиль | | #2
|
Добавлено: 09.01.10 23:15
|
Записать программу на авто запуск можно двумя способами:
1. Создать файл ключа реестра и запустить на исполнение с ключом S
2. Или написать программу, которая производит запись в реестр, средствами АПИ функций.
СПОСОБ ПЕРВЫЙ
Создаем текстовый файл с расширением reg и с таким содержимым:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RUN]
"Троян"="C:\\WINDOWS\\system\\Троян.ехе"
И запускаем его с ключом /s (это чтобы не было вопросов).
(предполагаю, что автору вопроса, известно как, программно, создавать\удалять текстовые файлы и запускать их - если, нет, то напишу.).
СПОСОБ ВТОРОЙ
Создаем новый проект.
В разделе General пишем:
-
- Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
- Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
- Private Const REG_SZ = 1
- Private Const HKEY_LOCAL_MACHINE = &H80000002
Добавляем модуль с именем basRegistry
В модуль пишем это:
-
- Option Explicit
- Private Declare Function RegOpenKeyEx Lib "advapi32" Alias _
- "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal _
- dwReserved&, ByVal samDesired As Long, phkResult As Long) As Long
-
- Private Declare Function RegQueryValueEx Lib "advapi32" Alias _
- "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
- String, lpReserved As Long, lpType As Long, lpData As Any, _
- 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, lpData _
- As Any, ByVal cbData 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, lpSecurityAttributes As _
- Long, phkResult As Long, lpdwDisposition As Long) _
- As Long
- Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
-
- Private Declare Function RegCloseKey& Lib "advapi32" (ByVal hKey&)
- 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 STANDARD_RIGHTS_ALL = &H1F0000
- Private Const SYNCHRONIZE = &H100000
-
- Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or _
- KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY _
- Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
- KEY_CREATE_LINK) And (Not SYNCHRONIZE))
-
- Private Const REG_SZ = 1
- Private Const ERROR_SUCCESS = 0
- Public Const HKEY_CLASSES_ROOT = &H80000000
- Public Const HKEY_CURRENT_USER = &H80000001
- Public Const HKEY_LOCAL_MACHINE = &H80000002
- Public Const HKEY_USERS = &H80000003
- Public Const HKEY_PERFORMANCE_DATA = &H80000004
- Public Const ERRBASE As Long = vbObjectError + 6000
- Public Const REG_UNSUPPORTED As String = _
- "<Format Not Supported by Registry.bas>"
- #If LEAN_AND_MEAN = 0 Then
- Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias _
- "RegEnumKeyExA" (ByVal hKey&, ByVal dwIndex&, ByVal lpName$, _
- lpcbName As Long, ByVal lpReserved&, ByVal lpClass$, lpcbClass&, _
- lpftLastWriteTime As Any) As Long
-
- Private Declare Function RegEnumValue Lib "advapi32.dll" Alias _
- "RegEnumValueA" (ByVal hKey&, ByVal dwIndex&, ByVal lpValueName$ _
- , lpcbValueName&, ByVal lpReserved&, lpType&, lpData As Any, _
- lpcbData As Long) As Long
-
- Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _
- "RegDeleteKeyA" (ByVal hKey&, ByVal lpSubKey As String) As Long
-
- Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias _
- "RegDeleteValueA" (ByVal hKey&, ByVal lpValueName$) As Long
-
- Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias _
- "RegQueryInfoKeyA" (ByVal hKey&, ByVal lpClass$, lpcbClass&, _
- ByVal lpReserved&, lpcSubKeys&, lpcbMaxSubKeyLen&, _
- lpcbMaxClassLen&, lpcValues&, lpcbMaxValueNameLen&, _
- lpcbMaxValueLen&, lpcbSecurityDescriptor&, lpftLastWriteTime _
- As Any) As Long
-
- Private Const ERROR_NO_MORE_ITEMS = 259&
- Private Const REG_DWORD = 4
- #End If
-
- Public Function GetRegString(hKey As Long, strSubKey As String, _
- strValueName As String) As String
- Dim strSetting As String
- Dim lngDataLen As Long
- Dim hSubKey As Long
-
-
-
- If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, hSubKey) = _
- ERROR_SUCCESS Then
- strSetting = Space(255)
- lngDataLen = Len(strSetting)
-
-
-
-
- If RegQueryValueEx(hSubKey, strValueName, ByVal 0, _
- REG_SZ, ByVal strSetting, lngDataLen) = _
- ERROR_SUCCESS Then
- If lngDataLen > 1 Then
- GetRegString = Left(strSetting, lngDataLen - 1)
- End If
- Else
- Err.Raise ERRBASE + 1, "GetRegString", _
- "RegQueryValueEx failed!"
- End If
-
-
-
- RegCloseKey hSubKey
- End If
- End Function
- Public Sub SetRegString(hKey As Long, strSubKey As String, strValueName As String, strSetting As String)
- Dim hNewHandle As Long
- Dim lpdwDisposition As Long
- If RegCreateKeyEx(hKey, strSubKey, 0, strValueName, 0, KEY_ALL_ACCESS, 0&, hNewHandle, lpdwDisposition) = ERROR_SUCCESS Then
- If RegSetValueEx(hNewHandle, strValueName, 0, REG_SZ, ByVal strSetting, Len(strSetting)) <> ERROR_SUCCESS Then
- Err.Raise ERRBASE + 2, "SetRegString", "RegSetValueEx failed!"
- Else
- MsgBox "Âòîðîé ðàç íåò"
- End If
- Else
- Dim a
- a = RegCreateKeyEx(hKey, strSubKey, 0, strValueName, 0, KEY_ALL_ACCESS, 0&, hNewHandle, lpdwDisposition)
- MsgBox a
- a = 0
- a = RegCreateKey(HKEY_LOCAL_MACHINE, "Software\XYZ", hNewHandle)
- MsgBox a
-
- End If
- RegCloseKey hNewHandle
- End Sub
- #If LEAN_AND_MEAN = 0 Then
- Public Function GetRegDWord(hKey&, strSubKey$, strValueName$) As Long
- Dim lngDataLen As Long
- Dim hSubKey As Long
- Dim lngRetVal As Long
-
-
-
- If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, hSubKey) = _
- ERROR_SUCCESS Then
-
-
-
-
- lngDataLen = 4
- If RegQueryValueEx(hSubKey, strValueName, ByVal 0, _
- REG_DWORD, lngRetVal, lngDataLen) = ERROR_SUCCESS Then
- GetRegDWord = lngRetVal
- Else
- Err.Raise ERRBASE + 1, "GetRegDWord", _
- "RegQueryValueEx failed!"
- End If
-
-
-
- RegCloseKey hSubKey
- End If
- End Function
- Public Sub SetRegDWord(hKey&, strSubKey$, strValueName$, lngSetting&)
- Dim hNewHandle As Long
- Dim lpdwDisposition As Long
-
-
-
-
- If RegCreateKeyEx(hKey, strSubKey, 0, strValueName, 0, _
- KEY_ALL_ACCESS, 0&, hNewHandle, lpdwDisposition) = _
- ERROR_SUCCESS Then
- If RegSetValueEx(hNewHandle, strValueName, 0, REG_DWORD, _
- lngSetting, 4) <> ERROR_SUCCESS Then
- Err.Raise ERRBASE + 2, "SetRegDWord", _
- "RegSetValueEx failed!"
- End If
- Else
- Err.Raise ERRBASE + 3, "SetRegString", "RegCreateKeyEx failed!"
- End If
-
-
-
- RegCloseKey hNewHandle
- End Sub
- Public Function GetRegKeys(hKey&, Optional strSubKey$) As Variant
- Dim hChildKey As Long
- Dim lngSubKeys As Long
- Dim lngMaxKeySize As Long
- Dim lngDataRetBytes As Long
- Dim i As Integer
-
-
-
- Dim strRetArray() As String
-
-
-
- If Len(strSubKey) Then
-
-
-
- If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, _
- hChildKey) <> ERROR_SUCCESS Then
- Err.Raise ERRBASE + 4, "GetRegKeys", "RegOpenKeyEx failed!"
- Exit Function
- End If
-
-
-
- Else
- hChildKey = hKey
- End If
-
-
-
- If QueryRegInfoKey(hChildKey, lngSubKeys, lngMaxKeySize) _
- <> ERROR_SUCCESS Or lngSubKeys = 0 Then
- Err.Raise ERRBASE + 5, "GetRegKeys", "RegQueryInfoKey failed!"
- If Len(strSubKey) Then RegCloseKey hChildKey
- Exit Function
- End If
-
-
-
- lngSubKeys = lngSubKeys - 1
- ReDim strRetArray(lngSubKeys) As String
-
-
-
- For i = 0 To lngSubKeys
-
-
-
-
- lngDataRetBytes = lngMaxKeySize
- strRetArray(i) = Space(lngMaxKeySize)
-
- RegEnumKeyEx hChildKey, i, strRetArray(i), _
- lngDataRetBytes, 0&, vbNullString, ByVal 0&, ByVal 0&
-
-
-
- strRetArray(i) = Left(strRetArray(i), lngDataRetBytes)
- Next i
-
-
-
-
- If Len(strSubKey) Then RegCloseKey hChildKey
-
-
-
- GetRegKeys = strRetArray
- End Function
- Public Function GetRegKeyValues(hKey&, strSubKey$) As Variant
- Dim lngNumValues As Long
-
- Dim strValues() As String
- Dim lngMaxValSize As Long
- Dim lngValRetBytes As Long
-
- Dim lngMaxSettingSize As Long
- Dim lngSetRetBytes As Long
-
- Dim lngSetting As Long
-
- Dim lngType As Long
-
-
- Dim hChildKey As Long
- Dim i As Integer
-
-
-
- If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, hChildKey) _
- <> ERROR_SUCCESS Then
- Err.Raise ERRBASE + 4, "GetRegKeyValues", _
- "RegOpenKeyEx failed!"
- Exit Function
- End If
-
-
-
- If QueryRegInfoKey(hChildKey, , , lngNumValues, lngMaxValSize, _
- lngMaxSettingSize) <> ERROR_SUCCESS Or lngNumValues = 0 Then
- Err.Raise ERRBASE + 5, "GetRegKeyValues", _
- "RegQueryInfoKey failed!"
- RegCloseKey hChildKey
- Exit Function
- End If
-
-
-
- lngNumValues = lngNumValues - 1
- ReDim strValues(0 To lngNumValues, 0 To 1) As String
-
-
-
- For i = 0 To lngNumValues
-
-
-
- strValues(i, 0) = Space(lngMaxValSize)
- lngValRetBytes = lngMaxValSize
-
- strValues(i, 1) = Space(lngMaxSettingSize)
- lngSetRetBytes = lngMaxSettingSize
-
-
-
- RegEnumValue hChildKey, i, strValues(i, 0), lngValRetBytes, _
- 0, lngType, ByVal strValues(i, 1), lngSetRetBytes
-
-
-
- If lngType = REG_SZ Then
- strValues(i, 1) = Left(strValues(i, 1), lngSetRetBytes - 1)
-
-
-
-
- ElseIf lngType = REG_DWORD Then
-
-
-
-
-
-
-
- lngValRetBytes = lngValRetBytes + 1
-
-
-
- RegEnumValue hChildKey, i, strValues(i, 0), _
- lngValRetBytes, 0, lngType, lngSetting, lngSetRetBytes
-
-
-
- strValues(i, 1) = CStr(lngSetting)
-
-
-
-
- Else
- strValues(i, 1) = REG_UNSUPPORTED
- End If
-
-
-
-
-
- strValues(i, 0) = RTrim(Left(strValues(i, 0), lngValRetBytes))
- strValues(i, 1) = RTrim(strValues(i, 1))
- Next i
-
-
-
- RegCloseKey hChildKey
-
-
-
- GetRegKeyValues = strValues
- End Function
- Public Sub DeleteRegKey(hKey&, strParentKey$, strKeyToDel$, _
- Optional blnConfirm As Boolean)
-
-
-
- Dim hParentKey As Long
- If RegOpenKeyEx(hKey, strParentKey, 0, KEY_ALL_ACCESS, _
- hParentKey) <> ERROR_SUCCESS Then
- Err.Raise ERRBASE + 4, "DeleteRegValue", "RegOpenKeyEx failed!"
- Exit Sub
- End If
-
-
-
- If blnConfirm Then
- If MsgBox("Are you sure you want to delete " & strKeyToDel & _
- "?", vbQuestion Or vbYesNo Or vbDefaultButton2) = vbNo Then
- RegCloseKey hParentKey
- Exit Sub
- End If
- End If
-
-
-
- RegDeleteKey hParentKey, strKeyToDel
- RegCloseKey hParentKey
- End Sub
- Public Sub DeleteRegValue(hKey&, strSubKey$, strValToDel$, _
- Optional blnConfirm As Boolean)
-
-
-
- Dim hSubKey As Long
- If RegOpenKeyEx(hKey, strSubKey, 0, KEY_ALL_ACCESS, _
- hSubKey) = ERROR_SUCCESS Then
- Err.Raise ERRBASE + 4, "DeleteRegValue", "RegOpenKeyEx failed!"
- End If
-
-
-
- If blnConfirm Then
- If MsgBox("Are you sure you want to delete " & strValToDel & _
- "?", vbQuestion Or vbYesNo Or vbDefaultButton2) = vbNo Then
- RegCloseKey hSubKey
- Exit Sub
- End If
- End If
-
-
-
- RegDeleteValue hSubKey, strValToDel
- RegCloseKey hSubKey
- End Sub
- Private Function QueryRegInfoKey(hKey&, Optional lngSubKeys&, _
- Optional lngMaxKeyLen&, Optional lngValues&, Optional _
- lngMaxValNameLen&, Optional lngMaxValLen&)
-
- QueryRegInfoKey = RegQueryInfoKey(hKey, vbNullString, _
- ByVal 0&, 0&, lngSubKeys, lngMaxKeyLen, ByVal 0&, lngValues, _
- lngMaxValNameLen, lngMaxValLen, ByVal 0&, ByVal 0&)
-
-
-
- lngMaxKeyLen = lngMaxKeyLen + 1
- lngMaxValNameLen = lngMaxValNameLen + 1
- lngMaxValLen = lngMaxValLen + 1
- End Function
- #End If
Записываем в реестр так:
- Dim Adres As String
- Dim R as Variant
- Adres=” C:\WINDOWS\system\Троян.ехе”
- R = RegSetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", REG_SZ, Adres, Len(Adres))
PS. Эти два способа не сработают если на машине установлен антивирус Касперского 2010, программа с таким кодом, будет автоматически помещена на карантин, по подозрению на Троян. Как это обойти пока не знаю.
Ответить
|
Страница: 1 | 2 |
Поиск по форуму