|
Вопрос # 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 (статус: 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 (статус: 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 (статус: 3-ий класс), 5 июля 2011, 02:31 [#4]:
Получается проблема была всего в поиске хендла окна.
Чисти код! Чисти код! Чисти код!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|