![]() |
|
| Правила Форума редакция от 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. Работать просто - запускаешь программу, запускаешь "жертву", наводишь мышь и в программе (окне) отображается информация о контроле под указателем мыши, начиная от текущего дескриптора до имени класса, под которым данный контрол скомпилирован. ![]() |
|||||||||||||||||||||||
|
|
|
| Сказали спасибо: |
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Имитация сигнализации | 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 |
|
|