CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

SHBrowseForFolder设置默认路径问题?(急)

楼主lhfcsdn(http://shop33840643.taobao.com/)2006-03-01 14:37:16 在 VB / API 提问

以下是调用SHBrowseForFolder函数弹出窗口时,直接跳到特定路径的函数;  
   
  'vDefaultPath:这个是特定路径的设置值  
   
  Public   Function   BrowseFolder(ByVal   hwnd   As   Long,   ByVal   Title   As   String,   ByVal   vDefaultPath   As   String)   As   String  
          Dim   bi   As   BROWSEINFO  
          Dim   rtn,   pid   As   Long  
          Dim   Path   As   String   *   512  
          Dim   pos   As   Integer  
          Dim   ret   As   Long  
          With   bi  
                  .hOwner   =   hwnd  
                  .ulFlags   =   BIF_NEWDIALOGSTYLE   +   BIF_EDITBOX   +   BIF_RETURNONLYFSDIRS   +   BIF_DONTGOBELOWDOMAIN   'BIF_RETURNONLYFSDIRS   Or  
                  .lpszTitle   =   Title  
           
                  .lpfn   =   MyAddressOf(AddressOf   BrowseForFolders_CallbackProc)  
                  ret   =   LocalAlloc(LPTR,   VBA.Len(vDefaultPath)   +   1)  
                  CopyMemory   ByVal   ret,   ByVal   vDefaultPath,   VBA.Len(vDefaultPath)   +   1  
                  .lParam   =   ret  
          End   With  
          pid   =   SHBrowseForFolder(bi)  
          rtn   =   SHGetPathFromIDList(ByVal   pid,   ByVal   Path)  
          If   rtn   Then  
                  pos   =   InStr(Path,   Chr(0))  
                  BrowseFolder   =   Left(Path,   pos   -   1)  
          Else  
                  BrowseFolder   =   ""  
          End   If  
  End   Function  
   
   
   
   
   
   
   
   
   
  现在的问题是,如果路径设置比较潜,该函数运行正常,否则无效。具体多路径中最大包含多少字符以上,该函数失效,现暂时未做统计。  
   
  比如:如果设置为       "D:\tmp\tmp",就可以  
                  否则如果是   "d:\tmp\渠道广告\新建文件夹\新建文件夹\新建文件夹\新建文件夹\渠道广告"则不行了。  
   
  问题点数:100、回复次数:11Top

1 楼Modest(塞北雪貂)·(偶最欣赏楼主的分)回复于 2006-03-01 14:46:26 得分 5

转换成短文件名试试Top

2 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-01 15:27:11 得分 25

先引用   Microsoft   Shell   Controls   And   Automation:  
  Private   Sub   Command1_Click()  
  Dim   mshell   As   New   Shell  
  Dim   mfolder   As   Folder  
  Set   mfolder   =   mshell.BrowseForFolder(Me.hWnd,   "test",   1,   "E:\mc\高级vb编程\PowerVB\Tools\Src")'参数1,可以改为你需要的flag,比如BIF_NEWDIALOGSTYLE   +   BIF_EDITBOX   +   BIF_RETURNONLYFSDIRS   +   BIF_DONTGOBELOWDOMAIN    
  If   ObjPtr(mfolder)   =   0   Then  
  Exit   Sub  
  End   If  
  MsgBox   mfolder.Self.Path  
  End   Sub  
   
  Top

3 楼lhfcsdn(http://shop33840643.taobao.com/)回复于 2006-03-02 09:10:38 得分 0

to   rainstormmaster:  
   
  用您提供的方法,对默认路径深度或者说对默认路径字符总个数有没有限制?Top

4 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-02 14:32:49 得分 0

//用您提供的方法,对默认路径深度或者说对默认路径字符总个数有没有限制?  
   
  没试过,应该是没有额外的限制,不过,你要注意,windows对文件路径是有长度限制的Top

5 楼xinliangyu(yxl)回复于 2006-03-02 14:43:42 得分 70

楼主的问题不是出在路径的"深""浅"上,而是对双字节的汉字处理上的问题!  
   
  不妨把"D:\tmp\tmp"改为"D:\一",够"浅"吧,但问题会依旧!  
   
  在向API传字符串长度度的其他场合,我也遇到过同样的问题."通常"API应接收的是字节数,而  
  不是字符数.对于你的问题,可以这样:  
   
  改  
  ret   =   LocalAlloc(LPTR,   VBA.Len(vDefaultPath)   +   1)  
  为  
  ret   =   LocalAlloc(LPTR,   VBA.LenB(StrConv(vDefaultPath,   vbFromUnicode))   +   1)Top

6 楼xinliangyu(yxl)回复于 2006-03-03 10:13:13 得分 0

"急"楼主,问题解决了吧?Top

7 楼lhfcsdn(http://shop33840643.taobao.com/)回复于 2006-03-06 09:08:43 得分 0

to   xinliangyu(yxl):  
  非常抱歉,这么晚才回你!  
   
  可以选择任意深度的目录了,但现在伴随出现一个棘手的错误:系统错误,“***产生了错误,会被windows关闭,您需要重新启动程序。     正在创建错误日志。”  
   
  Top

8 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-06 09:20:45 得分 0

//可以选择任意深度的目录了,但现在伴随出现一个棘手的错误:系统错误,“***产生了错误,会被windows关闭,您需要重新启动程序。     正在创建错误日志。”  
   
  可能是回调函数的问题,我不知道你不是有特殊的用途,如果只是选择文件夹的话,没必要回调Top

9 楼tongiii(索罗·希尔)回复于 2006-03-06 09:30:57 得分 0

关注一下Top

10 楼xinliangyu(yxl)回复于 2006-03-06 11:29:56 得分 0

回调中出"系统错误"不太好确定原因.使用shell对象,如rainstormmast的代码所示,也未为不可Top

11 楼lhfcsdn(http://shop33840643.taobao.com/)回复于 2006-03-06 13:13:33 得分 0

我把原来代码中的   LocalAlloc和copyMemory函数中的len都换成lenb后,问题解决。谢谢楼上各位了。Top

相关问题

  • 请问 SHBrowseForFolder 如何设置 默认路径?
  • tomcat设置默认路径
  • 怎样设置websphere中的默认路径?
  • 如何设置“图片另存为”的默认路径?
  • VC中设置默认路径的命令是什么啊?
  • 关于设置上传文件的默认路径问题
  • CFileDialog中设置打开的默认路径
  • 怎么设置下载提示对话框的默认路径
  • 如何设置SHBrowseForFolder的初始路径
  • 怎样设置使新建的虚拟目录为默认访问路径

关键词

  • 函数
  • 文件夹
  • 字符
  • vba
  • bi
  • 系统
  • 路径
  • vdefaultpath
  • bif
  • 默认

得分解答快速导航

  • 帖主:lhfcsdn
  • Modest
  • rainstormmaster
  • xinliangyu

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo