#NoEnv
#SingleInstance Force
F3::
Width := 500
Height := 500
; Создаём DC экрана
hdcScreen := DllCall("GetDC", "Ptr", 0, "Ptr")
if (!hdcScreen)
{
MsgBox, 16, ОШИБКА, Windows не смог получить DC экрана.
return
}
; Создаём совместимый DC
hdcMem := DllCall("gdi32\CreateCompatibleDC", "Ptr", hdcScreen, "Ptr")
if (!hdcMem)
{
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hdcScreen)
MsgBox, 16, ОШИБКА, Не удалось создать Memory DC.
return
}
; Создаём bitmap
hBitmap := DllCall(
"gdi32\CreateCompatibleBitmap",
"Ptr", hdcScreen,
"Int", Width,
"Int", Height,
"Ptr"
)
if (!hBitmap)
{
DllCall("gdi32\DeleteDC", "Ptr", hdcMem)
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hdcScreen)
MsgBox, 16, ОШИБКА, Windows не смог создать bitmap.
return
}
; Выбираем bitmap в память
hOld := DllCall(
"gdi32\SelectObject",
"Ptr", hdcMem,
"Ptr", hBitmap,
"Ptr"
)
; Пробуем сделать копию экрана
Result := DllCall(
"gdi32\BitBlt",
"Ptr", hdcMem,
"Int", 0,
"Int", 0,
"Int", Width,
"Int", Height,
"Ptr", hdcScreen,
"Int", 0,
"Int", 0,
"UInt", 0x00CC0020
)
if (!Result)
{
ErrorCode := DllCall("GetLastError")
DllCall("gdi32\SelectObject", "Ptr", hdcMem, "Ptr", hOld)
DllCall("gdi32\DeleteObject", "Ptr", hBitmap)
DllCall("gdi32\DeleteDC", "Ptr", hdcMem)
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hdcScreen)
MsgBox, 16, ОШИБКА BITBLT, BitBlt не смог захватить экран.`n`nКод Windows: %ErrorCode%
return
}
; Успешно
DllCall("gdi32\SelectObject", "Ptr", hdcMem, "Ptr", hOld)
DllCall("gdi32\DeleteObject", "Ptr", hBitmap)
DllCall("gdi32\DeleteDC", "Ptr", hdcMem)
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hdcScreen)
MsgBox, 64, УСПЕХ, Windows успешно сделал BitBlt захват экрана!
return