<Return[G]><Top>

GetShortPathName

Declare Function Api_GetShortPathName& Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath$, ByVal lpszShortPath$, ByVal lBuffer&)

Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

短い形式のパス名を取得する。

パラメータ
lpszLongPath
    長いパス名(長いファイル名)を保持している、NULL で終わる文字列へのポインタを指定する。

    この関数は、このパスに対応する短い名前を取得する。
    Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。

    この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
    Windows 95/98:文字列の長さは、最大 MAX_PATH 文字。
lpszShortPath
    1 個のバッファへのポインタを指定する。関数から制御が返ると、このバッファに、lpszLongPath で指定したパスに対応する短いパス名が

    格納される。
cchBuffer
    lpszShortPath が指すバッファのサイズを、TCHAR 単位で指定する。
 

戻り値
    関数が成功すると、lpszShortPath が指すバッファに格納された文字列の長さが TCHAR 単位で返る(終端の NULL 文字を除く)。
    lpszShortPath が指すバッファのサイズが不足したために関数が失敗した場合は、短いパス名を格納するのに必要なバッファのサイズ

    (終端の NULL 文字を含む)が TCHAR 単位で返る。

    この場合、戻り値に、TCHAR のサイズ(Unicode の場合は 2 バイト、それ以外の場合は 1 バイト)をかけた長さまたはそれを上回るサイ

    ズをバッファに割り当てて、この関数をもう一度呼び出す。

    その他の理由で関数が失敗した場合は、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    アプリケーションがこの関数を呼び出し、8.3 の短い別名をサポートしていないボリューム上のパスを指定した場合、パスが 67 バイトを上回る

    と、この関数は失敗し、ERROR_INVALID_PARAMETER が返る。
    パラメータで指定するパスは、フルパスや長いパス名でなくてもかまわない。そのことが理由で、短い形式の名前が、指定されたパスより長

    くなることもある。
    lpszLongPath に短いパス名を指定した場合は、変換を行う必要はないので、この関数はその名前をそのまま lpszShortPath バッファへコ

    ピーする。
    lpszLongPath パラメータと lpszShortPath パラメータで同じ値を指定してもかまわない。

    言い換えると、短いパス名を格納するためのバッファを、入力パスの文字列と同じアドレスに設定してもかまわない。
    FindFirstFile 関数を呼び出すと、短い名前に対応する長い名前を取得できる。代わりに、GetLongPathName が利用できない場合は、

    パスの各コンポーネントに対して FindFirstFile 関数を呼び出し、それぞれに対応する長い名前を取得することもできる。