Загрузка данных


#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