Некоторые записи в реестре Win98, которые могут помочь в достижении корыстных программистских целей... Именно программистских, так как "в ручную" пользователь может почти все это без проблем и так проделать... ...почти каждый... ;)
Ничего не гарантирую, но все это опробовано и до сих пор работало...
Чуть не забыл... К сожалению функции VisualBasic'a для работы с реестром (GetSetting, SaveSetting, DeleteSetting, GetAllSettings,....) распространяются только на раздел реестра: "HKEY_CURRENT_USER\Software\VB and VBA Programm Settings" и никак не затрагивают системные, то есть, наиболее интересные области реестра...
Текст модуля с используемыми функциями для работы с реестром приведен в конце файла....

Как узнать сетевое имя компьютера (программно)?
Раздел: [HKEY_LOCAL_MACHINE\System\CurrentControlSet\ComputerName\ComputerName]
Параметр: ComputerName
VB Код:
Public Function GetMyName() As String
GetMyNAME = GetKeyValue(HKEY_LOCAL_MACHINE, _
"System\CurrentControlSet\Control\ComputerName\ComputerName\", _
"ComputerName")
End Function
 Как сделать, чтобы моя "крутейшая" программа подвешивалась
на файлы с определенным расширением в качестве программы
по умолчанию (то есть DoubleClick в проводнике чтоб запускал
ее с именем файла на котором был клик)?
1. "Крутейшая" программа должна обрабатывать командную строку,
а именно брать оттуда путь и имя этого файла...
2. Смотрим, а не висит ли уже кто-либо на этом типе файлов....
Раздел [HKEY_CLASSES_ROOT\.ext], параметр [по умолчанию]
Пример: tmpStr = GetKeyValue(HKEY_CLASSES_ROOT, FileExt, "")
(Здесь FileExt - строковая константа, см. полный пример...)
Если никого нет, то tmpStr будет равно "".
3. Если никого нет, то создаем свой раздел DefaultReg, если кто-то уже
прицепился, то добавляем в его раздел (то есть в tmpStr).
 Далее смотри код примера... Я даже комментариев понаписал...
(сколько смог...)
Полный пример (VB Код):
'Комментарии излишни по-моему...
Private FullPathAndFileName As String
Private CmdLine As String
'Определяет делать ли вообще то о чем идет речь...
Private Const UpdReg As Boolean = True
'Определяет ставить наше действие "по умолчанию" или нет...
Private Const UpdDefault As Boolean = True
'Расширение на которое подвешиваем свою программу...
Private Const FileExt As String = ".rom"
'Имя своего раздела в реестре если на этом типе файлов еще никто не висит...
'(само имя ни на что не влияет)
Private Const DefaultReg As String = "ROMfile"
'Действие, которое будем делать над файлом
Private Const DefaultAct As String = "Convert"
'Название действия, которое будем делать над файлом
'(Проводник именно эту надпись выведет по правой кнопке)
Private Const DefaultActName As String = "Преобразовать"
'Описание файлов с таким расширением...
Private Const ExtDescription As String = "Asm Output file"
'Я это ставлю на Form_Load....
Private Sub Form_Load()
Dim tmpStr As String
'Определяем свой путь и имя файла
FullPathAndFileName = App.Path
If Right(App.Path,1) <> "\" Then FullPathAndFileName = FullPathAndFileName & "\"
FullPathAndFileName = FullPathAndFileName & App.EXEName & ".exe %1"
If UpdReg Then  'А надо ли в реестр-то писать? [const]
'Считываем на предмет "висит" ли кто на этом типе файлов...
tmpStr = GetKeyValue(HKEY_CLASSES_ROOT, FileExt, "")
If tmpStr = "" Then 'Если никто не висит...
tmpStr = DefaultReg
'Делаем свою запись на это расширение
UpdateKey HKEY_CLASSES_ROOT, FileExt, "", tmpStr
'Присобачиваем свое описание таких файлов...
UpdateKey HKEY_CLASSES_ROOT, tmpStr, "", ExtDescription
End If
If UpdDefault Then
'Ставим свое действие "по умолчанию"
UpdateKey HKEY_CLASSES_ROOT, tmpStr & "\shell", "", DefaultAct
End If
'Прописываем название действия
UpdateKey HKEY_CLASSES_ROOT, tmpStr & "\shell\" & DefaultAct, "", DefaultActName
'Прописываем пути и имя нашей программы....
UpdateKey HKEY_CLASSES_ROOT, tmpStr & "\shell\" & DefaultAct & "\command", "", FullPathAndFileName
End If
'И пошла командная строка...
CmdLine = Command
CmdLine = Trim(CmdLine)
 Как сделать так, чтобы моя программа загружалась при старте Windows?
Раздел: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run или
 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices или
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
Если однократно надо запустить, то вместо Run в конце RunOnce,
a вместо RunServices - RunServicesOnce
Параметр: Имя программы
Значение: Путь и имя своей программы
VB код:
FullPathAndFileName = App.Path
If Right(App.Path,1) <> "\" Then FullPathAndFileName = FullPathAndFileName & "\"
FullPathAndFileName = FullPathAndFileName & App.EXEName
'Прописываем себя в реестр (FullPathAndFileName As String)
UpdateKey HKEY_LOCAL_MACHINE, _
"Software\Microsoft\windows\CurrentVersion\Run", _
App.Title, FullPathAndFileName
 Мелкие гадости с параметрами mouse и keyboard
