在注册表中主要操作5个键值:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableLockWorkStation -> 禁用 '锁定计算机'按钮
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr -> 禁用 '任务管理器'按钮
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableChangePassword -> 禁用 '更改密码'按钮
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoLogoff -> 禁用 '注销' 按钮
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoClose -> 禁用 '关机' 按钮
===============================================================
'**注册表操作声明
===============================================================
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
Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal HKey As Long) _
As Long
Declare Function RegCreateKey Lib "advapi32.dll" _
Alias "RegCreateKeyA" _
(ByVal HKey As Long, _
ByVal lpSubKey As String, _
phkResult 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
Enum regKey
Logoff = 0
Shutdown = 1
ChangePassword = 2
TaskMgr = 3
LockWorkstation = 4
End Enum
Enum RegistryErrorCodes
ERROR_ACCESS_DENIED = 5&
ERROR_INVALID_PARAMETER = 87
ERROR_MORE_DATA = 234
ERROR_NO_MORE_ITEMS = 259
ERROR_SUCCESS = 0&
End Enum
Enum RegistryLongTypes
REG_BINARY = 3 ' Binary Type
REG_DWORD = 4 ' 32-bit number
REG_DWORD_BIG_ENDIAN = 5 ' 32-bit number
REG_DWORD_LITTLE_ENDIAN = 4 ' 32-bit number (same as REG_DWORD)
End Enum
Enum RegistryKeyAccess
KEY_CREATE_LINK = &H20
KEY_CREATE_SUB_KEY = &H4
KEY_ENUMERATE_SUB_KEYS = &H8
KEY_EVENT = &H1
KEY_NOTIFY = &H10
KEY_QUERY_VALUE = &H1
KEY_SET_VALUE = &H2
READ_CONTROL = &H20000
STANDARD_RIGHTS_ALL = &H1F0000
STANDARD_RIGHTS_REQUIRED = &HF0000
SYNCHRONIZE = &H100000
STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
STANDARD_RIGHTS_READ = (READ_CONTROL)
STANDARD_RIGHTS_WRITE = (READ_CONTROL)
KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL + KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK) And (Not SYNCHRONIZE))
KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
End Enum
Enum RegistryHives
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_CONFIG = &H80000005
HKEY_CURRENT_USER = &H80000001
HKEY_DYN_DATA = &H80000006
HKEY_LOCAL_MACHINE = &H80000002
HKEY_PERFORMANCE_DATA = &H80000004
HKEY_USERS = &H80000003
End Enum
================================================================
'****注册表操作过程
================================================================
Public Sub CreateKey(ByVal EnmHive As Long, ByVal StrSubKey As String, ByVal strValueName As String, ByVal LngData As Long, Optional ByVal EnmType As RegistryLongTypes = REG_DWORD_LITTLE_ENDIAN)
Dim HKey As Long 'Holds a pointer to the registry key
'创建注册键
Call CreateSubKey(EnmHive, StrSubKey)
'打开
HKey = GetSubKeyHandle(EnmHive, StrSubKey, KEY_ALL_ACCESS)
'设置注册表值
RegSetValueEx HKey, strValueName, 0, EnmType, LngData, 4
'关闭
RegCloseKey HKey
End Sub
Public Sub CreateSubKey(ByVal EnmHive As RegistryHives, ByVal StrSubKey As String)
Dim HKey As Long 'Holds the handle from the created key.
'创建键
RegCreateKey EnmHive, StrSubKey & Chr(0), HKey
'关闭键
RegCloseKey HKey
End Sub
Private Function GetSubKeyHandle(ByVal EnmHive As RegistryHives, ByVal StrSubKey As String, Optional ByVal EnmAccess As RegistryKeyAccess = KEY_READ) As Long
Dim HKey As Long '控制指定键的句柄
Dim RetVal As Long '从注册表键值中返回数据
'打开
RetVal = RegOpenKeyEx(EnmHive, StrSubKey, 0, EnmAccess, HKey)
If RetVal <> ERROR_SUCCESS Then
'撤销
HKey = 0
End If
GetSubKeyHandle = HKey
End Function
================================================================
'******下面过程是怎样在对话框中禁止按钮
================================================================
Public Sub WinSecurity(ByVal regSET As regKey, ByVal Enabled As Boolean)
'变量声明
Dim Command As String
'选择键
Select Case regSET
Case Logoff: Command = "NoLogoff"
Case Shutdown: Command = "NoClose"
Case ChangePassword: Command = "DisableChangePassword"
Case TaskMgr: Command = "DisableTaskMgr"
Case LockWorkstation: Command = "DisabeLockWorkstation"
End Select
'写入值
If Command = "NoLogoff" Then Call CreateKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", Command, Not Enabled): GoTo SKIPOUT
If Command = "NoClose" Then Call CreateKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", Command, Not Enabled): GoTo SKIPOUT
Call CreateKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\System", Command, Not Enabled)
SKIPOUT:
End Sub
================================================================
'**************调用方法
================================================================
WinSecurity (Shutdown, False)