![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Пользователь
Пол:
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Как имитировать нажатие кнопки в чужом окне (форме)?
Есть какая нить функция, команда или процедура, которая бы позволяла это делать??? |
|
|
|
| Реклама: | сергей катышев дом кранкенгагена | прехаб строительство | Лучшие замороженные пюре: пюре фруктовое замороженное - заказывай на сайта АГРОБАР! | зимний круиз из москвы | Мебельный магазин: стеллаж купить деревянный - Переходи на сайт! |
|
|
#2
|
|||||||||||||||||||||||
|
Пользователь
Пол:
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Для начала необходимо получить дескриптор данного окна. Можно для этого использовать 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;
![]() |
|||||||||||||||||||||||
|
|
|
| Сказали спасибо: |
|
|
#3
|
|
Пользователь
Пол:
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Дескриптор окна есть, есть дескриптор кнопки! Мне вот что не понятно это как вот послать сообщение как ты говоришь о нажатие вот это момент меня интересует, можно подробнее ! А то шо то мусолю и мусолю ни как не доганю!
|
|
|
|
|
|
#4
|
|
Пользователь
Пол:
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Либо SendMessage, либо PostMessage. Тем более, что дескриптор кнопки ты уже отловил. Вот ему и отправляй: Код:
PostMessage(Дескриптор кнопки, BM_CLICK, 0, 0); ![]() |
|
|
|
| Сказали спасибо: |
|
|
#5
|
|
Пользователь
Пол:
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
А есть какая нить функция которая бы показала все Контролы какие есть в конкретном окне, дескриптор окна есть????
Ну то есть чтобы знать типы контролов Последний раз редактировалось Agasferat; 07.03.2010 в 21:43.. |
|
|
|
|
|
#6
|
|||||||||||||||||||||||
|
Пользователь
Пол:
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Нет, такой функции нет. Но есть программы. Одна из них входит в пакет MVS 2005 и называется Spy++. Есть и другие аналоги, например http://softsearch.ru/programs/61-526...download.shtml называется WieW 1.90. Работать просто - запускаешь программу, запускаешь "жертву", наводишь мышь и в программе (окне) отображается информация о контроле под указателем мыши, начиная от текущего дескриптора до имени класса, под которым данный контрол скомпилирован. ![]() |
|||||||||||||||||||||||
|
|
|
| Сказали спасибо: |
|
|
#7
|
|
Пользователь
Пол:
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
А вот есть функция такая FindWindow(), ескриптор возвращает,
а где вот взять результат True или False т.е. не сам дескриптор а нашел или не нашел окно ???? |
|
|
|
|
|
#8
|
||||||||||||||||||||||||||||||||||||||||||
|
Пользователь
Пол:
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Смотрим описание функции:
Соотвественно, проверка на 0 и будет ответом выполнена функция или нет. Ну а GetLastError выдаст код ошибки (объяснение) - почему функция не была выполнена. Разве этого не достаточно для анализа? ![]() |
||||||||||||||||||||||||||||||||||||||||||
|
|
|
| Сказали спасибо: |
|
|
#9
|
|
Пользователь
Пол:
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
1. Как найти окно в заголовке(или в названии) которого есть слово кот тебе нужно.?? Я имею ввиду есть какой нить поиск типа : *word*, по краям звездочки в место любого текста???
(так как нить можно :FindWindow('*word*',0,0,nil) ) 2. А как можно считать текст в окне на картинке (с изображения), или покрайне мере какие функции или процедурц в этом помогут??? (какой нить принт скрин окна есть в буфер, и ) огромное пасибо!!! ) Последний раз редактировалось Agasferat; 12.03.2010 в 08:24.. |
|
|
|
|
|
#10
|
||||||||||||||||||||||||||||||||||||||||||||||
|
Пользователь
Пол:
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Если интересует обход капчи - то лучше забей - овчинка выделки не стоит (слишком проблематично организовать выборки пикселей и привязку соответствия к тексту). А если еще и есть перечеркнутые полосы или тоновые переходы, которые глаз воспринимает как контуры текста, а программа будет воспринимать просто переходы - вообще труба. ![]()
Окно верхнего уровня? |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#11
|
|
Пользователь
Пол:
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Окно, да главное;
А изображение нормальное просто текст считать в виде картинке? Какие нить функции типа принт скрин экрана или окна есть? |
|
|
|
|
|
#12
|
|||||||||||||||||||||||
|
Пользователь
Пол:
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Конечно. Есть класс TBitmap в нем есть методы работы с регионами. У формы есть Canvas. На ней выделяй регион (нужную область) и переписывай в TBitmap (или TImage) по желанию. Соответственно, у данного объекта есть методы обработки пикселей, вообщем работы с изображением, вплоть до сохранения в формате bmp, jpeg. ![]() |
|||||||||||||||||||||||
|
|
|
| Сказали спасибо: |
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Имитация сигнализации | Mahor | Защита от угона | 34 | 02.06.2010 16:08 |
| Имитация работы РВ | stafford | Архиваторы, системные и тест прог. | 0 | 11.11.2008 14:18 |
| определение нажатия правой кнопки мыши | Litvinenko_A | Visual C++ / С/C++ | 3 | 26.07.2008 21:42 |
| 'Начните работу с нажатия этой кнопки'. Как убрать? | Flooder | Microsoft Windows | 6 | 23.12.2005 17:35 |
| Хозяйничаем на чужом компе. | NetTiger | Интернет партизаны | 5 | 26.11.2004 11:44 |
|
|