[HKEY_CURRENT_USER\Control Panel\Mouse\]
[HKEY_CURRENT_USER\Control Panel\Keyboard\]
тескт модуля с функциями работы с реестром (сперто из какого-то plug-in'a или add-in'a.... не помню уже). Сами функции не шибко хороши (например, не позволяют записать числовые параметры), но свои писать лень, так что...
Attribute VB_Name = "basReg"
Option Explicit
' This module reads and writes registry keys. Unlike the
' internal registry access methods of VB, it can read and
' write any registry keys with string values.
'---------------------------------------------------------------
'-Registry API Declarations...
'---------------------------------------------------------------
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32" 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" 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" 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" 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
'---------------------------------------------------------------
'- Registry Api Constants...
'---------------------------------------------------------------
' 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_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + 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
' Reg Key ROOT Types...
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
' Return Value...
Const ERROR_NONE = 0
Const ERROR_BADKEY = 2
Const ERROR_ACCESS_DENIED = 8
Const ERROR_SUCCESS = 0
'---------------------------------------------------------------
'- Registry Security Attributes TYPE...
'---------------------------------------------------------------
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
' The resource string will be loaded into a control's property as follows:
' Object Property
' Form Caption
' Menu Caption
' TabStrip Caption, ToolTipText
' Toolbar ToolTipText
' ListView ColumnHeader.Text
Sub LoadResStrings(frm As Form)
On Error Resume Next
Dim ctl As Control
Dim obj As Object
'set the form's caption
If IsNumeric(frm.Tag) Then
frm.Caption = LoadResString(CInt(frm.Tag))
End If
'set the controls' captions using the caption
'property for menu items and the Tag property
'for all other controls
For Each ctl In frm.Controls
Err.Clear
If TypeName(ctl) = "Menu" Then
If IsNumeric(ctl.Caption) Then
If Err = 0 Then
ctl.Caption = LoadResString(CInt(ctl.Caption))
End If
End If
ElseIf TypeName(ctl) = "TabStrip" Then
For Each obj In ctl.Tabs
Err.Clear
If IsNumeric(obj.Tag) Then
obj.Caption = LoadResString(CInt(obj.Tag))
End If
'check for a tooltip
If IsNumeric(obj.ToolTipText) Then
If Err = 0 Then
obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
End If
End If
Next
ElseIf TypeName(ctl) = "Toolbar" Then
For Each obj In ctl.Buttons
Err.Clear
If IsNumeric(obj.Tag) Then
obj.ToolTipText = LoadResString(CInt(obj.Tag))
End If
Next
ElseIf TypeName(ctl) = "ListView" Then
For Each obj In ctl.ColumnHeaders
Err.Clear
If IsNumeric(obj.Tag) Then
obj.Text = LoadResString(CInt(obj.Tag))
End If
Next
Else
If IsNumeric(ctl.Tag) Then
If Err = 0 Then
ctl.Caption = LoadResString(CInt(ctl.Tag))
End If
End If
'check for a tooltip
If IsNumeric(ctl.ToolTipText) Then
If Err = 0 Then
ctl.ToolTipText = LoadResString(CInt(ctl.ToolTipText))
End If
End If
End If
Next
End Sub
'-------------------------------------------------------------------
'sample usage -
'Debug.Print UpodateKey(HKEY_CLASSES_ROOT, "keyname", "newvalue")
'-------------------------------------------------------------------
Public Function UpdateKey(KeyRoot As Long, 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 = "") Then SubKeyValue = " " ' A Space Is Needed For
'RegSetValueEx() To Work...
' Create/Modify Key Value
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
UpdateKey = True ' Return Success
Exit Function ' Exit
CreateKeyError:
UpdateKey = False ' Set Error Return Code
rc = RegCloseKey(hKey) ' Attempt To Close Key
End Function
'----------------------------------------------------------
'sample usage - Debug.Print GetKeyValue(HKEY_CLASSES_ROOT,
'"COMCTL.ListviewCtrl.1\CLSID", "")
'----------------------------------------------------------
Public Function GetKeyValue(KeyRoot As Long, KeyName As String, _
SubKeyRef As String) 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) ' Open Registry Key
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
' Build Value Char. By Char.
sKeyVal = sKeyVal + Hex(Asc(Mid(tmpVal, i, 1)))
Next
sKeyVal = Format$("&h" + sKeyVal) ' Convert Double Word To String
End Select
GetKeyValue = sKeyVal ' Return Value
rc = RegCloseKey(hKey) ' Close Registry Key
Exit Function ' Exit
GetKeyError: ' Cleanup After An Error Has Occured...
GetKeyValue = vbNullString ' Set Return Val To Empty String
rc = RegCloseKey(hKey) ' Close Registry Key
End Function
'--- End of Registry Processing Functions ---
|