|
Вопрос # 1 378/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Большое спасибо этому чудесному сайту, большое спасибо программистам, которые отвечают на вопросы.
По сути: мне необходимо создать программу, только не знаю с какого места зайти в Делфи. Основная функция программы заключается в том, что при нажатии на любую кнопку в Windows-ce, Internet Explorer, флешь анимации (это самое главное), эта кнопка распознавалась, и в программе происходили какие нибудь действия, например записывалось что Пользователь в такое то в время нажал кнопку «добавить» во флешь анимации, или закрыть.
Распознавание кнопки хотелось бы, что происходило при помощи сравнения с таким же рисунком, например, Пользователь нажал кнопку «закрыть» далее сработала моя программа, она сравнила со своей базой кнопок «закрыть» с кнопкой которую, нажал пользователь…
Так же программа должна, сама понимать на какую кнопку нажал пользователь, просто есть кнопки, которые нельзя распознать как текст, например «>>>» что обозначает далее.
Прошу заметить, что я работаю не над шпионской программой, просто мне необходимо сделать статистику для одной программы!…
 |
Вопрос задал: Cool (статус: Посетитель)
Вопрос отправлен: 26 февраля 2008, 13:45
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Cool!
Не обойтись вам без хуков. Сложного ничего нет, читаем здесь http://www.delphikingdom.com/asp/viewitem.asp?catalogid=548 статью, примеры там есть.
В вашем случае нужен хук типа WH_CALLWNDPROC или WH_GETMESSAGE. Он будет вызываться всегда, когда обрабатываются сообщения. Нажали кнопку - вам пришло сообщения вида WM_LBUTTONCLICK и хендл кнопки. Зная хендл, можно узнать текст на объекте (например кнопке) или его размеры. Вот здесь http://www.delphimaster.ru/articles/winapi/index.html есть пример.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 26 февраля 2008, 23:43
Оценка за ответ: 4
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 1 марта 2008, 00:28; участников в обсуждении: 2.
|
Cool (статус: Посетитель), 27 февраля 2008, 12:24 [#1]:
Большое спасибо за ответ. У ставновил глобальный хук, обработал сообщения, а вот хенд нажатой кнопке, немогу...?
|
|
Вадим К (статус: Академик), 28 февраля 2008, 00:20 [#2]:
Я предполагал этот вопрос. смотрите вторую ссылку. Там есть. А так, можно с помощью FindWindow найти окно, в котором находиться кнопка, а потом findwindowex поможет найти кнопку по имени.
В примерах к первой статье есть всё необходимое. просто внимательно читаем.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Cool (статус: Посетитель), 29 февраля 2008, 07:57 [#3]:
ну что то получается, но несовссем как я хотел!
WM_LBUTTONDOWN:
begin
h := WindowFromPoint(Mouse.CursorPos);
GetWindowRect(H,Rect);
DC := GetWindowDC(H);
Buffer := TBitmap.Create;
Buffer.Height := Rect.Bottom-Rect.Top;
Buffer.Width := Rect.Right-Rect.Left;
BitBlt(Buffer.Canvas.Handle,0,0,Rect.Right-Rect.Left,Rect.Bottom-Rect.Top,
DC,0,0,SRCCOPY);
Как быть с флеш анимациями, и кнопками из html, они определяются как всё окно, а не как кнопка? А хотелось выдёргивать только кнопки?
|
|
Вадим К (статус: Академик), 1 марта 2008, 00:28 [#4]:
С броузерными кнопка сравнительно несложно, хотя проще взять снифер и посмотреть, что там пересылается.
Как нажать на какую то кнопку в броузере - я знаю, координаты теоретически получить могу, но всё это справедливо для IE.
А вот с флешем будет посложнее. Дело в том, что там всё рисуется и такого понятия как "хендл кнопки" нет. Если это обычное флеш приложение, то можно просто составить "карту" координат и по ним определять куда попали.
Может просто задачку сформулируем поточнее? а то рассуждать о сферическом коне в вакууме сложновато. Что за флеш, что именно хотим сделать?
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|