Get Clipboard
Func GetClipBoard(ByRef $pbuf)
Local $hBitmap;
Local $hMyDC
Local $bmBitmap = DllStructCreate($tagBITMAP)
If $DEBUG Then _FileWriteLog($LOG, "DllStructCreate Error>" & $StructError[@error] & @LF)
Local $Me = DllCall("user32.dll", "hwnd", "GetDesktopWindow")
If IsArray($Me) Then
OpenClipboard($Me[0])
If (IsClipboardFormatAvailable($CF_BITMAP)) Then
$hBitmap = GetClipboardData($CF_BITMAP)
If ($hBitmap) Then
GetObject($hBitmap, DllStructGetSize($bmBitmap), DllStructGetPtr($bmBitmap))
For $x = 1 To 7
ConsoleWrite("BMP>" & $x & ">" & DllStructGetData($bmBitmap, $x) & @LF)
Next
$hMyDC = GetDC(0)
If ($hMyDC) Then
Local $width = DllStructGetData($bmBitmap, 2)
Local $height = DllStructGetData($bmBitmap, 3)
Local $DIBHead = DllStructCreate($tagBITMAPINFOHEADER & ";" & $tagBITS)
DllStructSetData($DIBHead, 1, 40)
DllStructSetData($DIBHead, 2, $width)
DllStructSetData($DIBHead, 3, $height)
DllStructSetData($DIBHead, 4, 1)
$bpp = DllStructGetData($bmBitmap, 6)
If $bpp > 16 Then $bpp = 24
ConsoleWrite(">>$bbp>" & $bpp & @LF)
DllStructSetData($DIBHead, 5, $bpp)
Local $iBitmap = CreateDIBSection($hMyDC, $DIBHead, $DIB_RGB_COLORS, 0, 0, 0)
Local $iSrc = CreateCompatibleDC(0)
Local $hOldObj = SelectObject($iSrc, $hBitmap)
Local $iDest = CreateCompatibleDC(0)
Local $hNewObj = SelectObject($iDest, $iBitmap)
if (DllStructGetData($DIBHead, 5) <= 8) Then
;take the DFB's palette and set it to our DIB
;not working with clipboard yet.
Local $hPalette = GetCurrentObject($iSrc, $OBJ_PAL);
if ($hPalette) Then
Local $pal = DllStructCreate("byte[1024]")
Local $nEntries = GetPaletteEntries($hPalette, 0, 256, DllStructGetPtr($pal));
if ($nEntries) Then
If $DEBUG Then ConsoleWrite("$nEntries:" & $nEntries & @LF)
For $x = 1 to ($nEntries * 4) Step 4
DllStructSetData($pal, 1, 0, $x)
Next
ConsoleWrite(SetDIBColorTable($iDest, 0, $nEntries * 4, DllStructGetPtr($pal)) & @LF)
EndIf
EndIf
EndIf
BitBlt($iDest, 0, 0, $width, $height, $iSrc, 0, 0, $SRCCOPY)
$wide = DllStructGetData($DIBHead, 2)
$tall = DllStructGetData($DIBHead, 3)
Local $size = (((($wide * 32) + 31) / 32) * 4) * Abs($tall)
DllStructSetData($DIBHead, 7, $size)
; $bmInfoHeader = DllStructCreate($tagBITMAPINFOHEADER, DllStructGetPtr($DIBHead, 1))
ConsoleWrite("byte[" & DllStructGetData($DIBHead, 7) & "]" & @LF)
$pbuf = DllStructCreate("byte[" & DllStructGetData($DIBHead, 7) & "]")
GetDIBits($iDest, $iBitmap, 0, $tall, DllStructGetPtr($pbuf), DllStructGetPtr($DIBHead), 0)
Else
If $DEBUG Then _FileWriteLog($LOG, "Error retrieving Bitmap" & @LF)
EndIf
; Release struct.
CloseClipboard()
ReleaseDC(0, $iSrc)
DeleteDC($iSrc)
ReleaseDC(0, $iDest)
DeleteDC($iDest)
DeleteObject($hBitmap)
$hBitmap = $iBitmap
DeleteObject($hOldObj)
DeleteObject($hNewObj)
ReleaseDC(0, $hMyDC)
DeleteDC($hMyDC)
$bmBitmap = 0
$pal = 0
$DIBHead = 0
If $DEBUG Then _FileWriteLog($LOG, "Bitmap Retrieved" & @LF)
Else
If $DEBUG Then _FileWriteLog($LOG, "Error creating DC" & @LF)
EndIf
;Return $iBitmap
Return $hBitmap
Else
If $DEBUG Then _FileWriteLog($LOG, "No bitmap's in clipboard" & @LF)
EndIf
EndIf
EndFunc ;==>GetClipBoard