|
|
|
Way back when Microsoft released Internet Explorer 4.0, they bundled with it a number of upgrades to the operating system including a new DLL called SHLWAPI.DLL (Shell Lightweight Utility APIs). That DLL provided programmers with some useful path manipulation functions (amongst other things), but obviously any applications that made use of those functions would also require that the user had installed Internet Explorer. Of course, now that Microsoft has 'integrated' their web browser into the operating system, the availability of SHLWAPI.DLL is no longer as much of an issue, so this article may seem a bit dated (it's been a while since I've had a chance to update this site). However, if you're still writing code for Windows 95 and NT 4.0, you might find it helpful to know that many of the functions in SHLWAPI.DLL are already available in a regular installation of Windows 95 in SHELL32.DLL - they're just not documented.
Now lets see different Path related APIs with examples
Combining and Constructing Path
To start off with, we're going to look at some functions for combining and constructing new paths.
PathAddBackslash (ordinal 32): Adds a backslash to the end of a string to create the correct syntax for a path. If the source path already has a trailing backslash, no backslash will be added.
PathAddExtension : Adds a file extension to a path string.
PathAppend (ordinal 36): Appends one path to the end of another.
PathBuildRoot (ordinal 30): Creates a root path from a given drive number.
PathCanonicalize : Canonicalizes a path. (e.g. c:\dir1\..\dir2 => c:\dir2)
PathCombine (ordinal 37): Similar to PathAppend, but it's considerably more powerful. You get to provide a separate destination buffer, lpszDestPath, so you don't have to overwrite your source data. Also, the function doesn't necessarily append lpszSrcPath2 onto the end of lpszSrcPath1. If lpszSrcPath2 starts with a backslash it is appended to the root of lpszSrcPath1. If lpszSrcPath2 is a full path (with drive specification or UNC) it overwrites lpszSrcPath1 altogether. The function returns NULL if there is not enough space. If the operation is successful it returns a pointer to lpszDestPath.
PathCommonPrefix : Compares two paths to determine if they share a common prefix. A prefix is one of these types: "C:\\", ".", "..", "..\\".
PathCompactPath : Truncates a file path to fit within a given pixel width by replacing path. components with ellipses. You can define path width in pixels for a specified DC. PathCompactPathEx : Truncates a path to fit within a certain number of characters by replacing path components with ellipses. This function similar to the PathCompactPath but the only difference is instead of pixel yoou can define path width in characters.
PathCreateFromUrl : Takes a file URL and converts it to a DOS path. PathMakePretty : Converts a path to all lowercase characters to give the path a consistent appearance.
PathQuoteSpaces : Searches a path for spaces. If spaces are found, the entire path is enclosed in quotation marks.
PathUnquoteSpaces : Removes quotes from the beginning and end of a path. |
Click here to copy the following block |
Private Declare Function PathAddBackslash Lib "shlwapi.dll" Alias "PathAddBackslashA" ( _ ByVal pszPath As String) As Long Private Declare Function PathAddExtension Lib "shlwapi.dll" Alias "PathAddExtensionA" ( _ ByVal pszPath As String, _ ByVal pszExt As String) As Long Private Declare Function PathAppend Lib "shlwapi.dll" Alias "PathAppendA" ( _ ByVal pszPath As String, _ ByVal pMore As String) As Long Private Declare Function PathBuildRoot Lib "shlwapi.dll" Alias "PathBuildRootA" ( _ ByVal szRoot As String, _ ByVal iDrive As Long) As Long Private Declare Function PathCanonicalize Lib "shlwapi.dll" Alias "PathCanonicalizeA" ( _ ByVal pszBuf As String, _ ByVal pszPath As String) As Long Private Declare Function PathCombine Lib "shlwapi.dll" Alias "PathCombineA" ( _ ByVal szDest As String, _ ByVal lpszDir As String, _ ByVal lpszFile As String) As Long Private Declare Function PathCommonPrefix Lib "shlwapi.dll" Alias "PathCommonPrefixA" ( _ ByVal pszFile1 As String, _ ByVal pszFile2 As String, _ ByVal achPath As String) As Long Private Declare Function PathCompactPath Lib "shlwapi.dll" Alias "PathCompactPathA" ( _ ByVal hDC As Long, _ ByVal pszPath As String, _ ByVal dx As Long) As Long Private Declare Function PathCompactPathEx Lib "shlwapi.dll" Alias "PathCompactPathExA" ( _ ByVal pszOut As String, _ ByVal pszSrc As String, _ ByVal cchMax As Long, _ ByVal dwFlags As Long) As Long Private Declare Sub PathCreateFromUrl Lib "shlwapi.dll" Alias "PathCreateFromUrlA" ( _ ByVal pszUrl As String, _ ByVal pszPath As String, _ ByRef pcchPath As Long, _ ByVal dwFlags As Long) Private Declare Function PathMakePretty Lib "shlwapi.dll" Alias "PathMakePrettyA" ( _ ByVal pszPath As String) As Long Private Declare Sub PathQuoteSpaces Lib "shlwapi.dll" Alias "PathQuoteSpacesA" ( _ ByVal lpsz As String) Private Declare Sub PathUnquoteSpaces Lib "shlwapi.dll" Alias "PathUnquoteSpacesA" ( _ ByVal lpsz As String)
Private Sub Demo1() Dim strOutBuffer As String
strOutBuffer = "c:\Windows" + String(100, 0) PathAddBackslash strOutBuffer MsgBox "PathAddBackslash >>" & CleanString(strOutBuffer)
strOutBuffer = "C:\Windows\testfile" + String(100, 0) PathAddExtension strOutBuffer, ".txt" MsgBox "PathAddExtension >> " & CleanString(strOutBuffer)
strOutBuffer = "C:\Windows" + String(100, 0) PathAppend strOutBuffer, "test.txt" MsgBox "PathAppend >> " & CleanString(strOutBuffer)
strOutBuffer = String(100, 0) PathBuildRoot strOutBuffer, 0 MsgBox "PathBuildRoot >> " & CleanString(strOutBuffer)
strOutBuffer = String(255, 0) PathCanonicalize strOutBuffer, "c:\dir1\..\dir2\.\dir3" MsgBox "PathCanonicalize >> " & CleanString(strOutBuffer)
strOutBuffer = String(255, 0) PathCombine strOutBuffer, "c:", "windows\fonts\tahoma.ttf" MsgBox "PathCombine >> " & CleanString(strOutBuffer)
strOutBuffer = String(255, 0) PathCommonPrefix "C:\InetPub\Mail\test.htm", "C:\Test\t3.txt", strOutBuffer MsgBox "PathCommonPrefix >> " & CleanString(strOutBuffer) & " is common prefix in both paths"
strOutBuffer = "c:\Program Files\Microsoft MSDN\NETDocs\v20\1033\dv_aspnet.hxi" PathCompactPath Me.hDC, strOutBuffer, 100 MsgBox "PathCompactPath (fit path in 100 pix) >> " & CleanString(strOutBuffer)
strOutBuffer = String(255, 0) PathCompactPathEx strOutBuffer, "c:\Program Files\Microsoft MSDN\NETDocs\v20\1033\dv_aspnet.hxi", 25, 0 MsgBox "PathCompactPathEx (fit path in 25 characters) >> " & CleanString(strOutBuffer)
strOutBuffer = String(255, 0) PathCreateFromUrl "file:///C:/testdir/tabctl.htm", strOutBuffer, Len(strOutBuffer), 0 MsgBox "PathCompactPathEx >> " & CleanString(strOutBuffer)
strOutBuffer = "C:/TestDIR/TabCtl.Htm" PathMakePretty strOutBuffer MsgBox "PathMakePretty >> " & CleanString(strOutBuffer)
strOutBuffer = "C:\TESTDIR" + String(100, 0) PathMakePretty strOutBuffer MsgBox "PathMakePretty >> " & CleanString(strOutBuffer)
strOutBuffer = "C:\Program Files\readme.txt" + String(100, 0) PathQuoteSpaces strOutBuffer MsgBox "PathQuoteSpaces >> " & CleanString(strOutBuffer) PathUnquoteSpaces strOutBuffer MsgBox "PathUnquoteSpaces >> " & CleanString(strOutBuffer)
End Sub
Function CleanString(sInput As String) As String Dim ZeroPos As Long ZeroPos = InStr(1, sInput, Chr$(0)) If ZeroPos > 0 Then CleanString = Left$(sInput, ZeroPos - 1) Else CleanString = sInput End If End Function
Private Sub Form_Load() Demo1 End Sub |
|
|
|
Submitted By :
Nayan Patel
(Member Since : 5/26/2004 12:23:06 PM)
|
|
|
Job Description :
He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting. |
View all (893) submissions by this author
(Birth Date : 7/14/1981 ) |
|
|