日本語環境以外での「 - コピー」の文字列の取得

[戻る]
AR 2014/08/13(水) 13:22:05
 VCから若干内容がそれている気がしますが、多言語環境で困っておりますのでよろしく
お願いします。

 OSが日本語以外の環境で、指定されたフォルダー以下のファイルを走査し、エクスプ
ローラーの誤操作で作られたファイルを、タイマーで定期的に検索して自動で削除したい
という目的です。

 日本語Windowsのエクスプローラー上で、「hoge.txt」を選択してCtrl+C/Ctrl+Vを実行
すると、「hoge - コピー.txt」というファイル名で複製されます。
 さらにCtrl+Vを押下すると「hoge - コピー (2).txt」という名称になります。
 ところが他の言語のOSで上記操作をした場合は「コピー」なんて表記にはなりません。

 ですから、日本語表記の場合の「 - コピー」や「 - コピー (2)」の部分に相当する文
字列を動的に取得したいのです。
 ロケール依存となるテキスト部分を、OSから動的に取得する方法や、何かしらヒントに
なるようなことをご存知の方がいらっしゃいましたら、よろしくお願いします。
 (とりあえずの暫定回避ですが「 - コピー」を設定させてお茶を濁している状況です)


・厳密には、IExplorerBrowserを用いた擬似エクスプローラーなので、誤操作そのものを
ブロックしたかったのですが、正常操作でCtrl+C/Ctrl+Vをすることもあるとのことで上
位プロセスでの対策を断念してます。
・対応言語が英、蘭、独、韓、中・・・と現時点で約10ヶ国語ですが、どこまで増えるか
未定です。
・環境は、現時点でOSがWindows7、VS2012です。
 (XPの場合の「コピー 〜 」は、現時点では除外して考えています)

おぼんてなに 2014/08/14(木) 18:18:44
レジストリ
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorerに
CopyNameTemplateを追加すると初期の名前を変更できるようですが

http://nonsubject.arinco.org/2011/12/blog-post_17.html

ない場合は
Shell32.dll.muiの中に"%s - コピー ()"という文字列がありますので
多分これがデフォルトで使われるのではないでしょうか。

CopyNameTemplate
Microsoft Multi-Lingual User Interface(MUI)等も調べてみてください。


#include <locale.h>

    HMODULE thdl = GetModuleHandle(_T("C:\\Windows\\System32\\shell32.dll"));

    TCHAR buff[210];
    setlocale( LC_ALL, "" );

    for(int i=0;i<=10000;i++) {
        memset(buff,0,sizeof(200));
        int nLen = ::LoadString(thdl,i,buff,200);
        buff[200]='\0';
        if(nLen !=0 && wcsstr(buff,_T("コピー")) != NULL) {
            TRACE(_T("%.04x %s\n"),i,buff);
        }
    }

うちの環境では、StringTableの0x1052にこの文字列が入っていました。
MUIの変更とかは怖いので試してません。

おぼんてなに 2014/08/14(木) 18:19:39
あ、うちは日本語環境しかありません。

AR 2014/08/15(金) 09:10:24
[[解決]]
 レジストリ情報の有無と2段構えでしたか・・・気づきませんでした。
 MUIに対しても表面的なところしか勉強してなかったので、もう少し突っ込んで調べて
みます。
 ありがとうございました。

古いスレッドには追加発言できません。