| 
| 
 | Вопрос # 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.
 
 А вот с флешем будет посложнее. Дело в том, что там всё рисуется и такого понятия как "хендл кнопки" нет. Если это обычное флеш приложение, то можно просто составить "карту" координат и по ним определять куда попали.
 
 Может просто задачку сформулируем поточнее? а то рассуждать о сферическом коне в вакууме сложновато. Что за флеш, что именно хотим сделать?
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |