すでに新版リリースされてますが、ぶら下げときます。
>cmemBuf.SetData( lptstr, GlobalSize(lptstr) );
>cmemBuf.UnicodeToSJIS();
これだと、最後のNUL文字もコピーと変換に含まれますね。
あと、GlobalSizeはHGLOBALを引数に取るので
cmemBuf.SetData( lptstr, GlobalSize(hglb) - sizeof(WCHAR) );
とすればよさそうですが、確保したサイズ=有効データとは限らない可能性もあるため
cmemBuf.SetData( lptstr, wcslen(lpstr) * sizeof(WCHAR) );
のほうが個人的にはいいかなと思います。
Localeに関しては、
CF_TEXTにセットして、キーボードレイアウトが英語だと
Unicode,OEM共に貼り付けはダメ。
OEMにセットして、キーボードレイアウトが英語だと
Unicode,Text共に貼り付けはダメ。(sakura/キーボード英語でコピー、メモ帳貼り付け等)
Unicode,Textにセット、キーボードレイアウトが英語だと
OEM共に貼り付けはダメ。(Mozillaからsakuraに貼り付けるパターン)
というように、コピーした側で、データを設定していないフォーマットは、
コピー側のキーボードレイアウトと連動している文字コード以外の文字が
基本的に化けるようです。
ただしCF_TEXTにEUC-JPでデータをセットして、CF_OEM/CF_UNICODEが化けるのは、そもそもCF_TEXTに問題があるとしか言えません。
# 現行ログ以前は、INCMで拾えないので、過去ログ更新お願いしたいです。