SHSetLocalizedName と SHFileOperation

Windows XP の SHSetLocalizedName を解析してみたところ、内部で、SHFileOperationW を呼び出しています。

内部的には FO_RENAME パラメータを渡しているのですが、

サンプルプログラムを作ってみたところうまく動かなくてエラー 0x1f が返ってくる。

SHFileOperation function

関数には得に注意書きがないのですが、構造体の方に注意書きがありました。

SHFILEOPSTRUCT structure

Note  This string must be double-null terminated
(二重にNULLで終端すること).

SFH.pTo=L"Dest\0";
SFH.pFrom=L"Source\0";
例えば、こんな風にしないといけない訳です ・ω・;

ちなみに、XPでは、 @ファイル名,-リソース番号 のような形式を、文字列に変換できる関数
SHLoadIndirectString
があるのですが、 実は 2000の IE6SP1にもこの関数あります。
試してみたところ、ちゃんと、変換もできるのですが、 SHELL32.DLL の中で使われていません。(IE5考慮してるためと思われます)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です