:: MVP ::
|
|
:: RSS ::
|
|
|
Рано или поздно каждому программисту приходится работать с посторонними
окнами. Для этого нужно знать как минимум Handle окна, над которым
необходимо произвести какие-либо действия. Чтобы узнать Handle,
можно воспользоваться одной из программ, которая может показывать
информацию об окнах (некоторые из них можно скачать в разделе Download).
Но мы ведь программисты, следовательно сами можем получить
интересующую нас информацию. А начнем с того, что рассмотрим некоторые
процедуры, позволяющие работать с чужими окнами, некоторыми из этих
процедур мы воспользуемся при написании программы.
FindWindow
function FindWindow( IpClassName, IpWindowName: PChar ): HWND;
Функция возвращает описатель окна, удовлетворяющий запросу
(0 - если такого окна не найдено).
IpClassName
Имя класса, по которому призводится поиск среди ВСЕХ окон системы.
IpWindowName
Заголовок окна.
Один из параметров может быть равен nil,
тогда поиск ведется по другому параметру.
|
FindWindowEx
function FindWindowEx( Parent, Child: HWND; ClassName, WindowName: PChar ): HWND;
Функция возвращает описатель дочернего окна, удовлетворяющий запросу
(0 - если такого окна не найдено).
Parent
Handle родительского окна.
Child
Handle дочернего окна.
ClassName
Класс дочернего окна.
WindowName
Заголовок дочернего окна.
Handle родительского окна нужно указать обязательно, handle дочернего окна
скорее всего 0, так как именно его и возврашает эта функция.
Один из двух последних параметров может быть равен nil,
тогда поиск ведется по другому параметру.
|
GetWindow
function GetWindow( hWnd: HWND; uCmd: Cardinal ): HWND;
Функция возвращает описатель дочернего окна, удовлетворяющий запросу
(0 - если такого окна не найдено).
hWnd
Handle родительского окна.
uCmd
Определяет отношения между указанным окном и окном, чей дескриптор должен быть найден.
|
GetParent
function GetParent( hWnd: HWND ): HWND;
Функция возвращает описатель родительского окна для окна hWnd.
(0 - если такого окна не найдено).
hWnd
Handle окна.
|
WindowFromPoint
function WindowFromPoint( Point: TPoint ): HWND;
Функция возвращает описатель окна, которое находится в указанных координатах.
Point
Координаты пикселя.
|
IsWindow
function IsWindow( hWnd: HWND ): Bool;
Возвращает True, если окно с заданным описателем существует и False в противном случае.
hWnd
Дескриптор окна.
|
IsWindowVisible
function IsWindowVisible( hWnd: HWND ): Bool;
Возвращает True если данное окно видимо и False в противном случае.
hWnd
Дескриптор окна.
|
IsWindowEnabled
function IsWindowEnabled( hWnd: HWND ): Bool;
Возвращает True если данное окно доступно и False в противном случае.
hWnd
Дескриптор окна.
|
ShowWindow
function ShowWindow( hWnd: HWND; nCmdShow: integer ): Bool;
Функция показывает или прячет окно.
Возвращает True в случае успешного выполнения и False в противном случае.
hWnd
Дескриптор окна.
nCmdShow
Константа, определяющая, что будет сделано с окном:
SW_HIDE
SW_SHOWNORMAL (SW_NORMAL)
SW_SHOWMINIMIZED
SW_SHOWMAXIMIZED
SW_MAXIMIZE
SW_SHOWNOACTIVATE
SW_SHOW
SW_MINIMIZE
SW_SHOWMINNOACTIVE
SW_SHOWNA
SW_RESTORE
SW_SHOWDEFAULT
SW_MAX
|
EnableWindow
function EnableWindow( hWnd: HWND; bEnable: LongBool ): Bool;
Функция активизирует или дизактивизирует окно.
Возвращает True в случае успешного выполнения и False в противном случае.
hWnd
Дескриптор окна.
bEnable
True если окно нужно сделать активным и False в противном случае.
|
CloseWindow
function CloseWindow( hWnd: HWND ): Bool;
Функция закрывает окно.
Возвращает True в случае успешного выполнения и False в противном случае.
hWnd
Дескриптор окна.
|
GetDesktopWindow
function GetDesktopWindow( hWnd: HWND ): Bool;
Функция возвращает описатель окна Рабочего Стола (Desktop).
Без параметров.
|
SetWindowPos
function SetWindowPos( hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer;
uFlags: Cardinal ): Bool;
Устанавливает окно в новую позицию.
Возвращает True в случае успешного выполнения и False в противном случае.
hWnd
Дескриптор окна.
hWndInsertAfter
Описатель окна, перед которым в списке Z-Order будет вставлено окно hWnd,
или одна из следующих констант:
HWND_BOTTOM
Поместить окно на дно списка Z-Order.
HWND_TOP
Поместить окно на верх списка Z-Order.
X
Новая позиция окна по X.
Y
Новая позиция окна по Y.
cx
Новая ширина окна.
cy
Новая высота окна.
uFlags
Одна или несколько (разделенных OR) следующих констант:
SWP_NOSIZE
Не изменять размер окна после перемещения (cx, cy игнорируются).
SWP_NOZORDER
Не изменять положение окна в списке Z-Order.
SWP_SHOWWINDOW
Сделать окно видимым после перемещения.
SWP_HIDEWINDOW
Спрятать окно после перемещения.
SWP_NOACTIVATE
Не передавать фокус окну после перемещения.
SWP_NOMOVE
Не перемещать окно (игнорируется X, Y).
|
GetWindowText
function GetWindowText( hWnd: HWND; IpString: PChar; nMaxCount: integer ): integer;
Функция возвращает текст окна.
Для формы это будет заголовок, для кнопки - надпись на кнопке.
hWnd
Описатель того окна, текст которого нужно получить.
IpString
Переменная, в которую будет помещен результат.
nMaxCount
Максимальная длина текста, если текст длиннее, то он обрезается.
|
SetWindowText
function SetWindowText( hWnd: HWND; IpString: PChar ): Bool;
Функция устанавливает текст окна.
hWnd
Описатель того окна, текст которого нужно установить.
IpString
Строка, содержащая устанавливаемый текст.
|
GetClassName
function GetClassName( hWnd: HWND; IpClassName: PChar; nMaxCount: integer ): integer;
Функция возвращает класс окна.
Для формы это будет заголовок, для кнопки - надпись на кнопке.
hWnd
Описатель того окна, класс которого нужно получить.
IpClassName
Переменная, в которую будет помещен результат.
nMaxCount
Максимальная длина текста, если текст длиннее, то он обрезается.
|
GetWindowRect
function GetWindowRect( hWnd: HWND; var IpRect: TRect ): Bool;
Функция вычисляет координаты окна.
Возвращает True в случае успешного выполнения и False в противном случае.
hWnd
Описатель того окна, размеры которого нужно получить.
IpRect
Переменная, в которую будет помещен результат.
|
А теперь применим описанные выше функции для того, чтобы написать
программу, которая покажет нам необходимую информацию о нужном нам окне.
Пример прокомментирован по минимуму, описание всех функций можно
прочитать выше.
procedure TForm1.Timer1Timer(Sender: TObject);
var
Wnd: HWND; // Hahdle найденного окна
Pos: TPoint; // Позиция курсора
Rect: TRect; // Координаты окна
buff: array[0..255] of char; // Буфер
WndText: string; // Текст окна
NameClass: string; // Класс окна
begin
// Получаем позицию курсора
GetCursorPos( Pos );
// Получаем Handle окна под курсором
Wnd := WindowFromPoint( Pos );
GetWindowRect( Wnd, Rect );
GetWindowText( Wnd, buff, SizeOf( buff ) );
WndText := StrPas( buff );
GetClassName( Wnd, buff, SizeOf( buff ) );
NameClass := StrPas( buff );
// Выводим координаты курсора
LabelPosX.Caption := 'X: ' + IntToStr( Pos.X );
LabelPosY.Caption := 'Y: ' + IntToStr( Pos.Y );
LabelHandle.Caption := 'Handle: ' + IntToStr( Wnd );
LabelName.Caption := 'Name: ' + WndText;
LabelClass.Caption := 'Class: ' + NameClass;
LabelLeft.Caption := 'Left = ' + IntToStr( Rect.Left );
LabelTop.Caption := 'Top = ' + IntToStr( Rect.Top );
LabelWidth.Caption := 'Width = ' + IntToStr( Rect.Right - Rect.Left );
LabelHeight.Caption := 'Height = ' + IntToStr( Rect.Bottom - Rect.Top );
// Получаем Handle родительского окна
Wnd := GetParent( Wnd );
GetWindowRect( Wnd, Rect );
GetWindowText( Wnd, buff, SizeOf( buff ) );
WndText := StrPas( buff );
GetClassName( Wnd, buff, SizeOf( buff ) );
NameClass := StrPas( buff );
LabelParentHandle.Caption := 'ParentHandle: ' + IntToStr( Wnd );
LabelParentName.Caption := 'ParentName: ' + WndText;
LabelParentClass.Caption := 'ParentClass: ' + NameClass;
LabelParentLeft.Caption := 'ParentLeft = ' + IntToStr( Rect.Left );
LabelParentTop.Caption := 'ParentTop = ' + IntToStr( Rect.Top );
LabelParentWidth.Caption := 'ParentWidth = ' + IntToStr( Rect.Right - Rect.Left );
LabelParentHeight.Caption := 'ParentHeight = ' + IntToStr( Rect.Bottom - Rect.Top );
end;
|
.: Пример к данной статье :.
|
При использовании материала - ссылка на сайт обязательна
|
|