Компьютерный форум 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 вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Выгодное предложение от KNS digital solutions материнская плата x299 - билеты на футбол в подарок каждому покупателюВыгодно, удобно, быстро в КНС Нева - моноблоки iRU купить - корпоративные поставки в Санкт-Петербурге.синус-лифтинг цена в москвекруизы по дону из воронежаустановка Яндекс.Аудитории


Старый 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 вне форума
 
Ответить с цитированием Вверх
Старый 08.03.2010, 14:27   #7
Agasferat
Пользователь
 
Пол:Мужской
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

А вот есть функция такая FindWindow(), ескриптор возвращает,
а где вот взять результат True или False т.е. не сам дескриптор а нашел или не нашел окно ????
Agasferat вне форума
 
Ответить с цитированием Вверх
Старый 08.03.2010, 17:55   #8
medved_68
Пользователь
 
Пол:Мужской
Регистрация: 27.02.2010
Сообщений: 153
Репутация: 47
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

Цитата:
Сообщение от Agasferat Посмотреть сообщение
А вот есть функция такая FindWindow(), ескриптор возвращает,
а где вот взять результат True или False т.е. не сам дескриптор а нашел или не нашел окно ????

Смотрим описание функции:
Цитата:
Если функция завершилась успешно, возвращаемое значение - дескриптор окна, которое имеет определенное имя класса и имя окна. Если функция терпит неудачу, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.

Соотвественно, проверка на 0 и будет ответом выполнена функция или нет. Ну а GetLastError выдаст код ошибки (объяснение) - почему функция не была выполнена. Разве этого не достаточно для анализа?
medved_68 вне форума
 
Ответить с цитированием Вверх
Старый 12.03.2010, 06:16   #9
Agasferat
Пользователь
 
Пол:Мужской
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

1. Как найти окно в заголовке(или в названии) которого есть слово кот тебе нужно.?? Я имею ввиду есть какой нить поиск типа : *word*, по краям звездочки в место любого текста???
(так как нить можно :FindWindow('*word*',0,0,nil) )

2. А как можно считать текст в окне на картинке (с изображения), или покрайне мере какие функции или процедурц в этом помогут???
(какой нить принт скрин окна есть в буфер, и )
огромное пасибо!!! )

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

Цитата:
Сообщение от Agasferat Посмотреть сообщение
А как можно считать текст в окне на картинке (с изображения),

Если интересует обход капчи - то лучше забей - овчинка выделки не стоит (слишком проблематично организовать выборки пикселей и привязку соответствия к тексту). А если еще и есть перечеркнутые полосы или тоновые переходы, которые глаз воспринимает как контуры текста, а программа будет воспринимать просто переходы - вообще труба.
Цитата:
Сообщение от Agasferat Посмотреть сообщение
1. Как найти окно в заголовке(или в названии) которого есть слово кот тебе нужно.??

Окно верхнего уровня?
medved_68 вне форума
 
Ответить с цитированием Вверх
Старый 14.03.2010, 07:49   #11
Agasferat
Пользователь
 
Пол:Мужской
Регистрация: 15.11.2006
Сообщений: 49
Репутация: 4
По умолчанию Re: Имитация нажатия кнопки в чужом окне(форме)...

Окно, да главное;

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

Цитата:
Сообщение от Agasferat Посмотреть сообщение
Какие нить функции типа принт скрин экрана или окна есть?

Конечно. Есть класс TBitmap в нем есть методы работы с регионами. У формы есть Canvas. На ней выделяй регион (нужную область) и переписывай в TBitmap (или TImage) по желанию. Соответственно, у данного объекта есть методы обработки пикселей, вообщем работы с изображением, вплоть до сохранения в формате bmp, jpeg.
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 код Выкл.

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


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


Copyright ©2004 - 2024 2BakSa.WS

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