Этот небольшой пример сделал специально для Zhyk.ru по просьбе форумчанина.
Для того что бы получить хэндл окна с помощью наведения мыши нам понадобится всего лишь парочка WInApi функций. Опишу их прототипы:
Код:
function WindowFromPoint(Point: TPoint): HWND; stdcall;
Функция WindowFromPoint извлекает дескриптор окна, которое содержит заданную точку. В качестве входного параметра принимает значение с типом TPoint который является структурой содержащей x и y координаты:
Код:
TPoint = record
X: Longint;
Y: Longint;
end;
Вторая функция которая нам понадобится это GetCursorPos, которая извлекает позицию курсора, в экранных координатах.
Код:
function GetCursorPos(var lpPoint: TPoint): BOOL; stdcall;
В качестве входного параметра принимает указатель на структуру TPoint, которая получает экранные координаты курсора.
Ну а дальше дело за малым, кидаем на форму TPanel, в кол-ве 1 штуки. Выделяем TPanel мышкой и в инспекторе объектов переходим в закладку событий, два раза кликаем в поле MouseUp, делфи создаст обработчик отжатия клавиши мыши для TPanel.
В нем то и нужно получить координаты курсора с помощью GetCursorPos, а затем получить хэндл окна по этим координатам с помощью WindowFromPoint.
Я реализовал это следующим образом:
Код:
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
CursorPoint: TPoint; // Запись, содержит координаты по X и Y
hWin: THandle; // Хендл окна под курсором
Buffer: array [0 .. 255] of Char; // Буфер в который будем записывать имя класса
begin
GetCursorPos(CursorPoint); // Получаем координаты курсора
hWin := WindowFromPoint(CursorPoint); // Получаем хендл окна под курсором
GetClassName(hWin, Buffer, 255); // Получаем имя класса, первый параметр это Хендл нужного окна, второй - буфер куда записываеться имя класса, третий - максимальная длинны буфера
Panel1.Caption := Buffer; // Показываем класс окна
Screen.Cursor := crDefault;
end;
Для наглядности работы я сделал так же получение класса окна и запись его в Panel1. А так же сделал изменение внешнего вида курсора при нажатии мышью на панель и отпускани при захвате хэндла.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Автор Тигрь, при копировании указывать копирайты.
________________ Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС. Все мои читы/программы/статьи тут:http://zhyk.ru/forum/showpost.php?p=38501&postcount=21
Re: Получение Handle окна с помощью наведения курсора
Благодарю.
Подскажите пожалуйста, мне необходимо делать клики в игровом клиенте.
Наводил вашей программой на игровое окно и по 1 элементу удалял и вышла такая цепочка, может вам нужно знать её, чтобы помочь мне.
NativeWindowClass >> WebViewHost >> CefBrowserWindow >> TChromium >> TForm1
Re: Получение Handle окна с помощью наведения курсора
Цитата:
Сообщение от NebesaBag
Благодарю.
Подскажите пожалуйста, мне необходимо делать клики в игровом клиенте.
Наводил вашей программой на игровое окно и по 1 элементу удалял и вышла такая цепочка, может вам нужно знать её, чтобы помочь мне.
NativeWindowClass >> WebViewHost >> CefBrowserWindow >> TChromium >> TForm1
Таким кодом например наводил на чекбокс, сворачивал прогу и оно в свернутой проге чекало, а вот в NativeWindowClass не работает.
P.S. игра на flash
flash вообще вряд ли будет обрабатывать клики через сенд меседж. Попробуй юзать эту функцию для имитации мыши [Ссылки могут видеть только зарегистрированные пользователи. ]
________________ Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС. Все мои читы/программы/статьи тут:http://zhyk.ru/forum/showpost.php?p=38501&postcount=21
Re: Получение Handle окна с помощью наведения курсора
Насколько я помню, нужно использовать функцию [Ссылки могут видеть только зарегистрированные пользователи. ] как для сендмессаджа, так и для keybd_event