Так важно же прояснить, что с ним не так, может его надо как-то поменять. Так он у вас всё-таки работает некорректно? Я проверял на двух компьютерах с Windows 7 и Windows 10, всё было в порядке.
hBitmap := GetBitmapFromClipboard()
Gui, Add, Pic,, HBITMAP: %hBitmap%
Gui, Show
GuiClose() {
ExitApp
}
GetBitmapFromClipboard() {
static CF_BITMAP := 2, CF_DIB := 8, SRCCOPY := 0x00CC0020
if !DllCall("IsClipboardFormatAvailable", "UInt", CF_BITMAP)
throw "There is no image in the Clipboard"
if !DllCall("OpenClipboard", "Ptr", 0)
throw "OpenClipboard failed"
hDIB := DllCall("GetClipboardData", "UInt", CF_DIB, "Ptr")
hBM := DllCall("GetClipboardData", "UInt", CF_BITMAP, "Ptr")
DllCall("CloseClipboard")
if !hDIB
throw "GetClipboardData failed"
pDIB := DllCall("GlobalLock", "Ptr", hDIB, "Ptr")
width := NumGet(pDIB + 4, "UInt")
height := NumGet(pDIB + 8, "UInt")
bpp := NumGet(pDIB + 14, "UShort")
DllCall("GlobalUnlock", "Ptr", pDIB)
hDC := DllCall("CreateCompatibleDC", "Ptr", 0, "Ptr")
oBM := DllCall("SelectObject", "Ptr", hDC, "Ptr", hBM, "Ptr")
hMDC := DllCall("CreateCompatibleDC", "Ptr", 0, "Ptr")
hNewBM := CreateDIBSection(width, -height,, bpp)
oPrevBM := DllCall("SelectObject", "Ptr", hMDC, "Ptr", hNewBM, "Ptr")
DllCall("BitBlt", "Ptr", hMDC, "Int", 0, "Int", 0, "Int", width, "Int", height
, "Ptr", hDC , "Int", 0, "Int", 0, "UInt", SRCCOPY)
DllCall("SelectObject", "Ptr", hDC, "Ptr", oBM, "Ptr")
DllCall("DeleteDC", "Ptr", hDC), DllCall("DeleteObject", "Ptr", hBM)
DllCall("SelectObject", "Ptr", hMDC, "Ptr", oPrevBM, "Ptr")
DllCall("DeleteDC", "Ptr", hMDC)
Return hNewBM
}
CreateDIBSection(w, h, ByRef ppvBits := 0, bpp := 32) {
hDC := DllCall("GetDC", "Ptr", 0, "Ptr")
VarSetCapacity(BITMAPINFO, 40, 0)
NumPut(40 , BITMAPINFO, 0)
NumPut( w , BITMAPINFO, 4)
NumPut( h , BITMAPINFO, 8)
NumPut( 1 , BITMAPINFO, 12)
NumPut(bpp, BITMAPINFO, 14)
hBM := DllCall("CreateDIBSection", "Ptr", hDC, "Ptr", &BITMAPINFO, "UInt", 0
, "PtrP", ppvBits, "Ptr", 0, "UInt", 0, "Ptr")
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hDC)
return hBM
}
Но я опасаюсь, что вы скажате, что и этот код код делает что-то не то.