Скріншот активного вікна

Скріншот активного вікна

Роблю такий ось процедурою

Але чомусь якщо вікно розгорнуте на звістку екран захоплює частину панелі задач. Якщо вікно в звичайному режимі то все нормально.
Перевіряв тільки на win 7 на XP немає можливості поки.
Підкажіть ніхто не знає в чому баг?

The GetWindowDC function retrieves the device context (DC) for the entire window, including title bar, menus, and scroll bars

> Екран захоплює частину панелі задач

Не тільки панель задач. Координати left і top мають негативні розміри.
Все тому, що у розгорнутого вікна рамка знаходиться за межами клієнтської області робочого столу. Тому для нього треба віднімати розмір рамки (GetSystemMetrics + SM_CX (Y) SIZEFRAME + SM_CX (Y) FIXEDFRAME).
Хоча, може бути, є інший спосіб отримати цей розмір.

Використовуй GetDC, а не GetWindowDC, і буде тобі Щастя.

а при чому тут собстна GetDesktopWindow?


> CRLF (07.06.12 12:15) [5]
> Використовуй GetDC, а не GetWindowDC, і буде тобі Щастя.

Упевнений?

robt # XA0; (07.06.12 13:20) [8]
Ну, блін ти грамотний.
Ти знаєш як по іншому це зробити?

Намагався зробити ось так, але форма без заголовка виходить

procedure TssThread.ScreenShortWindow (var Bmp: TBitmap);
var h: THandle;
# XA0; # XA0; r: TRect;
begin

У цьому й відмінність від GetWindowDC.


> Поділися правильним кодом.


> Ти знаєш як по іншому це зробити?

Alt + Ctrl + PrintScreen;)))

Правда не зовсім подобається if # XA0; (t.Left<0) then.
може можна якось обійтися без цього)?

robt # XA0; (07.06.12 14:29) [15]

тоді вже так: Alt + PrintScreen

Схожі статті