Класс предназначен для работы с окнами сторонних приложений. С помощью него можно делать скриншоты чужих окон, анализировать их, узнавать положение и размер окна, а также изменять их.
Описание свойств и методов:
Данный объект в сущности повторяет WinAPI функции, удобство лишь в том, что эти функции не нужно отдельно объявлять. Функции имеют такие же имена как и WinApi функции, но с приставкой L. Поэтому дополнительную информацию и примеры использования можно найти в интернете.
Property Handle: Cardinal //-указатель на окно (число)
Property Width: Integer //- ширина окна (вместе с рамкой)
Property Height: Integer //- высота окна (вместе с рамкой)
Property Top: Integer //- координата Y экрана для верхней стороны окна (с учетом рамки)
Property Left: Integer //- координата X экрана для левой стороны окна (с учетом рамки)
// следующие 4 свойства аналогичны предыдущим, но для клиентской части окна (без учета рамки)
Property ClientWidth: Integer
Property ClientHeight: Integer
Property ClientTop: Integer
Property ClientLeft: Integer
Property ClassName: AnsiString //- имя класса окна (например TForm)
Property WindowName: AnsiString //-имя окна (текст в заголовке окна);
Property Screen: TBitmap //сюда помещается скриншот окна, из него можно узнать цвет пикселя, сохранить его на жесткий диск, и т.д. и т.п.
Методы:
Constructor Create(); //Создать объект класса.
Следующие 3 метода не только находят указатель на окно, но и заполняют свойства из предыдущего раздела (кроме screen)
Function LFindWindow(ClassName, WindowName: AnsiString): Cardinal; — //найти окно по имени класса и имени окна, если вместо параметра передавать ‘0’ (так в апострофах и писать). То это означает любой класс или любое имя, или и то и другое.
Function LFindWindowEx(PrevChHandle:Cardinal;ClassName,WindowName: AnsiString):Cardinal; — ищет окна и элементы управления подчиненные окну предварительно найденному функцией LFindWindow. Параметр PrevChHandle:Cardinal — указатель на предыдущий элемент найденный этой функцией. Для первого поиска его значение следует указать равным 0. В случае успешного поиска функция вернет указатель на найденный элемент, и этот указатель нужно передать в параметре PrevChHandle:Cardinal для поиска следующего элемента. ClassName,WindowName: AnsiString — эти параметры аналогичны одноименным параметрам функции LFindWindow
Function LGetNextWindow(Flag: word): Boolean; //Перейти к следующему окну, Flag = 1 — переход к следующему, Flag = 0 — переход к предыдущему окну. Перед началом использования необходимо найти первое окно, например функцией LFindWindow(‘0’, ‘0’);
function LGetForeGroundWindow: Cardinal; //возвращает указатель на активное в данный момент окно
function LSetForeGroundWindow:Boolean; //-делает окно указатель которого находится в свойстве Handle активным
procedure LBringWindowToTop; //-поднимает окно на самый верх (т.е. поверх остальных)
Следующие 2 функции отсылают любые возможные сообщения, в том числе и кликанье мышью и клавиатурой в скрытом окне, но т.к. в программе не определены символьные представления констант которые они принимают, то в качестве параметров необходимо передавать соответствующие им числовые значения.
procedure LSendMessage(Msg:Cardinal;wParam:integer; lParam:integer); //-отсылает текущему окну сообщение и ждет пока оно
//будет обработано
procedure LPostMessage(Msg:Cardinal;wParam:integer; lParam:integer); //-отсылает текущему окну сообщение и не ждет пока
//-оно будет обработано, а передает управление следующей по коду операции
Procedure LShowWindow(CmdShow: Integer); //-показывает текущее окно (параметр аналогичен WinAPI функции одноименной), но передавать нужно числовое соответствие.
function LIsIconic: Boolean; — если True то окно свернуто
function LIsWindow: Boolean — если True то это окно, а не контрол например
function LIsWindowEnabled: Boolean; — если True то в окно можно чего нибудь послать
function LIsWindowVisible: Boolean; — если True то окно видимо
function LIsZoomed: Boolean; — если True то окно развернуто
Следующие 2 функции делают скриншот в не зависимости от того видимо окно или нет, но у свернутого окна скриншота нет! т.е. окно можно задвигать за экран, перекрывать другими окнами, но нельзя сворачивать
Function GetWindowShot: Boolean; — сделать скриншот окна вместе с рамкой и поместить его в свойство screen
Function GetWindowClientShot: Boolean; -скриншот клиентской части окна следующие 2 функции позволяют изменить размер окна и переместить его в другое место экрана
Function LSetWindowPos(hWndInsertAfter:Cardinal; X:integer;Y:integer; Width:integer;Height:integer;uFlags:integer):boolean;
Function LMoveWindow(X:integer;Y:integer;Width:integer;Height:integer;Repaint:boolean):boolean;
function LWindowFromPoint(x,y:integer): Cardinal; — возвращает указатель на окно или контрол, который находится по переданным в параметрах координатам.
Function SendMouseClick(Mode:Char;x,y:integer):boolean; — Посылает клик мышью в окно. Mode может быть равно ‘L’ — клик левой кнопкой, ‘R’ — клик правой кнопкой, ‘D’ — двойной клик. В x,y передаются координаты в клиентской части окна (без учета рамки).
Procedure SendKeyDown(KeyCode:integer); — Посылает нажатие клавиши, код которой передан в параметре KeyCode.
Procedure SendKeyUp(KeyCode: integer); — посылает отпускание клавиши, код которой передан в параметре KeyCode.