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考慮してるためと思われます)
Comments