Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];

Вниз

Эмуляция нажатие кнопки   Найти похожие ветки 

 
Андрей Л.   (2007-08-16 07:39) [0]

На форме лежит браузер. Загружена страничка.
Надо програмно нажать кнопку.
Делаю так:
   x := round(x * 65535 / screen.width);
   y := round(y * 65535 / screen.height);
   mouse_event(mouseeventf_absolute or MOUSEEVENTF_MOVE, X, Y, 0, 0);
   mouse_event(mouseeventf_absolute or mouseeventf_leftdown, x, y, 0, 0);
   mouse_event(mouseeventf_absolute or mouseeventf_leftup, x, y, 0, 0);

Оно конечно хорошо, но хочется свернуть форму, а для этого кода нужен фокус.

 PostMessage(Form1.WB1.Handle,WM_LBUTTONDOWN,x,y);
 PostMessage(Form1.WB1.Handle,WM_LBUTTONUP,x,y);
Не срабатывает. Понимаю, что что-то не так делаю, но вот что понять не могу. Подскажите. Примного благодарен.


 
oldman ©   (2007-08-16 12:23) [1]

А зачем нажимать кнопку, если сразу можно вызвать функцию?


 
DVM ©   (2007-08-16 12:26) [2]


> Андрей Л.  

объектная модель браузера IE позволяет обратиться ко всему, что находится на страничке в том числе из delphi


 
iXT ©   (2007-08-16 12:27) [3]

IdHttp + Разбор кода странички


 
Johnnnnnnnn   (2007-08-16 15:39) [4]

x := round(x * 65535 / screen.width);
y := round(y * 65535 / screen.height);
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

i vs ebydet rabotat


 
Андрей Л.   (2007-08-16 15:41) [5]

Значит так. Пишу я кликер. Кста вопрос который я задал висит на многих форумах по Delphi и там нет внятного ответа. PostMessage, Sendinput, Send message с WB не работают, как я понял.

Теперь по порядку
> oldman ©   (16.08.07 12:23) [1]
> А зачем нажимать кнопку, если сразу можно вызвать функцию?
>


Как оказалось, в скрипте код, который передает координаты мыши в момент клика на сервер, что в свою очередь легко запалится, если вызывать функцию, я ведь прав? Если нет - поправьте, буду только рад.


> iXT ©   (16.08.07 12:27) [3]
> IdHttp + Разбор кода странички

Уж очень он глючный + нужно в браузер грузить + координаты передавать чтоб не спалиться =)


> DVM ©   (16.08.07 12:26) [2]
> > Андрей Л.  объектная модель браузера IE позволяет обратиться
> ко всему, что находится на страничке в том числе из delphi

Обращался. Делаю анализ странички, чтоб координаты кнопки вычислить. Там тьма-тьмущая вложенных фреймов, что работу затрудняет оч. сильно, по крайней мере для меня. Да к тому все теже злосчастные координаты.

Сейчас единственное решение, кот. возникло это не сворачивать форму, сделать иконку в трее и работать с AlphablendValue;

Т.е. в момент нажатия запоминаются координаты курсора, потом он перемещается на кнопку, AlphaBlendValue формы = 1. Ее не видно, но нажимать можно (чтоб в глазах не ребило), нажатие
  mouse_event(mouseeventf_absolute or MOUSEEVENTF_MOVE, X, Y, 0, 0);
  mouse_event(mouseeventf_absolute or mouseeventf_leftdown, x, y, 0, 0);
  mouse_event(mouseeventf_absolute or mouseeventf_leftup, x, y, 0, 0);

И обратно на координаты. Насколько это рабочий варинт - не знаю, буду тестить. Есть у кого-то предложения, как сделать проще???


 
Андрей Л.   (2007-08-16 15:44) [6]


> Johnnnnnnnn   (16.08.07 15:39) [4]
> x := round(x * 65535 / screen.width);y := round(y * 65535
> / screen.height);SetCursorPos(x,y);mouse_event(MOUSEEVENTF_LEFTDOWN,
>  0,0,0,0);mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);i vs ebydet
> rabotat

Да. Оно работает, но вот курсор то перемещается физически, при этом форму не свернешь, да и вообще на компе не возможно работать, если жать часто.


 
DVM ©   (2007-08-16 15:50) [7]


> Обращался. Делаю анализ странички, чтоб координаты кнопки
> вычислить. Там тьма-тьмущая вложенных фреймов, что работу
> затрудняет оч. сильно, по крайней мере для меня. Да к тому
> все теже злосчастные координаты.

Как обращался?

Там обращение будет не сложнее чем, к примеру, browser.document.objects[].name  (прямо так писать не надо - это лишь иллюстрация)  и т.д.


 
Андрей Л.   (2007-08-16 15:52) [8]

var
 frames: IHTMLFramesCollection2;
 i: integer;
 ov1: OleVariant;
 iDisp: IDispatch;
 IWindow2: IHTMLWindow2;
begin
 if not assigned(aDoer) then
   Exit;
 aDoer(iDoc);
 frames := iDoc.frames;
 if not assigned(frames) then
   exit;
 if frames.length = 0 then
   exit;
 for i := 1 to frames.length do
 begin
   ov1 := i - 1;
   try
     iDisp := frames.item(ov1);
     iDisp.QueryInterface(IHTMLWindow2, IWindow2);
     if assigned(IWindow2) then
       DoWithFrames(IWindow2.document, aDoer);
   except
   end;
end;

Для выхватывания вложенных фреймов


 
DVM ©   (2007-08-16 15:54) [9]


> Андрей Л.   (16.08.07 15:52) [8]

Ну так ты на правильном пути, поверь. Кликанье по кнопкам -это непрофессионально.


 
Андрей Л.   (2007-08-16 15:57) [10]


> DVM ©   (16.08.07 15:54) [9]
> > Андрей Л.   (16.08.07 15:52) [8] Ну так ты на правильном
> пути, поверь. Кликанье по кнопкам -это непрофессионально.
>


Сколько там может быть навешеной защиты? Координаты, время нажатия и т.д. и т.п. Все предусмотреть невозможно.

Непрофессионально не спорю, зато риск минимален =) Пишу то для себя. Кста никто так и не ответил почему не работают SendMessage, PostMessage и Sendinput


 
Leonid Troyanovsky ©   (2007-08-16 16:11) [11]


> Андрей Л.   (16.08.07 15:57) [10]

> то для себя. Кста никто так и не ответил почему не работают
> SendMessage, PostMessage и Sendinput

Возьми книжку Джефа Рихтера "Windows для профи"
почитай главу про очередь разупорядоченного ввода.

Там все по полочкам разложено, и станет тебе ясно,
что путем Post or SendMessage можно достичь лишь
весьма приблизительной имитации.

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
2-1187184153
harisma
2007-08-15 17:22
2007.09.09
Работа с реестром


2-1187553240
C0derr
2007-08-19 23:54
2007.09.09
Как сделать картинку в фрейме неподвижной при вертик. прокрутке?


2-1186999332
AZIZE
2007-08-13 14:02
2007.09.09
Что я делаю не так?


1-1183316249
JanMihail
2007-07-01 22:57
2007.09.09
Как узнать путь к файлу, который печатается в данный момент?


15-1187083135
DagOT-R
2007-08-14 13:18
2007.09.09
Поле MEMO непонятного происхождения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский