Corriger la casse d'un chemin d'accès

Contenu du snippet

Const MAX_PATH As Integer = 260
Const S_OK As Integer = &H0

<DllImport("shell32.dll", SetLastError:=True, CharSet:=CharSet.Unicode)>
Function SHGetPathFromIDList(ByVal pidl As IntPtr, ByVal pszPath As StringBuilder) As Boolean
End Function

<DllImport("shell32.dll", SetLastError:=True, CharSet:=CharSet.Unicode)>
Function SHParseDisplayName(<MarshalAs(UnmanagedType.LPWStr)> ByVal pszName As String, byvalpbc As IntPtr, ByRef ppidl As IntPtr, ByVal sfgaoIn As UInteger, ByRef psfgaoOut As UInteger) As Integer
End Function

Function FixPathCase(ByVal path As String) As String
  Dim newPath As New StringBuilder(MAX_PATH)
  Dim ppidl As IntPtr
  Dim psfgaoOut As UInteger
  Dim result As Integer = SHParseDisplayName(path, IntPtr.Zero, ppidl, 0&, psfgaoOut)
  If result = S_OK Then
    Dim r As Boolean = SHGetPathFromIDList(ppidl, newPath)
    Marshal.FreeCoTaskMem(ppidl)
    If Not r Then Throw New Win32Exception(Marshal.GetLastWin32Error())
  Else
    Throw New Win32Exception(result)
  End If
  Return newPath.ToString()
End Function

Compatibilité : VB 2005, VB 2008

Disponible dans d'autres langages :

A voir également