HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0822
ユーヤンUnicodeでクリップボードへ文字をコピーしたい2解決


ユーヤン

リンク

2021/8/22(Sun) 13:52:57|NO.93655

hsp3utfを使用しているのですが、Unicodeに対応したclipset命令はありますか?



この記事に返信する


とあるプログラマ

リンク

2021/8/22(Sun) 14:54:38|NO.93657

見当たらなかったので命令を作ってみました。

当然ですが、hsp3utf.asをインクルードしている他、ソースコードがUTF-8で書かれている必要があります。


// --------------------------------------------------------------- // 【最小限必須環境】 // ・"hsp3utf.as" をインクルードしていること // ・UTF-8でコードを保存してコンパイルすること (故に標準のhsedでは不可) // --------------------------------------------------------------- // 参考サイト // http://wisdom.sakura.ne.jp/system/winapi/win32/win90.html #include "hsp3utf.as" #include "kernel32.as" #include "user32.as" #define global NULL 0 #define global GHND $00000042 #define global CF_UNICODETEXT $0000000D #module // ============================ // Unicodeでクリップボードをセットする // 引数1:セットする文字列 // ============================ #deffunc SetClipUtf str text, \ local uni, local hData, local lpData, local clipData // クリップボードを開く if (OpenClipboard(NULL) == 0) : return 0 // クリップボードを空にする EmptyClipboard // Windowsで使われるUnicodeはUTF-16なので変換する sdim uni, strlen(text) * 2 + 2 //UTF-16にするのでstrlen()の2倍 + ヌル文字(2バイト) cnvstow uni, text // メモリブロックを確保 // (各関数の詳しい動作などについては参考サイトを参照してください) dim hData hData = GlobalAlloc(GHND, varsize(uni)) if (hData == 0) : return 0 dim lpData lpData = GlobalLock(hData) // ----------------------------------------------------------------- // HSP3にはポインタに直接書き込む命令がないので、dupptrでクローン変数に書き込む // // このとき clipData = uni とかするとHSP3の通常文字列操作になり // 完コピにならないので、memcpyを使うこと!!! // ----------------------------------------------------------------- dupptr clipData, lpData, GlobalSize(hData), 2 memcpy clipData, uni, GlobalSize(hData) GlobalUnlock hData // ここで CF_UNICODETEXT を指定する SetClipboardData CF_UNICODETEXT, hData CloseClipboard return 1 #global SetClipUtf "HSP3🔺◢😀💯ⓗⓢⓟ♠♡♣♤♪" if (stat) { mes "クリップボードにコピーしました" }else { mes "失敗しました" }



ユーヤン

リンク

2021/8/24(Tue) 16:35:21|NO.93676

VSCodeでUTF-8コンパイルしてやってみたところ、できました。
とあるプログラマさんありがとうございます。



ONION software Copyright 1997-2023(c) All rights reserved.