Desktop Functions:

   Smart Device Functions:

Show Recent Changes
Subscribe (RSS)
Misc. Pages
Helpful Tools
Suggested Reading
Website TODO List
Support Forum
Download Visual Studio Add-In

Terms of Use
Privacy Policy
pathunexpandenvstrings (shlwapi)
Takes a fully qualified path, and replaces folder names with their associated environment strings.

C# Signature:

[DllImport("shlwapi.dll", CharSet=CharSet.Auto)]
static extern bool PathUnExpandEnvStrings(string pszPath, [Out] StringBuilder pszBuf, int cchBuf);

VB.NET Signature:

<DllImport("shlwapi.dll", EntryPoint:="PathUnExpandEnvStringsW",  SetLastError:=true, CharSet:=CharSet.Unicode)> _
Public Function PathUnExpandEnvStrings(<MarshalAs(UnmanagedType.LPTStr)>pszPath As String, _
           <MarshalAs(UnmanagedType.LPTStr)>lpszPath As System.Text.StringBuilder, _
           dx As Integer) As <MarshalAs(UnmanagedType.Bool)>Boolean
End Function

VB.NET Signature:

Public Declare Function PathUnExpandEnvStrings Lib "shlwapi" Alias "PathUnExpandEnvStringsA" _
        (ByVal lpSrc As String, _
         ByVal lpDst As String, _
         ByVal nSize As Long) As Long


This is basically the inverse of ExpandEnvironmentStrings or Environment.ExpandEnvironmentVariables. Only Microsoft knows why this inverse function didn't make it's way into the framework.

Tips & Tricks:

Please add some!

Sample Code C#:

StringBuilder sb = new StringBuilder(MAX_PATH-1);
bool b = PathUnExpandEnvStrings(@"C:\Program Files\Test", sb, sb.Capacity);
// Result: b == true && sb.ToString() == @"%ProgramFiles%\Test"

Sample Code VB.NET:

Dim sb As New System.Text.StringBuilder(1024)
Dim blnOK As Boolean = PathUnExpandEnvStrings("C:\Program Files\Test", sb, sb.Capacity)
Dim strUnExpandEnvStrings As String

If blnOK = True Then strUnExpandEnvStrings = sb.ToString ' Should be %ProgramFiles%\Test on English OS

Alternative Managed API:

Do you know one? Please contribute it!


Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

Access directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version