VB取得系統路徑的方法
程式設計者在設計程式時,常常會需要用到一些常用的系統路徑。例如:「桌面」路徑、「我的文件」路徑、「Program Files」路徑、「WINDOWS」路徑。而要如何才能取得這些路徑的位址呢?這正是本篇教學所要講的。
為了方便訪客尋找資料,我就來弄個教學書籤好了^^
快速書籤:
取得VB程式的自身路徑
這是一個很簡單的動作,App(應用程式本身)裡面原本就有這個屬性方法了。程式碼如下:
1 2 3 |
Sub GetMeDir() '取得自身路徑 Print "本程式的路徑為:"; App.Path End Sub |
補充資料:
App.Path:取得程式自身路徑
App.EXEName:取得程式檔名
App.EXEName:取得程式檔名
App.PrevInstance:取得程式是否已開啟(傳回布林值,True為開啟,False反之)
App.Major:傳回程式版本x.x.x
App.Minor:傳回程式版本x.x.x
App.Revision:傳回程式版本x.x.x
取得程式版本寫法:
1 2 3 |
Sub GetRevision() '取得自身版本 Print "本程式的版本為:"; App.Major & "." & App.Minor & "." & App.Revision '版本格式:x.x.x End Sub |
取得Windows的路徑
利用「GetWindowsDirectory」API函數可以輕易做出這個功能,其宣告方法如下:
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long |
參數說明:
lpBuffer:傳入足夠長度的字串,然後再傳回Windows的所在目錄。建議配置的字串長度是(MAX_PATH=)260。
nSize:傳入的字串長度。
GetWindowsDirectory傳回值若等於0則表示取得Windows路徑失敗,若不等於零則表示路徑取得成功。此外,GetWindowsDirectory的傳回值就是路徑的長度。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub GetWDir() '取得WINDOWS路徑 Dim Buffer As String '作為lpBuffer Dim rtn As Long '儲存GetWindowsDirectory的return值 Const MAX_PATH = 260 '設定最大字串長度 Buffer = Space(MAX_PATH) '讓Buffer儲存MAX_PATH(260)個空白字元 rtn = GetWindowsDirectory(Buffer, Len(Buffer)) 'GetWindowsDirectory(lpBuffer,nSize) If rtn = 0 Then '判斷GetWindowsDirectory是否有取得路徑 Print "WINDOWS路徑取得失敗!" '取得失敗提示 Else '如果rtn不為0 Print "WINDOWS路徑為:"; Buffer 'Buffer經過GetWindowsDirectory函數處理後,儲存的字串已為WINDOWS路徑 End If End Sub |
取得WindowsSystem的路徑
利用「GetSystemDirectory」API函數可以輕易做出這個功能,其宣告方法如下:
Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long |
參數說明:
lpBuffer:傳入足夠長度的字串,然後再傳回Windows的所在目錄。建議配置的字串長度是(MAX_PATH=)260。
nSize:傳入的字串長度。
GetSystemDirectory傳回值若等於0則表示取得System路徑失敗,若不等於零則表示路徑取得成功。此外,GetSystemDirectory的傳回值就是路徑的長度。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub GetSDir() '取得SYSTEM路徑 Dim Buffer As String '作為lpBuffer Dim rtn As Long '儲存GetSystemDirectory的return值 Const MAX_PATH = 260 '設定最大字串長度 Buffer = Space(MAX_PATH) '讓Buffer儲存MAX_PATH(260)個空白字元 rtn = GetSystemDirectory(Buffer, Len(Buffer)) 'GetSystemDirectory(lpBuffer,nSize) If rtn = 0 Then '判斷GetSystemDirectory是否有取得路徑 Print "SYSTEM路徑取得失敗!" '取得失敗提示 Else '如果rtn不為0 Print "SYSTEM路徑為:"; Buffer 'Buffer經過GetSystemDirectory函數處理後,儲存的字串已為SYSTEM路徑 End If End Sub |
取得桌面路徑
要做到這個功能,可能以讀取登錄檔的方法比較簡單。我們要建立一個「wscript.shell」Object,利用「.regread」來讀取登錄擋。桌面路徑應該位於登錄擋「HKEY_CURRENT_USERSoftwareMicrosoftWindows
CurrentVersionExplorerShell Folders」的Desktop字串值裡。
程式碼如下:
1 2 3 4 5 6 7 |
Sub GetDeskDir() '取得桌面 Dim wshshell As Object '宣告wshshell為一個Object Dim strDesktop As String 'strDesktop變數儲存wshshell.regread的傳回值 Set wshshell = CreateObject("wscript.shell") '將"wscript.shell"載入到wshshell內 strDesktop = wshshell.regread("HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell FoldersDesktop") '取得桌面路徑 Print "桌面路徑為:"; strDesktop End Sub |
補充:
Startup字串值存放的是「啟動」路徑,若要讓某檔案開機時自動執行,就可以使用這個路徑。
取得我的文件路徑
要做到這個功能,可能以讀取登錄檔的方法比較簡單。我們要建立一個「wscript.shell」Object,利用「.regread」來讀取登錄擋。桌面路徑應該位於登錄擋「HKEY_CURRENT_USERSoftwareMicrosoftWindows
CurrentVersionExplorerShell Folders」的Personal字串值裡。
程式碼如下:
1 2 3 4 5 6 7 |
Sub GetPersonalDir() '取得我的文件路徑 Dim wshshell As Object '宣告wshshell為一個Object Dim strPersonal As String 'strPersonal變數儲存wshshell.regread的傳回值 Set wshshell = CreateObject("wscript.shell") '將"wscript.shell"載入到wshshell內 strPersonal = wshshell.regread("HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell FoldersPersonal") '取得我的文件路徑 Print "我的文件路徑為:"; strPersonal End Sub |
取得Program Files路徑
要做到這個功能,可能以讀取登錄檔的方法比較簡單。我們要建立一個「wscript.shell」Object,利用「.regread」來讀取登錄擋。桌面路徑應該位於登錄擋「HKEY_LOCAL_MACHINESoftwareMicrosoftWindows
CurrentVersion」的ProgramFilesDir字串值裡。
程式碼如下:
1 2 3 4 5 6 7 |
Sub GetProDir() '取得Program Files路徑 Dim wshshell As Object '宣告wshshell為一個Object Dim strPro As String 'strPro變數儲存wshshell.regread的傳回值 Set wshshell = CreateObject("wscript.shell") '將"wscript.shell"載入到wshshell內 strPro = wshshell.regread("HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionProgramFilesDir") '取得Program Files路徑 Print "Program Files路徑為:"; strPro End Sub |
取得Windows所在的磁碟機代號
有兩種方法可以做到此功能:第一種是用「GetWindowsDirectory」API函數先取得WINDOWS路徑,接著再把路徑中的磁碟機代號取出。第二種是直接取得登錄檔的字串值。兩種方法均寫成程式碼,程式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub GetSysDrive1() '取得Windows所在的磁碟機代號方法一 Dim Buffer As String '作為lpBuffer Dim rtn As Long '儲存GetWindowsDirectory的return值 Const MAX_PATH = 260 '設定最大字串長度 Buffer = Space(MAX_PATH) '讓Buffer儲存MAX_PATH(260)個空白字元 rtn = GetWindowsDirectory(Buffer, Len(Buffer)) 'GetWindowsDirectory(lpBuffer,nSize) If rtn = 0 Then '判斷GetWindowsDirectory是否有取得路徑 Print "磁碟機代號取得失敗!" '取得失敗提示 Else '如果rtn不為0 Print "Windows所在的磁碟機代號為:"; Left(Buffer, 2) 'Buffer經過GetWindowsDirectory函數處理後,儲存的字串已為WINDOWS路徑。路徑最左邊的兩個字元就是磁碟機代號 End If End Sub Sub GetSysDrive2() '取得Windows所在的磁碟機代號方法二 Dim wshshell As Object '宣告wshshell為一個Object Dim strSDr As String 'strSDr變數儲存wshshell.regread的傳回值 Set wshshell = CreateObject("wscript.shell") '將"wscript.shell"載入到wshshell內 strSDr = wshshell.regread("HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionSetupBootDir") '取得磁碟機代號 Print "Windows所在的磁碟機代號為:"; strSDr End Sub |
教學到此結束,剩下的部分就由各位程式設計者去發揮了!