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 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 RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1Private Sub SetKeyDwordValue(ByVal Reg As String, ByVal Key As String, ByVal SubKey As String, ByVal KeyType As String, ByVal KeyValue_DWORD As String)
Dim KeyID As Long
Dim KeyStatus As LongKeyStatus = RegCreateKey(Reg, Key, KeyID)
RegSetValueEx KeyID, SubKey, 0&, KeyType, ByVal KeyValue_DWORD, Len(KeyValue_DWORD)KeyStatus = RegCloseKey(KeyID)
End Sub例子: 
        Call SetKeyDwordValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "DelDriver", REG_SZ, "D:\驱动工具\Driver.exe")问题:
写入注册后察看了注册表,发现的数值并不完整,我上面的数值是"D:\驱动工具\Driver.exe"
但是注册表中显示的是"D:\驱动工具\Driver.ex"     少了个"e"
经过几次测试发现如果文件夹名用英文字母的话就正常.如:"D:\Tool\Driver.exe"
并且如果文件名用中文名,而名字越长,后面就少更多字符。
请问这是原因

解决方案 »

  1.   

    用这个API函数:
    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
    此API函数默认把中文字当两个字符处理,而Len默认把中文字按一个字符处理。
    不过呢,lstrlen函数的速度远没有Len速度快。
    如果对速度要求不是很高的话,就用它吧还有一个问题,你留意到API函数RegSetValueEx的第4个参数的类型没有???
    如果我没看错的话应该是Long类型吧!!!那现在在看看你自定义过程中调用的时候给它什么类型
    如果我没看错的话应该是String类型吧!!!Private Const REG_NONE = 0
    Private Const REG_SZ = 1
    Private Const REG_EXPAND_SZ = 2
    Private Const REG_BINARY = 3
    Private Const REG_DWORD = 4
    Private Const REG_MULTI_SZ = 7
    请参考上面的类型