This little article will show you how to get the Windows directory/folder using both classic vb and vb.net. For some reason Microsoft didn’t add built-in support for getting the path of the users windows directory until .NET 4.0. It is located under the: Environment.SpecialFolders feature. Otherwise I will show a way to get the windows path in the earlier versions of VB.NET and a way to get the directory path using VB 6.0 and Visual Basic.NET.
Both VB6.0 and Visual Basic NET
This is a simple API call that will give you the windows installed directory for the computer. You just need to create a string buffer and the api function will set the information you want in that buffer.
'Visual Basic 6.0 Declare Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'Visual Basic.NET Declare Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Int32) As Int32
Remaining code for API Method for All VB’s below…
'For both VB and VB.NET. This variable is for receiving the path from the API call. Dim winDir As String 'Create a simple string buffer that will be passed to the api call to receive the directory for windows. winDir = Space$(255) 'The winDir variable will get the value from the api call. GetWindowsDirectory winDir, Len(winDir) 'Trim the end of the value to remove the unused whitespaces from the string buffer. winDir = RTrim(winDir) 'This should throw a message box displaying the windows directory for the target computer. MsgBox(winDir)
When executing the code above, you should get a messagebox with the target computers Windows directory. It could be something similar to: “C:\Windows”
.NET based only using MY. below
Like I mentioned earlier Microsoft failed to include the Windows Directory as a Special Folder until .NET 4.0. But there is a another easy way to do it if you don’t want to use the API method.
This first way will actually use the Special Folder feature in .NET but will target the Environment.SystemDirectory. Since the System32 directory is always located under the base windows folder all you have to do is get the parent path of the SystemDirectory.
The code above will throw a message with the parent path for the System32 directory. In my case is returned ‘c:\Windows’ just like the API version did.
There are other ways to get the windows direcory like checking a environment variable that I might add later on. The API version works great for both VB 6.0 and VB.NET, and the System32 method works just fine for .NET. Remember Microsoft included the WindowsDirectory as a SpecialFolder in Visual Basic 2010 so you should use that method if possible. Anyways, thats all!