ll_libload user, "user32.dll"
ll_getproc OpenClipboard, "OpenClipboard", user
ll_getproc GetClipboardData, "GetClipboardData", user
ll_getproc CloseClipboard, "CloseClipboard", user
ll_libload gdi, "gdi32.dll"
ll_getproc GetObject, "GetObjectA",gdi
ll_getproc CreateCompatibleDC, "CreateCompatibleDC", gdi
ll_getproc SelectObject, "SelectObject", gdi
ll_getproc BitBlt, "BitBlt", gdi
ll_getproc DeleteDC, "DeleteDC", gdi
#module
#deffunc clipgetg
mref stt, 64
mref bmscr, 67
stt = 1
prm = bmscr.13 // hwnd
ll_callfunc prm, 1, OpenClipboard@ : ll_ret i // クリップボードを開く
if i = 0 : stt = 1 : return // 開けなかったら終了
prm = 2
ll_callfunc prm, 1, GetClipboardData@ : ll_ret i.1 // クリップボードから画像(2:CF_BITMAP)取得
if i.1 = 0 {
ll_callfnv CloseClipboard@ // 取得できなければ終了
stt = 2
return
}
// ビットマップオブジェクト情報取得(BITMAP構造体24byte)
dim bmp, 6
prm = i.1, 24
ll_getptr bmp : ll_ret prm.2
ll_callfunc prm, 3, GetObject@ : ll_ret i
if i = 0 {
ll_callfnv CloseClipboard@ // 取得できなければ終了
return
}
// メモリデバイスコンテキストを作成
prm = bmscr.4 // hdc
ll_callfunc prm, 1, CreateCompatibleDC@ : ll_ret i.3
// ビットマップオブジェクトを選択(旧オブジェクトは退避しておく)
prm = i.3, i.1
ll_callfunc prm, 2, SelectObject@ : ll_ret i.2
// 画像情報をコピー
ginfo 6
if bmp.1 > prmx : i.4 = prmx : else : i.4 = bmp.1
if bmp.2 > prmy : i.5 = prmy : else : i.5 = bmp.2
prm = bmscr.4, csrx, csry, i.4, i.5, i.3, 0, 0, 0x00CC0020 // SRCCOPY
ll_callfunc prm, 9, BitBlt@
redraw 1
// 終了処理
prm = i.3, i.2
ll_callfunc prm, 2, SelectObject@ // オブジェクトを元に戻す
ll_callfunc i.3, 1, DeleteDC@ // メモリデバイスコンテキストを削除
ll_callfnv CloseClipboard@ // クリップボードを閉じる
stt = 0
return
#global
pos 50, 50 : clipgetg // 画像取得
if stat : dialog "クリップボードの取得に失敗しました。" : end
stop
|