#include "llmod.as"
#define CF_TEXT 1 ;文字列形式
#define CF_BITMAP 2 ;ビットマップ形式
#module
#define GHND 0x42 ;移動可能メモリ + メモリを0で初期化
#deffunc getclipboard val,int
mref hobj,16 ;クリップボードのデータを格納する数値型変数
mref format,1 ;データ形式
mref state,64
prm=0
dllproc "OpenClipboard",prm,1,D_USER ;クリップボードを開く
if dllret@=0 : state=1 : return
dllproc "GetClipboardData",format,1,D_USER ;データ取得
hobj=dllret@
dllproc "CloseClipboard",prm,0,D_USER ;クリップボードを閉じる
if hobj {
state=0
} else {
state=2
}
return
#deffunc setclipboard val,int
mref hobj,16 ;クリップボードにセットするデータ
mref format,1 ;データ形式
mref state,64
prm=0
dllproc "OpenClipboard",prm,1,D_USER ;クリップボードを開く
if dllret@=0 : state=1 : return
dllproc "EmptyClipboard",prm,0,D_USER ;クリップボードの中身を初期化
prm=format,hobj
dllproc "SetClipboardData",prm,2,D_USER ;クリップボードにデータをセット
dllproc "CloseClipboard",prm,0,D_USER ;クリップボードを閉じる
state=0
return
#deffunc getmemobj val,val,int
mref data,24 ;データを格納する文字列型変数
mref memsize,17 ;メモリサイズ
mref hobj,2 ;メモリオブジェクトハンドル
mref state,64
dllproc "GlobalSize",hobj,1,D_KERNEL ;メモリブロックのバイト数
if dllret@=0 : state=1 : return
if dllret@>memsize : memsize=dllret@ : state=2 : return
memsize=dllret@
dllproc "GlobalLock",hobj,1,D_KERNEL ;メモリを固定
cbdata=dllret@
getptr pdata,data
prm=pdata,cbdata,memsize
dllproc "RtlMoveMemory",prm,3,D_KERNEL ;メモリブロックのコピー
dllproc "GlobalUnlock",hobj,1,D_KERNEL ;メモリの固定を解除
state=0
return
#deffunc setmemobj val,val,int
mref hobj,16 ;メモリオブジェクトハンドルを格納する変数
mref data,25 ;メモリオブジェクトに格納するデータ
mref memsize,2 ;メモリサイズ
prm=GHND,memsize
dllproc "GlobalAlloc",prm,2,D_KERNEL ;メモリオブジェクト作成
hobj=dllret@
dllproc "GlobalLock",hobj,1,D_KERNEL ;メモリを固定
cbdata=dllret@
getptr pdata,data
prm=cbdata,pdata,memsize
dllproc "RtlMoveMemory",prm,3,D_KERNEL ;メモリブロックのコピー
dllproc "GlobalUnlock",hobj,1,D_KERNEL ;メモリの固定を解除
return
#global
screen 0,200,100
sdim txt,1000
objmode 1,1
mesbox txt,200,80,1,1000
objsize 100,20
button "クリップボードへコピー",*set
pos 100,80 : button "クリップボードを取得",*get
stop
*set
strlen length,txt
setmemobj hglobal,txt,length+1 ;+1は終了コードの分
setclipboard hglobal,CF_TEXT
if stat : dialog "クリップボードを開けませんでした"
stop
*get
getclipboard hglobal,CF_TEXT
if stat=1 : dialog "クリップボードを開けませんでした" : stop
if stat=2 : dialog "データ形式が文字列ではありません" : stop
memsize=1000
getmemobj txt,memsize,hglobal
if stat=1 : dialog "メモリオブジェクトではありません" : stop
if stat=2 : dialog "データサイズが1000バイトを超えています。",,""+memsize+"B" : stop
objprm 0,txt
stop
|