いろいろ調べてみました。
クリップボードに渡したポインタをプログラムから GlobalFree してはいけません。
「Unicode対応でないプログラムの言語」が「日本語」になっている(マルチバイトを Shift_JIS と決めつける)必要があります。
ここ以外に 3 箇所あります。
GetClipboardData を利用しているところが 4 箇所あります。
この機能を取り込むとして、on/offの設定は必要でしょうか。MultiByte/WideChar変換を有効にしてUNICODEを優先にすることで、かえって文字化けするようになる環境はないでしょうか。
IMEから文字を取得するところは、Unicodeで受け取り、それをMBCSに変換しています。 特に on/off の設定はありません。
クリップボードに関しても同様の処置で問題ないと考えます。
同じく、Unicodeからの変換でいいと思います。 on/off設定も必要無いと思います。
了解です。対応してみます。
対応をコミットしました。この処理で問題ないでしょうか。
maya さま
ご対応ありがとうございました! trunk をビルドして、コピー&ペーストに問題ありませんでした。
None への返信
maya さま ご対応ありがとうございました! trunk をビルドして、コピー&ペーストに問題ありませんでした。
すみません、名無しで書いてしまいました。チケットを起票した者です。
キーボードレイアウトがUSに設定されているとき、 日本語を含む文字列をコピーすると、 ペースト時に文字化けが発生します。
下記の環境で確認しました。 Windows XP Professional SP3 (日本語版) Windows 7 Professional SP1 (日本語版)
以下のコンソール文字列の場合:
結果:
最新版 trunk を取得し、調査をしてみました。 また、PuTTYでは発生しないため(PuTTYである必要はないですが)PuTTYのコピー処理とも見比べてみました。
PuTTY では、以下のコピー処理となっていました。(抜粋)
TeraTerm の処理は、CF_TEXT への set のみとなっているため、CF_UNICODETEXT をセットするようにしたところ、 うまくいきました。(PuTTY とは逆に、MultiByteToWideCharしました)
自分が試したコードのパッチを下記に記載いたします。
なにぶんC言語とWindows開発に慣れていないもので、 上記のコードが適切でないかもしれません。
受け入れ可能な状態に修正していただき、取り込んでいただけると幸いです。
なお、修正版は下記の環境でコピー機能の正常動作を確認しました。 * ビルド環境: Visual Studio 2010 Professional SP1 * 実行環境: