回 帖 发 新 帖 刷新版面

主题:[讨论]关于字符串转换成长整形的问题

在使用OpenRegKey()时,想利用字符串数组循环代入注册表根键hkey。循环打开根键。
但是发现hKey是long类型,所以提示“类型不匹配”。。。

后来查得Clng()可以转换字符串至long,但还提示“类型不匹配”


KeyRootCont = Array("HKEY_CURRENT_USER", "HKEY_LOCAL_MACHINE")
KeySubCont = Array("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")
For KeyRootIndex = 0 To 1
    For KeySubIndex = 0 To 1
        RegOpenKey(Clng(KeyRootCont(KeyRootIndex)), KeySubCont(KeySubIndex), hKeyRoot)
    Next
Next

不过,利用字符串数组KeySubCont(KeySubIndex)循环代替字符串lpSubKey到是行的通。


请问,怎么实现用字符串数组循环代替hKey?

说说可行的思路也好 ^_^

回复列表 (共4个回复)

沙发

注册表的根键有固定的Long值,先在Option Explicit节中声明:

Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002

板凳

哦 对了 是声明了

请问:

将 &H80000001...代入数组能行吗?

今上班 没法试 麻烦相告

3 楼

去掉这一句之中的双引号:

KeyRootCont = Array(HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE)

有引号时,这个数组就成了字符型的而不是Long型的


Option Explicit

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002

Private Sub Command1_Click()
Dim R, KeyRootCont, KeySubCont
Dim KeyRootIndex As Integer, KeySubIndex As Integer
Dim hKeyRoot As Long

KeyRootCont = Array(HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE)
KeySubCont = Array("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run")

For KeyRootIndex = 0 To 1
    For KeySubIndex = 0 To 1
      R = RegOpenKey(KeyRootCont(KeyRootIndex), KeySubCont(KeySubIndex), hKeyRoot)
      Debug.Print R, hKeyRoot
    Next
Next

End Sub

4 楼

我看行 非常感谢秋水

没办法 只能给你50分了...

明天回家再去试了

我来回复

您尚未登录,请登录后再回复。点此登录或注册