Текущий архив: 2007.09.09;
Скачать: CL | DM;
Вниз
Эмуляция нажатие кнопки Найти похожие ветки
← →
Андрей Л. (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;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.035 c