很有难度的VB开机自动运行的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:27:59
要我们用VB编写一个开机自动运行的代码可能很简单.但是如果要求是在往注册表加载的时候要先判断是否已经加载过了,如果已经加载了那么就不用再次加载,如果没有加载那么就进行加载.
各位大侠我已经想这个问题想了好多天了,请各位大侠帮小弟想想这个问题.下面是小弟实现开机自动运行的代码.请各位在这个代码的基础上帮小弟实现判断是否已经加载的功能.谢谢
模块代码
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

'用来建立关键字

Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
'用来登陆关键字

Public 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 ' Note that if you declare the lpData parameter as String, you must pass it By Value.
'将文本字符串与指定关键字关联

Const REG_SZ = 1
Const HKEY_CURRENT_USER = &H80000001
'以上为API声明部分和变量定义

Sub

你可以先读取注册表相应键值
然后和你要写入的值比较如果相同就忽略
读取注册表值用
Public 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
我写了个完整的函数来读取注册表中的字符串值,函数的返回值就是读取到的值
如果读取失败则返回默认值DefaultValue
Public Function RegReadValueString(ByVal RegHKey As Long, ByVal RegSubKey As String, ByVal RegValueName As String, Optional DefaultValue As String = vbNullString) As String
On Error GoTo errdeal
Dim RegBuffer As Long
Dim RegDataString As String
Dim RegKey As Long
Dim RegType As Long
If RegCreateKey(RegHKey, RegSubKey, RegKey) = 0& Then
If RegQueryValueEx(RegKey, RegValueName, 0&, RegType, ByVal 0&, RegBuffer) = 0& Then
If RegType = REG_SZ Then
RegDataString = String(RegBuffer, Chr(0))
If RegQueryValueEx(RegKey, RegValueName, 0&, 0&, ByV