[スレッド全体]

2016/8/26 (金) 20:08:53 もか 返信 削除
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
[2379] Re:クリップボード関数の謎引数
(続き)
>SetClipboradByFormat("美乳", "CF_TEXT", 2, -1)
>当然、化けますよね。。。

EUC-jpをCF_TEXTに突っ込むのは想定外ですが、そういうアプリが存在していてもおかしくないのです。
例えば、存在するかしりませんがEUC-JPに設定されたCygwinとか。
var s = GetClipboradByFormat("CF_TEXT", 2, -1)
InsText(s);
で「美乳」が貼り付けられるので、そういう変なアプリと通信したい場合には、これでいいと思います。
もちろんCF_UNICODETEXTで読み書きするとおかしいですが、それは想定内です。
CF_UNICODETEXTでも同時に読み書きができるようにしたければ、自分でCF_UNICODETEXTを設定すれば問題ないです。
マイクロソフトが何といってるか知りませんが、ロケールって言ってるけど、UTF-8というロケールは存在しないので「言語」で「エンコード」を縛ることはできません。

汎用的なnModeの使い方としては、
SetClipboardByFormat(data, "HTML Format", 4, -1);
が代表例です。HTML FormatはUTF-8と決まっています。

>nEndMode
他のエディタを見れば分かりますが
「クリップボードを最後まで読み込む」関数と
「クリップボードをNUL文字まで読み込む」関数
が用意されていることがあります。それに対応するための処置です。
WindowsのCF_(UNICODE)TEXTではNUL文字までと決まっていますが、実情はそうとは限りません。
あとは独自フォーマットでは、NUL終端の後に違うデータが続いていることもあります。
例えば、サクラが設定したCF_(UNICODE)TEXT形式では途中にNUL文字が含まれることがあります。
UTF-32についてはおまけですが、独自形式のフォーマットがUTF-32形式互換である場合を想定していて、
決してCF_(UNICODE)TEXTで使うためではありません。

SetClipboradByFormatでCF_TEXTを登録するとき、サクラがCF_LOCALEを正しく登録しないのは、
うまく動くか分かりませんが、"CF_LOCALE"も使えるようになっているので、自分で設定すればいいんだと思います。

とりあえず、引数に意味不明な組み合わせがあることは確かです。
そのへんは、汎用性のために犠牲になったと思ってください。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]