请问:如何在 VB 程序启动后指定当前文件夹

小白兔 2004-11-28 03:12:03
我现在已经知道注册表何处存放“我的文档”文件夹的位置,如何把这个位置告诉程序,以便每次启动都用“ChDir”命令把当前用户的“我的文档”文件夹作为程序的当前文件夹……
...全文
219 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tztz520 2004-11-28
  • 打赏
  • 举报
回复
Private Const HKEY_CURRENT_USER As Long = &H80000001'已经定义到窗口上了.就是我刚回你的那代码.
小白兔 2004-11-28
  • 打赏
  • 举报
回复
“午夜逛街”:你的程序运行到“HKEY_CURRENT_USER”时提示未声明变量????
tztz520 2004-11-28
  • 打赏
  • 举报
回复
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByRef lpData As Any, ByRef lpcbData As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKEY_CURRENT_USER As Long = &H80000001

'-------------------------------------------------------------------------------
Private Sub Command1_Click()
Dim hKey As Long, ret As Long, Name As String, Idx As Long
Dim tempName As String
Name = String(256, Chr(0))
ret = RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", hKey)
ret = RegQueryValueEx(hKey, "Personal", 0, 1, ByVal Name, Len(Name))
RegCloseKey hKey
MsgBox Name
End Sub
小白兔 2004-11-28
  • 打赏
  • 举报
回复
注册表目录:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,里边存放 Windows 系统文件夹的位置,例如我的电脑、图片收藏、音乐收藏……
qiqi5521 2004-11-28
  • 打赏
  • 举报
回复
别人都贴了,我也贴吧
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long


Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long


Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long


Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long


Declare Function RegCreateKeyEx Lib "advapi32" 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

Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long

#If Win32 Then

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 KEY_ALL_ACCESS = &H3F
Public Const REG_OPTION_NON_VOLATILE = 0&
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const ERROR_SUCCESS = 0&
Public Const REG_SZ = (1)
#End If


Type SECURITY_ATTRIBUTES

nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean

End Type

Public Const SREG = "SOFTWARE\Spyder-Net Productions\SpyderPF"

Public Function bSetRegValue(ByVal hKey As Long, ByVal lpszSubKey As String, ByVal sSetValue As String, ByVal sValue As String) As Boolean

On Error Resume Next
Dim phkResult As Long
Dim lResult As Long
Dim SA As SECURITY_ATTRIBUTES
Dim lCreate As Long
RegCreateKeyEx hKey, lpszSubKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, SA, phkResult, lCreate
lResult = RegSetValueEx(phkResult, sSetValue, 0, REG_SZ, sValue, CLng(Len(sValue) + 1))
RegCloseKey phkResult
bSetRegValue = (lResult = ERROR_SUCCESS)

End Function


Public Function bGetRegValue(ByVal hKey As Long, ByVal sKey As String, ByVal sSubKey As String) As String

Dim lResult As Long
Dim phkResult As Long
Dim dWReserved As Long
Dim szBuffer As String
Dim lBuffSize As Long
Dim szBuffer2 As String
Dim lBuffSize2 As Long
Dim lIndex As Long
Dim lType As Long
Dim sCompKey As String

lIndex = 0
lResult = RegOpenKeyEx(hKey, sKey, 0, 1, phkResult)


Do While lResult = ERROR_SUCCESS And Not (bFound)
szBuffer = Space(255)
lBuffSize = Len(szBuffer)
szBuffer2 = Space(255)
lBuffSize2 = Len(szBuffer2)
lResult = RegEnumValue(phkResult, lIndex, szBuffer, lBuffSize, dWReserved, lType, szBuffer2, lBuffSize2)


If (lResult = ERROR_SUCCESS) Then
sCompKey = Left(szBuffer, lBuffSize)


If (sCompKey = sSubKey) Then
bGetRegValue = Left(szBuffer2, lBuffSize2 - 1)
End If
End If
lIndex = lIndex + 1

Loop
RegCloseKey phkResult
End Function

Public Function bIndexReg(ByVal hKey As Long, ByVal sKey As String, lstBox As ListBox, val As String) As String

Dim lResult As Long
Dim phkResult As Long
Dim dWReserved As Long
Dim szBuffer As String
Dim lBuffSize As Long
Dim szBuffer2 As String
Dim lBuffSize2 As Long
Dim lIndex As Long
Dim lType As Long
Dim sCompKey As String
Dim i As Long
Dim r_List

lIndex = 0
lResult = RegOpenKeyEx(hKey, sKey, 0, 1, phkResult)


Do While lResult = ERROR_SUCCESS And Not (bFound)
szBuffer = Space(255)
lBuffSize = Len(szBuffer)
szBuffer2 = Space(255)
lBuffSize2 = Len(szBuffer2)
lResult = RegEnumValue(phkResult, lIndex, szBuffer, lBuffSize, dWReserved, lType, szBuffer2, lBuffSize2)


If (lResult = ERROR_SUCCESS) Then
sCompKey = Left(szBuffer, lBuffSize)

If Left(szBuffer2, lBuffSize2 - 1) = val Then

lstBox.AddItem sCompKey

End If

End If
lIndex = lIndex + 1

Loop
RegCloseKey phkResult
End Function

Function DelSetting(hKey As Long, strPath As String, strValue As String)
Dim Ret
'Create a new key
RegCreateKey hKey, strPath, Ret
'Delete the key's value
RegDeleteValue Ret, strValue
'close the key
RegCloseKey Ret
End Function
tztz520 2004-11-28
  • 打赏
  • 举报
回复
想问一下楼主.

你怎么可以注册中文名的.
qiqi5521 2004-11-28
  • 打赏
  • 举报
回复
你把注册表的那个路径粘出来,再写给你
tztz520 2004-11-28
  • 打赏
  • 举报
回复
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByRef lpData As Any, ByRef lpcbData As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKEY_LOCAL_MACHINE As Long = &H80000002'要定义的键
'-------------------------------------------------------------------------------
Private Sub Command1_Click()
Dim hKey As Long, ret As Long, Name As String, Idx As Long
Dim tempName As String
Name = String(256, Chr(0))
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\abcd", hKey)'路径
ret = RegQueryValueEx(hKey, "path", 0, 1, ByVal Name, Len(Name))'读一个值
RegCloseKey hKey
MsgBox Name
End Sub
'根据你的路径就可以读出了
tztz520 2004-11-28
  • 打赏
  • 举报
回复
你把注册表的那个路径粘出来,再写给你
小白兔 2004-11-28
  • 打赏
  • 举报
回复
晕……我就是不会读取注册表嘛……呵呵最好给我一个 Basic 代码,有点说明最好……谢谢
tztz520 2004-11-28
  • 打赏
  • 举报
回复
从注册表中读出来位置出来不行吗?

1,488

社区成员

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

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