Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
03.03.2010, 21:03 | #1 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Имитация нажатия кнопки в чужом окне(форме)...
Как имитировать нажатие кнопки в чужом окне (форме)?
Есть какая нить функция, команда или процедура, которая бы позволяла это делать??? |
Реклама: | Рекомендуем КНС.ру - Optoma X371 - более 50-ти тысяч наименований товаров со склада в Москве | родий электролит купить | как собрать барнхаус | Conecte OLX a Twilio | zentec z037 |
04.03.2010, 18:53 | #2 | |||||||||||||||||||||||
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Для начала необходимо получить дескриптор данного окна. Можно для этого использовать FindWindow....затем функцией EnumChildeWindow....получить дескрипторы дочерних контролов, после этого проверить соответствие каждого контрола нужному классу и если найден нужный дескриптор - отправить ему сообщение о нажатии и отпускании кнопки мыши: Код:
//Находим дескриптор окна процесса распаковки Okno:=FindWindow(nil,'Самораспаковывающийся архив WinRAR'); if Okno <> 0 then begin //Это процесс архиватора SL.Clear; EnumChildWindows(Okno, @EnumChildProc, Longint(SL)); //После окончания Han = дескриптору контрола //который необходимо "программно нажать" if Han <> 0 then PostMessage(Han, BM_CLICK, 0, 0); Код:
//КаллБэк функция поиска дочерних контролов function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall; var ax:string; begin Result := Wnd <> 0; if Result then begin Len:=GetClassName(Wnd,Buff,MAX_PATH); if Len > 0 then begin ax:=string(Buff); if ax = 'Button' then begin Len:=GetWindowText(Wnd,Buff,MAX_PATH); if (string(Buff)) = 'Извлечь' then Han:=Wnd; end; end; EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); end; end; |
|||||||||||||||||||||||
Сказали спасибо: |
07.03.2010, 11:16 | #3 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Дескриптор окна есть, есть дескриптор кнопки! Мне вот что не понятно это как вот послать сообщение как ты говоришь о нажатие вот это момент меня интересует, можно подробнее ! А то шо то мусолю и мусолю ни как не доганю!
|
07.03.2010, 14:43 | #4 |
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Либо SendMessage, либо PostMessage. Тем более, что дескриптор кнопки ты уже отловил. Вот ему и отправляй: Код:
PostMessage(Дескриптор кнопки, BM_CLICK, 0, 0); |
Сказали спасибо: |
07.03.2010, 21:41 | #5 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
А есть какая нить функция которая бы показала все Контролы какие есть в конкретном окне, дескриптор окна есть????
Ну то есть чтобы знать типы контролов Последний раз редактировалось Agasferat; 07.03.2010 в 21:43.. |
07.03.2010, 23:22 | #6 | |||||||||||||||||||||||
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Нет, такой функции нет. Но есть программы. Одна из них входит в пакет MVS 2005 и называется Spy++. Есть и другие аналоги, например http://softsearch.ru/programs/61-526...download.shtml называется WieW 1.90. Работать просто - запускаешь программу, запускаешь "жертву", наводишь мышь и в программе (окне) отображается информация о контроле под указателем мыши, начиная от текущего дескриптора до имени класса, под которым данный контрол скомпилирован. |
|||||||||||||||||||||||
Сказали спасибо: |
08.03.2010, 15:27 | #7 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
А вот есть функция такая FindWindow(), ескриптор возвращает,
а где вот взять результат True или False т.е. не сам дескриптор а нашел или не нашел окно ???? |
08.03.2010, 18:55 | #8 | ||||||||||||||||||||||||||||||||||||||||||
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Смотрим описание функции:
Соотвественно, проверка на 0 и будет ответом выполнена функция или нет. Ну а GetLastError выдаст код ошибки (объяснение) - почему функция не была выполнена. Разве этого не достаточно для анализа? |
||||||||||||||||||||||||||||||||||||||||||
Сказали спасибо: |
12.03.2010, 07:16 | #9 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
1. Как найти окно в заголовке(или в названии) которого есть слово кот тебе нужно.?? Я имею ввиду есть какой нить поиск типа : *word*, по краям звездочки в место любого текста???
(так как нить можно :FindWindow('*word*',0,0,nil) ) 2. А как можно считать текст в окне на картинке (с изображения), или покрайне мере какие функции или процедурц в этом помогут??? (какой нить принт скрин окна есть в буфер, и ) огромное пасибо!!! ) Последний раз редактировалось Agasferat; 12.03.2010 в 08:24.. |
13.03.2010, 11:47 | #10 | ||||||||||||||||||||||||||||||||||||||||||||||
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Если интересует обход капчи - то лучше забей - овчинка выделки не стоит (слишком проблематично организовать выборки пикселей и привязку соответствия к тексту). А если еще и есть перечеркнутые полосы или тоновые переходы, которые глаз воспринимает как контуры текста, а программа будет воспринимать просто переходы - вообще труба.
Окно верхнего уровня? |
||||||||||||||||||||||||||||||||||||||||||||||
14.03.2010, 08:49 | #11 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Окно, да главное;
А изображение нормальное просто текст считать в виде картинке? Какие нить функции типа принт скрин экрана или окна есть? |
14.03.2010, 13:15 | #12 | |||||||||||||||||||||||
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Конечно. Есть класс TBitmap в нем есть методы работы с регионами. У формы есть Canvas. На ней выделяй регион (нужную область) и переписывай в TBitmap (или TImage) по желанию. Соответственно, у данного объекта есть методы обработки пикселей, вообщем работы с изображением, вплоть до сохранения в формате bmp, jpeg. |
|||||||||||||||||||||||
Сказали спасибо: |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Имитация сигнализации | Mahor | Защита от угона | 34 | 02.06.2010 17:08 |
Имитация работы РВ | stafford | Архиваторы, системные и тест прог. | 0 | 11.11.2008 14:18 |
определение нажатия правой кнопки мыши | Litvinenko_A | Visual C++ / С/C++ | 3 | 26.07.2008 22:42 |
'Начните работу с нажатия этой кнопки'. Как убрать? | Flooder | Microsoft Windows | 6 | 23.12.2005 17:35 |
Хозяйничаем на чужом компе. | NetTiger | Интернет партизаны | 5 | 26.11.2004 11:44 |
|
|