Класс TWindow

          Класс предназначен для работы с окнами сторонних приложений. С помощью него можно делать скриншоты чужих окон, анализировать их, узнавать положение и размер окна, а также изменять их.

Описание свойств и методов:

Данный объект в сущности повторяет 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.

 

Bot Development Engine