hspext の clipset が Unicode に対応していないのが文字化ける原因ではないかと。
--------------------------
getcbuni uvar
クリップボードからテキスト(Unicode)データを取得します。
uvar は 変数名です。
--------------------------
setcbuni uvar
クリップボードにテキスト(Unicode)データを格納します。
uvar は 変数名です。
--------------------------
【以下オマケ】
strlenw(uvar)
Unicode版strlen
uvar は 変数名です。
--------------------------
mesW uvar
Unicode版mes
uvar は 変数名です。
実行後、redrawが必要です。
--------------------------
#include "user32.as"
#include "kernel32.as"
#module _UNICODECLIP_
// これだけ定義されていないので書いておく
#uselib "kernel32.dll"
#func CopyMemory "RtlMoveMemory" sptr, sptr, sptr
#uselib "msvcrt"
// Unicode版 strlen
#cfunc global strlenW "wcslen" var
// Unicode版 mes
#define global printW mesW
#deffunc mesW var u
p = ginfo_cx, ginfo_cy, ginfo_winx, ginfo_winy
DrawTextW hdc,varptr(u),-1,varptr(p),0
return
// 共通
#deffunc _opencb
repeat 100
OpenClipboard 0
res=stat
if res!0 : break
loop
return res
#deffunc getcbuni var cbBinBuf
_opencb
// 失敗
if stat=0 : return -1
// 数を取得
CountClipboardFormats
if stat=0 : CloseClipboard : return -2
formatsNum = stat
// 内容が CF_UNICODETEXT かどうか?
res = 0
repeat formatsNum
EnumClipboardFormats 0
if stat=0x0D : res = 1 : break
if stat=0 : continue
loop
// CF_UNICODETEXT が見つからない
if res=0 : CloseClipboard : return -3
// データ取得
GetClipboardData 0x0D
if stat=0 : CloseClipboard : return -4
hGlobalMem = stat
// グローバルメモリブロックのサイズ取得
GlobalSize hGlobalMem
if stat=0 : CloseClipboard : return -5
globalMemLen = stat
// 受け取りバッファー初期化
sdim cbBinBuf,globalMemLen
bufPtr = varptr(cbBinBuf)
// グローバルメモリブロックをロック
GlobalLock hGlobalMem
if stat=0 : CloseClipboard : return -6
globalMemPtr = stat
// バッファーへコピー
dupptr cbBinBuf,globalMemPtr,globalMemLen,2
res = stat
GlobalUnlock hGlobalMem
CloseClipboard
if res=0 : return -7
// サイズを返す
return globalMemLen
#deffunc setcbuni var cbBinBuf
// サイズチェック
size = strlenw(cbBinBuf)*2+2 ; +2 しないとブチ切れる
if size <= 0 : return -1
// グローバルメモリブロック確保
GlobalAlloc 66,size
if stat=0 : return -2
hGlobalMem = stat
// ポインター取得
binptr = varptr(cbBinBuf)
// グローバルメモリブロックをロック
GlobalLock hGlobalMem
if stat=0 : GlobalFree hGlobalMem : return -3
globalMemPtr = stat
// グローバルメモリブロックにコピー(結果が返ってこないのでちと不安)
CopyMemory globalMemPtr,binptr,size
// グローバルメモリブロックのロック解除
GlobalUnlock hGlobalMem
// クリップボードオープン
_opencb
if stat=0 : GlobalFree hGlobalMem : return -4
// クリップボードの所有権をゲット
EmptyClipboard
if stat=0 : GlobalFree hGlobalMem : CloseClipboard : return -5
// クリップボードにコピー
SetClipboardData 0x0D,hGlobalMem
if stat=0 : GlobalFree hGlobalMem : CloseClipboard : return -6
// クリップボードをクローズ
CloseClipboard
return 0
#global