しかしこの2つの関数、使ってみると異常に遅いです。
どうしてこんなに遅いのか分からないのですが、数千文字送るだけで数秒程かかります。(面倒なので正確な速度計測はしていませんが…)
流石にその速度だと実用性に難があったので、色々試してみたのですが、最終的にはいつもの様に.NETを使う事にしました。
.NET万歳。
local ss = StringStream ""
-- 文字列をStringStreamに書き込み
local clipboardCls = dotNetClass "System.Windows.Forms.Clipboard"
clipboardCls.SetText (ss as string)
free ss
StringStreamを使って文字列を高速に結合した後、.NETのClipboardクラスのsetTextで転送しています。もちろん転送データが最初から文字列な場合はそのまま転送すればいいのですが、まぁ普通はデータを整形する工程があると思うので、このタイミングで行ってしまいます。
StringStreamへの書き込みはappendを使うか、formatでtoオプションを指定します。
append ss "The text"
format "Val: %\n" theValue to:ss
これで文字列を高速にクリップボードに送る事が出来ます。逆に文字列を取得する時は以下のようにします。
local clipboardCls = dotNetClass "System.Windows.Forms.Clipboard"
local theText = clipboardCls.GetText()
まぁWindowsアプリ用に作られた.NETですから、こういった処理はネイティブのWindowsアプリとほぼ同等の速度が出せます。