Автор: Хованский Ян Источник: http://yansoft.nm.ru
Реестр Windows хранит огромное количество настроек, которые впоследствии можно изменить по своему усмотрению. В этой статье мы и поговорим об этих настройках.
Многие пользователи заблуждаются, думая, что все программы, загружаемые при запуске Windows хранятся в папке автозагрузка. Действительно, некоторые из них хранятся именно там, но большинство программ предпочитают реестр:
'// Объявления
'// Функции
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 RegCloseKey Lib "advapi32.dll" (ByVal hKey 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 RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA"
(ByVal hKey As Long, ByVal lpValueName As String) As Long
'// Константы
Const HKEY_CURRENT_USER = &H80000001
Const KEY_ALL_ACCESS = &H3F
Const REG_SZ As Long = 1
'// Добавление программы в автозагрузку:
Public Sub AddToAutostart()
Dim Result As Long
Dim Retval As Long
Dim sPath As String
'// Определяем путь к программе
If Right(App.Path, 1) = "\" Then
sPath = App.Path & App.EXEName & ".exe"
Else
sPath = App.Path & "\" & App.EXEName & ".exe"
End If
'// Манипулятор ключа
Retval = RegOpenKeyEx(HKEY_CURRENT_USER,
"Software\Microsoft\Windows\CurrentVersion\Run",
0, KEY_ALL_ACCESS, Result)
'// Записываем в автозагрузку
RegSetValueEx Result, App.Title, 0, REG_SZ, ByVal sPath, Len(sPath)
RegCloseKey Result '// Закрытие ключа
End Sub
'// Удаление из автозагрузки:
Public Sub DeleteFromAutostart()
Dim Retval As Long
Dim Result As Long
'// Манипулятор ключа
Retval = RegOpenKeyEx(HKEY_CURRENT_USER,
"Software\Microsoft\Windows\CurrentVersion\Run",
0, KEY_ALL_ACCESS, Result)
'// Удаляем параметр
RegDeleteValue Result, App.Title
RegCloseKey Result '// Закрытие ключа
End Sub
Ассоциация с типами файлов
Следующий код предназначен для того, чтобы ассоциировать определённый тип файлов с Вашей программой:
'// Объявления
'// Функции
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 Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
'// Константы
Const HKEY_CLASSES_ROOT = &H80000000
Const REG_SZ = 1
Const KEY_ALL_ACCESS = &H3F
'// Функция для ассоциации типа файла с приложением
'// FileType - расширение файла
Public Sub AsProgram(FileType As String)
Dim retval As Long
Dim Result As Long
Dim SA As SECURITY_ATTRIBUTES
Dim sPath As String
'// Создаем ключ для программы
retval = RegCreateKeyEx(HKEY_CLASSES_ROOT, App.Title, 0, vbNullString,
0, KEY_ALL_ACCESS, SA, Result, &H1)
'// Присваиваем значению по умолчанию название программы
RegSetValueEx Result, "", 0, REG_SZ, ByVal App.Title, Len(App.Title)
'// Создаём ключ, связанный с расширением файла
retval = RegCreateKeyEx(HKEY_CLASSES_ROOT, FileType, 0, vbNullString,
0, KEY_ALL_ACCESS, SA, Result, &H1)
'// Присваиваем значению по умолчанию название программы
RegSetValueEx Result, "", 0, REG_SZ, ByVal App.Title, Len(App.Title)
'// Последние шаг - ассоциация типа с приложением
'// Определяем командную строку для приложения
If Right(App.Path, 1) = "\" Then
sPath = App.Path & App.EXEName & ".exe %1"
Else
sPath = App.Path & "\" & App.EXEName & ".exe %1"
End If
retval = RegCreateKeyEx(HKEY_CLASSES_ROOT, App.Title & "\shell\open\command", 0,
vbNullString, 0, KEY_ALL_ACCESS, SA, Result, &H1)
RegSetValueEx Result, "", 0, REG_SZ, ByVal sPath, Len(sPath)
End Sub
Пример использования:
AsProgram ".txt"
Также в реестре хранятся менее полезные (для нас) настройки, с ними мы сейчас и разберёмся.
Вы уже умеете создавать ключи и присваивать значения параметрам, поэтому я представляю только список некоторых, из таких «менее полезных настроек»:
Меню Пуск:
1. Удаление пункта Избранное
В HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explоrer создайте параметр NoFavoritesMenu типа DWORD со значением, равным 1
2. Удаление пункта Документы
В HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explоrer создайте параметр NoRecentDocsMenu типа DWORD со значением, равным 1
3. Удаление пункта Найти
В HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explоrer создайте параметр NoRecentDocsMenu типа NoFind со значением, равным 1
4. Удаление пункта Выполнить
В HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explоrer создайте параметр NoRecentDocsMenu типа NoRun со значением, равным 1
5. Удаление пункта Завершение работы
В HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explоrer создайте параметр NoClose типа NoRun со значением, равным 1
Проводник:
1. Недоступное контекстное меню
В HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion \Policies\Explorer создайте параметр NoViewContextMenu типа DWORD со значением 1
2. Замена фона в панели инструментов
В HKEY_CURRENT_USER \SOFTWARE\ Microsoft\Internet Explorer\Toolbar создайте строковый параметр BackBitmapShell, значением которого должно быть полное имя BMP-файла.
Прочитав эту статью вы поняли, что реестр предоставляет огромные возможности для программиста и для любого пользователя вообще. И не использовать эти возможности - грех!