checkさん、回答ありがとうございます。
それを受けてスクリプトの解読をがんばってみたのですが、
どうしてもわからない場所があるのですが……。
;
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;
;PrtSc_Saver……☆自作改変Ver☆
; 2012_04/??
;
;参考URL
;http://tkooler.moe.hm/hsp/bbslog/get/625.html
;http://hspnext.com/hspkura/hspkura04.htm
;
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;
;
;
#packopt name "PrtSc_Saver"; 実行ファイル名指定
;
;
;
#module; クリップボード操作命令の指定
;
#uselib "user32.dll"; Win32_API呼び出し
;Win32_APIはWindowsに標準搭載のさまざまな能力を持つDLL。
#func OpenCB "OpenClipboard" int; クリップボードを開き、他のプログラムで更新できないようにする。
;使用例) OpenCB hwnd……クリップボードを開く。
#func CloseCB "CloseClipboard"; クリップボードを閉じる。↑の対になるプログラム。
;使用例) CloseCB……クリップボードを閉じる。
#cfunc IsCBFormatAvailable "IsClipboardFormatAvailable" int; クリップボードのデータが特定種であるかを調べる。
;使用例) buf=IsCBFormatAvailable(CF_BITMAP)……BMPである場合は1が、それ以外なら0が返る。
#cfunc GetCBData "GetClipboardData" int; クリップボードにある特定種のデータを取得する。
;使用例) buf=getcbdata(CF_BITMAP)……BMPである場合はそのデータが、それ以外なら0が返る。
#func ReleaseDC "ReleaseDC" int,int; デバイスコンテキストを解放し、他のアプリケーションからつかえるようにします。(コピペですorz
;
;
#uselib "gdi32.dll"
#func GetObjectA "GetObjectA" int,int,int; オブジェクトのデータを取得?(解読不能orz
;使用例)
;dim buf,16; BMPの構造体を保存する変数を初期化。
;OpenClipboard hwnd; クリップボード解放。
;Bitmap=GetCBData(CF_BITMAP); クリップボードのないようがBMPならば変数に保存。
;GetObjectA Bitmap,32,varptr(buf)//(BITMAP 構造体); GetObjectAにより、変数にデータ保存。
;CloseClipboard; クリップボード閉じる
;mes ""+buf(1)+"/"+buf(2); buf(1)=xサイズ、buf(2)=yサイズ。他の配列にはさまざまなデータが保存されている模様……。
#cfunc CreateCompatibleDC "CreateCompatibleDC" int; 指定されたデバイスと互換性のあるメモリデバイスコンテキストを作成します(コピペですorz
;使用例)bitmaps=CreateCompatibleDC(hdc)……変数にデータを保存。
#func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int; コピー元からコピー先のデバイスへ指定された長方形内の色データをコピーする。
;使用例)
;dim buf,32
;GetObjectA BMPdata,32,buf
;BB hdc,0,0,buf(1),buf(2),hdc_mem,0,0,$00CC0020
;参考……BMPdata=BMPのデータをコピーした変数、hdc=現在のウィンドウハンドル、xサイズ=buf(1)、yサイズ=buf(2)
;bufはデータロード直前にdimで初期化しておくと良い。
#func DeleteDC "DeleteDC" int; 指定されたデバイスコンテキストを削除します。(コピペですorz
;
#define CF_BITMAP $00000002
#define CF_OEMTEXT $00000007
#define GMEM_MOVEABLE 2
;
;
#deffunc GetCBIMG; クリップボードの画像を保存する。
type=IsCBFormatAvailable(CF_BITMAP); BMPであるかどうか調べる。
if type=0:return -1; 変数statに-1を返す(「エラー:BMP以外のファイル」の意味)
if type{
OpenCB hwnd; クリップボードを開く。
Bitmap=GetCBData(CF_BITMAP); クリップボードからBMPデータを取得(↑のIs~でBMP判定が終わっているのでエラーはでないはず……)
if Bitmap=0:return -2; 変数statに-2を返す(「エラー:BMPデータのサイズが0」の意味?)解読不能orz
Bitmaps=CreateCompatibleDC(hdc)
if bitmaps=0 : return -3
dim buf,84; 構造体を保存する変数を初期化。
GetObjectA Bitmap,84,varptr(buf); 構造体を入力。
BitBlt hdc,0,0,buf(1),buf(2),Bitmaps,0,0,$00CC0020; BMPを画面に描写
DeleteDC Bitmaps; Bitmapsのデータを削除。
ReleaseDC hwnd,hdc; データを開放?
CloseCB; クリップボードを閉じる。
return 0; 変数statに0を返す(「成功」の意味)
}
;
#deffunc GetCBIMGX; クリップボードのXサイズ取得
type=IsCBFormatAvailable(CF_BITMAP); BMPであるかどうか調べる。
if type=0:return -1; 変数statに-1を返す(「エラー:BMP以外のファイル」の意味)
if type{
OpenCB hwnd; クリップボードを開く。
Bitmap=GetCBData(CF_BITMAP); クリップボードからBMPデータを取得(↑のIs~でBMP判定が終わっているのでエラーはでないはず……)
if Bitmap=0:return -2; 変数statに-2を返す(「エラー:BMPデータのサイズが0」の意味?)解読不能orz
dim buf,32; 構造体を保存する変数を初期化。
GetObjectA Bitmap,32,varptr(buf); 構造体を入力。
CloseCB; クリップボードを閉じる。
return buf(1); 変数statにbuf(1)を返す(「成功:xサイズが返る」の意味)
}
#deffunc GetCBIMGY; クリップボードのXサイズ取得
type=IsCBFormatAvailable(CF_BITMAP); BMPであるかどうか調べる。
if type=0:return -1; 変数statに-1を返す(「エラー:BMP以外のファイル」の意味)
if typ{
OpenCB hwnd; クリップボードを開く。
Bitmap=GetCBData(CF_BITMAP); クリップボードからBMPデータを取得(↑のIs~でBMP判定が終わっているのでエラーはでないはず……)
if Bitmap=0:return -2; 変数statに-2を返す(「エラー:BMPデータのサイズが0」の意味?)解読不能orz
dim buf,32; 構造体を保存する変数を初期化。
GetObjectA Bitmap,32,varptr(buf); 構造体を入力。
CloseCB; クリップボードを閉じる。
return buf(2); 変数statにbuf(2)を返す(「成功:yサイズが返る」の意味)
}
;
#global
;
;
;
;
*main
buffer 1,ginfo_dispx,ginfo_dispy; サブウィンドウ生成
screen 0,128,64,8; メインウィンドウ再生成
gsel 0,2; ウィンドウが背面へ行かないよう指定
title "PrtSc_Save.exe"; タイトル変更
objsize 128,64; ボタンサイズ変更
button gosub "SAVE",*save; ボタン配置
chdir dirinfo(0x10000); デスクトップ指定
stop; プログラム一時停止
;*ボタンが押されたときに*saveフラグへ移動するので大丈夫。
;
*save
gsel 1
; GetCBIMGX:x=stat; Xサイズを取得
; GetCBIMGY:y=stat; Yサイズを取得
; buffer 1,x,y; クリップボードの画像Xサイズ、Yサイズでウィンドウ初期化。
; if (x<0)or(y<0):return; エラー:画像データ以外のデータ。
GetCBIMG; 画像をウィンドウID1に保存。
if stat<0:dialog "エラー:画像を保存できませんでした。"+stat:return
bmpsave "PrtSc_"+gettime(0)+gettime(1)+gettime(3)+"_"+gettime(4)+gettime(5)+gettime(6)+".bmp"; BMPとして保存。
return
コメントの付いている行は理解したのですが
どうしてもBitBltが機能していないようで……
あとは、GetCBIMGX、GetCBIMGYを実行しても
画像が保存できないのです。
ヒントだけでも良いので
どなたかアドバイスいただけないでしょうか?