Option ExplicitPrivate Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey 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
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1
-----------------------------------
Sub SetMyValue(hKey As Long, strPath As String, strValue As String, strData As String)
Dim keyHandle
Dim lResult As Long
lResult = RegCreateKey(hKey, strPath, keyHandle)
lResult = RegSetValueEx(keyHandle, strValue, 0, REG_SZ, ByVal strData, Len(strData))
lResult = RegCloseKey(keyHandle)
End Sub
------------------------------------------
Private Sub Command1_Click()
Dim aa As String
Dim bb As String
aa = "REGtest"
bb =App.path'这一步是获取程序所在路径名
if right(bb,1)<>"\" then bb=bb & "\"'这是判断路径名末尾是否为“\”,不是就加上“\”
bb=bb & App.EXEName & ".exe"'这是将路径名和程序名以及后缀名添加在一起,不过App.EXEName只有在编译之后才能有返回值SetMyValue HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Windows\CurrentVersion\Run", aa, bb
End Sub 
------------------------------为什么我最后编译以后查看注册表REGtest后的数值不完整?路径是对的。只是比如我编译后的程序名是test.exe而在注册表里数值显示的是test.e  
我试验了一下在一般目录下没有问题。只是在带有中文字符的目录下会出现扩展名或者整个路径不全的问题。
比如 D:\试验\test.e 或者是 D:\试验品\t 或面的est.exe都没有 请问是何道理
问了一个行家说是上面“Len(strData)”的问题。但是我不懂应该怎么改。。知道的教一下。谢谢!!

解决方案 »

  1.   

    lResult = RegSetValueEx(keyHandle, strValue, 0, REG_SZ, ByVal strData, LenB(strData))长度按字节计算
      

  2.   

    lResult = RegSetValueEx(keyHandle, strValue, 0, REG_SZ, ByVal strData, LenB(StrConv(strData, vbFromUnicode))
      

  3.   

    lResult = RegSetValueEx(keyHandle, strValue, 0, REG_SZ, ByVal strData, LenB(strData))
    正解!
      

  4.   

    lResult  =  RegSetValueEx(keyHandle,  strValue,  0,  REG_SZ,  ByVal  strData,  LenB(StrConv(strData,  vbFromUnicode))  
    ==================================================
    lResult  =  RegSetValueEx(keyHandle,  strValue,  0,  REG_SZ,  ByVal  strData,  LenB(strData))  这两个有什么差别马?
      

  5.   

    LenB(strData))会把strData中的普通英文字符比如"a"也算为2,而LenB(StrConv(strData,  vbFromUnicode))只会把汉字等算为2英文字符依然为1