
18.10.2010, 19:13
|
Начинающий
|
|
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
|
|
Клик в свёрнутом окне
На форме WebBrowser. В нём - флеш игра. Нужно кликнуть по заданым координатам. Всё отлично работает через Mouse_event.
Код:
{Переместим курсор мыши}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
{Имитируем нажатие левой кнопки мыши}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
{Имитируем отпускание левой кнопки мыши}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0)
Главная проблема - в том, что окно с ботом должно быть открыто. При свёрнутом в трей курсор бегает где угодно, но не там где нужно. Намутил решение через postmessage, но отчего-то работать не хочет. В чём проблема?
Код:
procedure TfrmMain.Button3Click(Sender: TObject);
var
Pt: TPoint;
left, top:integer;
begin
left:=strtoint(Edit31.Text);
top:=strtoint(Edit32.Text);
{Позволим кнопке перерисоваться}
Application.ProcessMessages;
{Найдем координаты центра button 1}
Pt.x := WebBrowser1.Left + left;
Pt.y := WebBrowser1.Top + top + 25; //костыль в 25 от верхней границы
{Преобразуем Pt к координатам экрана}
Pt := ClientToScreen(Pt);
{Преобразуем Pt к "mickeys" (аболютным координатам курсора мышки}
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
postmessage(frmMain.WebBrowser1.Handle,WM_MOVE,0,(Pt. x shl 16)+ Pt.y);
postmessage(frmMain.WebBrowser1.Handle,WM_LBUTTONDOWN,0,(Pt. x shl 16)+ Pt.y);
postmessage(frmMain.WebBrowser1.Handle,WM_LBUTTONUP,0,(Pt.x shl 16)+ Pt.y);
|