クリップボードに保存されているビットマップ、つまりペイントなどをコピーします。次のようにPowerBuilder - クリップボードからビットマップをコピーします。
これまで私のコードは次のとおり
ulong l_handle, l_datasize, l_lock
long l_file
uint i_format
blob lb_blob
n_bitmap ln_bit
l_handle = handle(parent)
OpenClipboard(l_handle)
//2 = Bitmap
//8 = Bitmapinfo
if not IsClipboardFormatAvailable(8) then
closeclipboard()
return
end if
l_handle = GetclipboardData(8)
l_lock = GlobalLock(l_handle)
if not isnull(l_lock) then
l_datasize = GlobalSize(l_lock)
if l_datasize>0 then
lb_blob = blob(space(l_datasize), EncodingAnsi!)
ReadClipboardData(lb_blob, l_lock, l_datasize)
GlobalUnlock(l_handle)
closeClipboard()
if not isnull(lb_blob) then
//l_file = fileopen("c:\temp\test.dib", StreamMode!, Write!, LockReadWrite!, Replace!)
ln_bit.of_writeblob("c:\temp\test.bmp", lb_blob)
ln_bit.of_writeblob("c:\temp\test1.bmp", BlobMid(lb_blob, 15))
ln_bit.of_writeblob("c:\temp\test2.bmp", BlobMid(lb_blob, 169))
ln_bit.of_writeblob("c:\temp\test3.bmp", BlobMid(lb_blob, 14))
ln_bit.of_writeblob("c:\temp\test4.bmp", BlobMid(lb_blob, 168))
//FileWriteEx(l_file, lb_blob)
//fileclose(l_file)
//p_1.setpicture(lb_blob)
end if
end if
GlobalUnlock(l_handle)
end if
closeClipboard()
外部関数GetclipboardDataため
Function Ulong GetClipboardData (&
uint uFormat&
) Library "user32.dll"
Function boolean OpenClipboard (&
long hWndNewOwner &
) Library "user32.dll"
Function boolean CloseClipboard (&
) Library "user32.dll"
Function ulong GlobalLock(&
ulong hMem&
) Library "kernel32.dll"
Function boolean GlobalUnlock(ulong hMem) Library "kernel32.dll"
SUBROUTINE ReadClipboardData(ref blob Destination, ulong Source, ulong&
Length) Library "KERNEL32.DLL" Alias for "RtlMoveMemory"
FUNCTION ulong GlobalSize(ulong hMem) Library "kernel32.dll"
FUNCTION boolean IsClipboardFormatAvailable(ulong format) Library "user32.dll"
()2(ビットマップ)は常にゼロときを返すので、私は、値8(BITMAPINFO)を使用しGlobalLock関数を呼び出します。
今はBlobでBitmapinfoを取得していますが、保存できません。 イメージは常に破損していると言います。 なぜ私はbitmapinfoからビットマップを抽出したかったのでしょうか(これが可能であれば)、私はこのBlobMidのすべてをof_writeblob関数で試したのです。
ここで "http://www.topwizprogramming.com/freecode_bitmap.html"はbitmapinfoを作成していますが、blobheaderの長さは14であるため、そのように動作するかもしれませんが、ファイルはまだ破損しています。情報には実際のビットマップではなく情報のみが含まれていると思います。
誰もこれを解決したことがありますか、それとも私が使いやすいDLLがありますか?
編集:topwizサンプルでは、ヘッダー、情報、実際のビットマップで完全なビットマップを作成しているので、私の試行は失敗するとしか思えません。 主な問題は、なぜパラメータが2のgetclipboarddataを呼び出すときにGloballock関数がゼロを返すのかです。