Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 03.03.2010, 20:03   #1
Пользователь
 
Пол:Мужской
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
По умолчанию Имитация нажатия кнопки в чужом окне(форме)...

Как имитировать нажатие кнопки в чужом окне (форме)?
Есть какая нить функция, команда или процедура, которая бы позволяла это делать???
Agasferat вне форума
 
Ответить с цитированием Вверх
Старый 04.03.2010, 17:53   #2
medved_68
Пользователь
 
Пол:Мужской
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

Цитата:
Сообщение от Agasferat Посмотреть сообщение
Как имитировать нажатие кнопки в чужом окне (форме)?
Есть какая нить функция, команда или процедура, которая бы позволяла это делать???

Для начала необходимо получить дескриптор данного окна. Можно для этого использовать 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);
Функция callback вот ее вторая часть:
Код:
//КаллБэк функция поиска дочерних контролов
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;
В данном случае я программно запускал самораспаковывающийся архив винрара и нажимал кнопку извлечь. Архив распаковывался и процесс "склеивал ласты".
medved_68 вне форума
 
Ответить с цитированием Вверх
Старый 07.03.2010, 10:16   #3
Agasferat
Пользователь
 
Пол:Мужской
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

Дескриптор окна есть, есть дескриптор кнопки! Мне вот что не понятно это как вот послать сообщение как ты говоришь о нажатие вот это момент меня интересует, можно подробнее ! А то шо то мусолю и мусолю ни как не доганю!
Agasferat вне форума
 
Ответить с цитированием Вверх
Старый 07.03.2010, 13:43   #4
medved_68
Пользователь
 
Пол:Мужской
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

Цитата:
Сообщение от Agasferat Посмотреть сообщение
Дескриптор окна есть, есть дескриптор кнопки! Мне вот что не понятно это как вот послать сообщение как ты говоришь о нажатие вот это момент меня интересует, можно подробнее ! А то шо то мусолю и мусолю ни как не доганю!

Либо SendMessage, либо PostMessage. Тем более, что дескриптор кнопки ты уже отловил. Вот ему и отправляй:
Код:
PostMessage(Дескриптор кнопки, BM_CLICK, 0, 0);
Есть правда кнопки, которые не понимают сообщение BM_CLICK - тогда приходится окну-родителю посылать нажатие/отпускание кнопки мыши с координатами контрола кнопки (делаем предварительно "лишние телодвижения", получая координаты контрола на форме). Даже если кнопка просто нарисована (т.е. это не контрол, а область формы (но это ИМХО не твой случай) - такой вариант прокатит на ура и форма обработает последовательность сообщений от якобы мыши.
medved_68 вне форума
 
Ответить с цитированием Вверх
Старый 07.03.2010, 20:41   #5
Agasferat
Пользователь
 
Пол:Мужской
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

А есть какая нить функция которая бы показала все Контролы какие есть в конкретном окне, дескриптор окна есть????
Ну то есть чтобы знать типы контролов

Последний раз редактировалось Agasferat; 07.03.2010 в 20:43..
Agasferat вне форума
 
Ответить с цитированием Вверх
Старый 07.03.2010, 22:22   #6
medved_68
Пользователь
 
Пол:Мужской
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

Цитата:
Сообщение от Agasferat Посмотреть сообщение
А есть какая нить функция которая бы показала все Контролы какие есть в конкретном окне, дескриптор окна есть????
Ну то есть чтобы знать типы контролов

Нет, такой функции нет. Но есть программы. Одна из них входит в пакет MVS 2005 и называется Spy++. Есть и другие аналоги, например http://softsearch.ru/programs/61-526...download.shtml называется WieW 1.90. Работать просто - запускаешь программу, запускаешь "жертву", наводишь мышь и в программе (окне) отображается информация о контроле под указателем мыши, начиная от текущего дескриптора до имени класса, под которым данный контрол скомпилирован.
medved_68 вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация сигнализации 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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 04:14. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.15883 секунды с 11 запросами