Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
|
03.03.2010, 20:03 | #1 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Имитация нажатия кнопки в чужом окне(форме)...
Как имитировать нажатие кнопки в чужом окне (форме)?
Есть какая нить функция, команда или процедура, которая бы позволяла это делать??? |
04.03.2010, 17: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, 10:16 | #3 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Дескриптор окна есть, есть дескриптор кнопки! Мне вот что не понятно это как вот послать сообщение как ты говоришь о нажатие вот это момент меня интересует, можно подробнее ! А то шо то мусолю и мусолю ни как не доганю!
|
07.03.2010, 13:43 | #4 |
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Либо SendMessage, либо PostMessage. Тем более, что дескриптор кнопки ты уже отловил. Вот ему и отправляй: Код:
PostMessage(Дескриптор кнопки, BM_CLICK, 0, 0); |
Сказали спасибо: |
07.03.2010, 20:41 | #5 |
Пользователь
Пол: Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
А есть какая нить функция которая бы показала все Контролы какие есть в конкретном окне, дескриптор окна есть????
Ну то есть чтобы знать типы контролов Последний раз редактировалось Agasferat; 07.03.2010 в 20:43.. |
07.03.2010, 22:22 | #6 | |||||||||||||||||||||||
Пользователь
Пол: Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
|
Re: Имитация нажатия кнопки в чужом окне(форме)...
Нет, такой функции нет. Но есть программы. Одна из них входит в пакет MVS 2005 и называется Spy++. Есть и другие аналоги, например http://softsearch.ru/programs/61-526...download.shtml называется WieW 1.90. Работать просто - запускаешь программу, запускаешь "жертву", наводишь мышь и в программе (окне) отображается информация о контроле под указателем мыши, начиная от текущего дескриптора до имени класса, под которым данный контрол скомпилирован. |
|||||||||||||||||||||||
Сказали спасибо: |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Имитация сигнализации | Mahor | Защита от угона | 34 | 02.06.2010 16:08 |
Имитация работы РВ | stafford | Архиваторы, системные и тест прог. | 0 | 11.11.2008 13:18 |
определение нажатия правой кнопки мыши | Litvinenko_A | Visual C++ / С/C++ | 3 | 26.07.2008 21:42 |
'Начните работу с нажатия этой кнопки'. Как убрать? | Flooder | Microsoft Windows | 6 | 23.12.2005 16:35 |
Хозяйничаем на чужом компе. | NetTiger | Интернет партизаны | 5 | 26.11.2004 10:44 |
|
|