Загрузка данных
#NoEnv
#SingleInstance Force
#Include %A_ScriptDir%\Gdip_All.ahk
F3::
X := 0
Y := 0
Width := 500
Height := 500
; ==========================================
; Запускаем GDI+
; ==========================================
pToken := Gdip_Startup()
if (!pToken)
{
MsgBox, 16, Ошибка, GDI+ не запустился.
return
}
; ==========================================
; Получаем экран
; ==========================================
hdcScreen := DllCall("GetDC", "UInt", 0)
if (!hdcScreen)
{
Gdip_Shutdown(pToken)
MsgBox, 16, Ошибка, Не удалось получить DC экрана.
return
}
; ==========================================
; Создаём Memory DC
; ==========================================
hdcMem := DllCall("gdi32\CreateCompatibleDC", "UInt", hdcScreen)
if (!hdcMem)
{
DllCall("ReleaseDC", "UInt", 0, "UInt", hdcScreen)
Gdip_Shutdown(pToken)
MsgBox, 16, Ошибка, Не удалось создать Memory DC.
return
}
; ==========================================
; Создаём Bitmap
; ==========================================
hBitmap := DllCall("gdi32\CreateCompatibleBitmap", "UInt", hdcScreen, "Int", Width, "Int", Height)
if (!hBitmap)
{
DllCall("gdi32\DeleteDC", "UInt", hdcMem)
DllCall("ReleaseDC", "UInt", 0, "UInt", hdcScreen)
Gdip_Shutdown(pToken)
MsgBox, 16, Ошибка, Не удалось создать Bitmap.
return
}
; ==========================================
; Выбираем Bitmap
; ==========================================
hOld := DllCall("gdi32\SelectObject", "UInt", hdcMem, "UInt", hBitmap)
; ==========================================
; Делаем захват
; ==========================================
Result := DllCall("gdi32\BitBlt", "UInt", hdcMem, "Int", 0, "Int", 0, "Int", Width, "Int", Height, "UInt", hdcScreen, "Int", X, "Int", Y, "UInt", 0x00CC0020)
if (!Result)
{
ErrorCode := DllCall("GetLastError")
DllCall("gdi32\SelectObject", "UInt", hdcMem, "UInt", hOld)
DllCall("gdi32\DeleteObject", "UInt", hBitmap)
DllCall("gdi32\DeleteDC", "UInt", hdcMem)
DllCall("ReleaseDC", "UInt", 0, "UInt", hdcScreen)
Gdip_Shutdown(pToken)
MsgBox, 16, Ошибка, BitBlt не смог сделать захват.`nКод: %ErrorCode%
return
}
; ==========================================
; Освобождаем DC
; ==========================================
DllCall("gdi32\SelectObject", "UInt", hdcMem, "UInt", hOld)
DllCall("gdi32\DeleteDC", "UInt", hdcMem)
DllCall("ReleaseDC", "UInt", 0, "UInt", hdcScreen)
; ==========================================
; Превращаем HBITMAP в GDI+ Bitmap
; ==========================================
pBitmap := Gdip_CreateBitmapFromHBITMAP(hBitmap)
DllCall("gdi32\DeleteObject", "UInt", hBitmap)
if (!pBitmap)
{
Gdip_Shutdown(pToken)
MsgBox, 16, Ошибка, Не удалось создать GDI+ Bitmap из HBITMAP.
return
}
; ==========================================
; Сохраняем JPG
; ==========================================
FilePath := A_ScriptDir "\TEST_SCREEN.jpg"
FileDelete, %FilePath%
SaveResult := Gdip_SaveBitmapToFile(pBitmap, FilePath, 90)
; ==========================================
; Освобождаем GDI+
; ==========================================
Gdip_DisposeImage(pBitmap)
Gdip_Shutdown(pToken)
; ==========================================
; Проверяем результат
; ==========================================
if (SaveResult != 0)
{
MsgBox, 16, Ошибка, GDI+ не смог сохранить изображение.`n`nКод ошибки: %SaveResult%
return
}
if (!FileExist(FilePath))
{
MsgBox, 16, Ошибка, Файл JPG не был создан.
return
}
MsgBox, 64, УСПЕХ!, Скриншот успешно сохранён!`n`nФайл:`n%FilePath%
return