Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 478

/ вопрос решён /

Приветствую, уважаемые эксперты! На форме лежит компонент twebbrowser, пытаюсь отправить в него сообщение о клике мыши

 var
Wnd:HWnd;
begin
Wnd:=form2.Handle;
Wnd:=FindWindowEx(Wnd,0,'Internet Explorer_Server',nil);
sendmessage(Wnd,WM_LBUTTONDOWN,0,(30 shl 16)+30);
sleep(1000);
sendmessage(Wnd,WM_LBUTTONUP,0,(30 shl 16)+30);


но почему то не происходит клика, причем при таком коде он неможет получить хендл компонента браузера. пробовал по другому писать:
Wnd:=webbrowser1.Handle;
тогда находится, но клик все равно не прорабатывает..
может у кого есть какие-нибудь соображения на этот счет?

Примечание #1 (5 июля 2011, 01:15):
Вообщем для меня хорошая традиция отвечать на свои вопросы=) не менее хорошая традиция делиться решениями с другими. Поэтому вот привожу решение данной проблемы в Delphi и в VS C++:
var
Wnd:HWnd;
begin
Wnd:=Form3.Handle;
Wnd:=FindWindowEx(Wnd,0,'Shell Embedding',nil);
Wnd:=FindWindowEx(Wnd,0,'Shell DocObject View',nil);
Wnd:=FindWindowEx(Wnd,0,'Internet Explorer_Server',nil);
postmessage(Wnd,WM_LBUTTONDOWN,0,(30 shl 16)+ 30);
postmessage(Wnd,WM_LBUTTONUP,0,(30 shl 16)+ 30);

HWND Wnd = (HWND)webBrowser1->Handle.ToPointer();
  Wnd=FindWindowEx(Wnd,0,L"Shell Embedding",0);
  Wnd=FindWindowEx(Wnd,0,L"Shell DocObject View",0);
  Wnd=FindWindowEx(Wnd,0,L"Internet Explorer_Server",0);
  PostMessage(Wnd,WM_LBUTTONDOWN,0,(30<<16)+30);
  PostMessage(Wnd,WM_LBUTTONUP,0,(30<<16)+30);
Примечание #2 (5 июля 2011, 01:21):
да чуть не забыл, в VS C++ необходимо будет включить:
#include <windows.h>
#pragma comment(lib, "user32.lib")

Ученый Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 4 июля 2011, 06:30
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 5 июля 2011, 02:31; участников в обсуждении: 2.
Gooddy

Gooddy (статус: 3-ий класс), 4 июля 2011, 16:27 [#1]:

Wnd:=webbrowser1.Handle;
sendmessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, 30 + 30 shl 16);   
sendmessage(Handle, WM_LBUTTONUP, MK_LBUTTON, 30 + 30 shl 16);

Пробуй.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 4 июля 2011, 16:29 [#2]:

И кстати, чем не устраивает mouse_event?
Ещё можно попробовать SendInput, но он также посылает сообщения в окно с фокусом.
Чисти код! Чисти код! Чисти код!
Ученый

Ученый (статус: 8-ой класс), 4 июля 2011, 23:04 [#3]:

Wnd:=webbrowser1.Handle;
sendmessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, 30 + 30 shl 16);
sendmessage(Handle, WM_LBUTTONUP, MK_LBUTTON, 30 + 30 shl 16);

пробовал не помогло. надо именно так потому что окно будет скрыто и мышку трогать нельзя. а чем SendInput будет лучше?

5 июля 2011, 01:16: Статус вопроса изменён на решённый (изменил автор вопроса — Ученый)

5 июля 2011, 01:18: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — Ученый)

5 июля 2011, 01:22: Статус вопроса изменён на решённый (изменил автор вопроса — Ученый)

Gooddy

Gooddy (статус: 3-ий класс), 5 июля 2011, 02:31 [#4]:

Получается проблема была всего в поиске хендла окна.
Чисти код! Чисти код! Чисти код!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.04 сек.