Скріншот активного вікна
Роблю такий ось процедурою
Але чомусь якщо вікно розгорнуте на звістку екран захоплює частину панелі задач. Якщо вікно в звичайному режимі то все нормально.
Перевіряв тільки на 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