明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2297|回复: 0

在VB中取得WINDOWS的当前目录

[复制链接]
发表于 2012-1-2 20:10:01 | 显示全部楼层 |阅读模式
很多情况下我们需要在程序中确定当前Windows的目录,VB中自身并没有这样的函数,但我们可以借助Windows API来达到目的,这个关键的函数就是:Kernel32中的GetWindowsDirectory。

  首先要在新建的程序中加入一个Module,在该Module中作如下声明:


Declare Function GetWindowsDirectory Lib “kernel32” Alias “GetWindowsDirectoryA” (ByVal lpBuffer As String, ByVal nSize As Long) As Long

  

   这里的几个参数说明一下:lpBuffer是一个字符串,用以返回Windows的目录值(实际上是一个指针),这个目录值不带反斜杠的,比如C:\Windows,但有一种情况例外:当Windows安装在根目录下时返回反斜杠,比如C:\;第二个参数是前一个字串的长度,你得告诉系统为返回值预留的字串的最大长度(其实这个参数实在有些鸡肋的感觉);函数的返回值,在成功的情况下是目录字符串的长度,在不成功时返回NULL值,还有一种情况,就是返回值超出预留的串长度,那么该函数就返回实际值应有的长度。


  函数说明完毕,可以看到,为了防止出错情况,函数引入了nSize参数,但只要使用下述经典的取目录代码,可保证程序平稳运行。


Public Function MyGetWinDirectory() As String

   Dim sBuffer As String

   Dim lSize As Long

   sBuffer = String(255, 0)

   lSize = GetWindowsDirectory (sBuffer, Len(sBuffer))

   sBuffer = Left(sBuffer, lSize)

   sBuffer = sBuffer + “\”

   MyGetWinDirectory = sBuffer

End Function

  

   这里程序首先为字符预留了255Bytes,应该是足够了,不会有人用这么长的Windows目录名的,更重要的是超出255的长文件名Windows是不支持的;然后调用GetWindowsDirectory函数
我的百分之一
,通过返回值lSize截取缓冲区中有用的部分重新定义sBuffer;最后再加上反斜杠,形成完整的路径名。


  现在你可以试一下你的新函数:在窗体Form1中加入一个文本框Text1,然后再加入一个命令键Command1,在Command1_Click()事件中加入以下代码:


 Private Sub Command1_Click()

   Text1 = MyGetWinDirectory

   MsgBox Text1

  End Sub

 

   最后运行程序,占击一下Command1,看一下实际的运行效果。


PS.对1#的回复,我说一句:这篇文章有不少年头了。不用计较现在和过去代码的区别。


哈哈 :)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:54 , Processed in 0.173123 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表