怎么样在注册表里改动,是我的程序在开机就运行呢?用程序实现。谢谢

luanjiajia 2001-09-25 09:12:39
...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayusay 2001-09-26
  • 打赏
  • 举报
回复
啊,加佳,你没给我分~~~~~
tlz 2001-09-26
  • 打赏
  • 举报
回复
up
ayusay 2001-09-25
  • 打赏
  • 举报
回复
我这里有一个函数。用他将你的程序写入到你的注册表中HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run位置。


Option Explicit
Option Compare Text

Private Declare Function RegQueryValueEx Lib "advapi32.dll" _
Alias "RegQueryValueExA" (ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
lpType As Long, lpData As Any, _
lpcbData As Long) As Long
' 注意:如果将lpData参数声明为String,则必须以值(ByVal)传递。

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 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
' 注意:如果将lpData参数声明为String,则必须以值(ByVal)传递。

Private Declare Function RegDeleteKey Lib "advapi32.dll" _
Alias "RegDeleteKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String) As Long

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

Private Const REG_SZ = 1

Private Const ERROR_SUCCESS = 0& ' 访问注册表成功值。

' ===========================================================
' 主键值。
' 注册表操作API(32-位)
Public Enum hKey
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USER = &H80000003
End Enum
' ===========================================================


Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_ALL = &H1F0000

' *******************************************************************'
' 指定一个访问掩码,该掩码为新注册键所希望的加密访问权。
Private Const KEY_CREATE_LINK = &H20 ' 允许创建一个符号连接。
Private Const KEY_CREATE_SUB_KEY = &H4 ' 允许创建子注册键。
Private Const KEY_NOTIFY = &H10 ' 允许修改通知。
Private Const KEY_QUERY_VALUE = &H1 ' 允许查询子注册键数据。
Private Const KEY_SET_VALUE = &H2 ' 允许设置子注册键数据。
Private Const KEY_ENUMERATE_SUB_KEYS = &H8 ' 允许枚举子注册键。
' 允许进行所有的组合访问。
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 READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _
KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS Or _
KEY_NOTIFY) And (Not SYNCHRONIZE))
Private Const REG_OPTION_NON_VOLATILE = 0

Public Enum DesiredType
创建符号连接 = KEY_CREATE_LINK
创建子注册键 = KEY_CREATE_SUB_KEY
修改通知 = KEY_NOTIFY
查询子注册键数据 = KEY_QUERY_VALUE
设置子注册键数据 = KEY_SET_VALUE
枚举子注册键 = KEY_ENUMERATE_SUB_KEYS
所有的组合访问 = KEY_ALL_ACCESS
End Enum
' *******************************************************************'



' 函数QueryReg用来查询注册表。
' 参数:
' KEY -- HKEY自定义类型,注册表中四个预定义的保留值之一。
' strSubKey -- 待打开的注册键名称,为KEY参数标识的注册键的子键。
' lngType -- 访问类型,为自定义的DesiredType类型。
' strQueryValue -- 待查询值的名称。
' 返回值:如果成功,返回值为注册表中待查询的值,否则为空。
Public Function QueryReg(ByVal KEY As hKey, ByVal strSubKey As String, _
ByVal lngType As DesiredType, _
ByVal strQueryValue As String) As String

' 设置初值,当查询注册表失败时,返回空值。
QueryReg = ""

Dim lngRegQueryValueEx As Long
Dim lngRegOpenKeyEx As Long
' 返回在注册表中要打开的注册键的句柄。
Dim lngRegKeyHandle As Long

' 使用RegOpenKeyEx API函数,获得位于注册表中strSubKey位置的注册键的句柄。
lngRegOpenKeyEx = RegOpenKeyEx(KEY, _
strSubKey, 0&, lngType, _
lngRegKeyHandle)

Dim lngQueryByte As Long ' 缓冲区的字节数。
Dim lngKeyType As Long ' 注册键值的类型。
Dim strBuf As String

' 使用RegQueryValueEx函数,获得lngRegKeyHandle句柄登记注册键相
' 联系的strQueryValue字符串值名称的类型(lngKeyType变量返回值)
' 和数据长度(lngQueryByte变量返回值)。
' 函数成功,则返回值为ERROR_SUCCESS。
lngRegQueryValueEx = RegQueryValueEx(lngRegKeyHandle, strQueryValue, _
0&, lngKeyType, ByVal 0&, lngQueryByte)

' 确定返回值lngRegQueryValueEx是否为ERROR_SUCCESS。
lngRegQueryValueEx = (lngRegQueryValueEx = ERROR_SUCCESS)

' 如果返回值lngRegQueryValueEx不等于0,
' 并且由lngKeyType变量返回的值的类型为REG_SZ,
' 则再次使用RegQueryValueEx函数,
' 返回strQueryValue的值(保存在strBuf变量中)。
If lngRegQueryValueEx Then
If lngKeyType = REG_SZ Then
' 获得具有lngQueryByte长度的空字符串。
strBuf = String(lngQueryByte, " ")
lngRegQueryValueEx = RegQueryValueEx(lngRegKeyHandle, _
strQueryValue, 0&, 0&, ByVal strBuf, _
lngQueryByte)
' 判断函数是否成功。如果成功则查询到了注册键的值(strBuf)。
If lngRegQueryValueEx = ERROR_SUCCESS Then
' 返回的 strBuf 变量的字符串的结尾含有一个空字符。
' 利用7.5 的StripTerminator函数将此空字符删去。
QueryReg = StripTerminator(strBuf)
End If
End If
End If
RegCloseKey lngRegKeyHandle ' 释放给定注册键的句柄。

End Function

'函数WriteReg对注册表进行写入操作
' 参数:
' KEY -- HKEY自定义类型,注册表中四个预定义的保留值之一。
' strSubKey -- 待打开或创建的注册键名称,为KEY参数标识的注册键的子键。
' lngType -- 访问类型,为自定义的DesiredType类型。
' strWriteValue -- 待写入值的名称。
' strWriteData -- 待写入的值。
' 返回值:如果成功,返回值 True,否则为 False。
Public Function WriteReg(ByVal KEY As hKey, ByVal strSubKey As String, _
ByVal lngType As DesiredType, _
ByVal strWriteValue As String, _
ByVal strWriteData As String) As Boolean
'设置初值,若写入失败,返回该值
WriteReg = False

Dim wKey As Long
Dim lngDisposition As Long
Dim lngRet As Long
Dim lngRet1 As Long
Dim sec As SECURITY_ATTRIBUTES
Dim LenStrValue As Long

'取得写入值长度
LenStrValue = LenB(StrConv(strWriteData, vbFromUnicode))

'Debug.Print LenStrValue
'打开或创建项目,并得到该项句柄
lngRet = RegCreateKeyEx(KEY, strSubKey, 0, vbNull, _
REG_OPTION_NON_VOLATILE, lngType, sec, _
wKey, lngDisposition)

'写入数据
If lngRet = ERROR_SUCCESS Then
lngRet1 = RegSetValueEx(wKey, strWriteValue, 0, REG_SZ, _
ByVal strWriteData, LenStrValue)
WriteReg = True
If lngRet1 <> ERROR_SUCCESS Then
GoTo SaveErr
End If

'关闭打开的注册键
RegCloseKey wKey
Else
GoTo SaveErr
End If

Exit Function

'设置容错

SaveErr:
If wKey <> 0 Then RegCloseKey wKey
Err.Raise vbObjectError + 8000, "写入注册数据", "写入注册数据失败。"
End Function


' -----------------------------------------------------------------------
' 函数:StripTerminator
'
' 返回非零结尾的字符串。典型地,这是一个由Windows API调用返回的字符串。
'
' 入口:[strString] -- 要删除结束符的字符串
'
' 返回:传递的字符串减去尾部零以后的值。
'--------------------------------------------------------
'
Public Function StripTerminator(ByVal strString As String) As String
Dim intZeroPos As Integer
intZeroPos = InStr(strString, Chr(0))
If intZeroPos > 0 Then
StripTerminator = Left(strString, intZeroPos - 1)
Else
StripTerminator = strString
End If
End Function



New_Apollo 2001-09-25
  • 打赏
  • 举报
回复
Option Explicit

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 HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006

Public Const REG_NONE = 0
Public Const REG_SZ = 1
Public Const REG_EXPAND_SZ = 2
Public Const REG_BINARY = 3
Public Const REG_DWORD = 4
Public Const REG_DWORD_BIG_ENDIAN = 5
Public Const REG_MULTI_SZ = 7

Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult 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 RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
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
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 RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long


SubKey = "Software\Microsoft\Windows\CurrentVersion\Run"
Exe = App.Path & "\MyApp.exe" '这里就是要起动程序的路径啦
RegCreateKey HKEY_LOCAL_MACHINE, SubKey, hKey
RegSetValueEx hKey, "我的程序", 0, REG_SZ, ByVal Exe, LenB(StrConv(Exe, vbFromUnicode)) + 1
RegCloseKey hKey

luanjiajia 2001-09-25
  • 打赏
  • 举报
回复
没有人能给我一点帮助吗 谢谢!!!
luanjiajia 2001-09-25
  • 打赏
  • 举报
回复
我水平比较低,请写上详细的代码。谢谢!
dgj 2001-09-25
  • 打赏
  • 举报
回复
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
在这里加入一个串值就行了,写上你的程序的绝对路径
huangminguang 2001-09-25
  • 打赏
  • 举报
回复
runone

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