Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2010, 16:35   #1
Nub
Пользователь
 
Регистрация: 04.10.2010
Сообщений: 19
По умолчанию Mouse_Event vs PostMessage

Собираю сейчас бота для игры на флеше. Ниже, в частности процедура клика мышкой по заданным координатам WebBrowser.
Код:
procedure TfrmMain.ClickToPage(const left: integer; const top: integer);
var
  Pt: TPoint;
  begin
  {Позволим кнопке перерисоваться}
  Application.ProcessMessages;
  {Найдем координаты центра button 1}
  Pt.x := WebBrowser1.Left + left;
  Pt.y := WebBrowser1.Top + top; 
  {Преобразуем Pt к координатам экрана}
  Pt := ClientToScreen(Pt);
  {Преобразуем Pt к "mickeys" (аболютным координатам курсора мышки}
  Pt.x := Round(Pt.x * (65535 / Screen.Width));
  Pt.y := Round(Pt.y * (65535 / Screen.Height));
  {Переместим курсор мыши}
  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);

end;
Меня сильно напрягает то, что окно программы должно быть развёрнуто. При попытке свернуть в трей - мышка бегает где угодно, но не на моём WebBrowser'e. Как заставить эту процедуру работать и при свёрнутом приложении?

Слышал про PostMessage. Вероятно, тогда мышь дёргаться не должна. Но как его использовать в данной ситуации не знаю. Помогите, пожалуйста.
Nub вне форума Ответить с цитированием
Старый 16.10.2010, 19:35   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Работа с FindWindow и FindWindowEx. Но не думаю, что с помощью неё можно отправить клик на флэш гаму.
TwiX вне форума Ответить с цитированием
Старый 17.10.2010, 11:19   #3
Nub
Пользователь
 
Регистрация: 04.10.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от TwiX Посмотреть сообщение
Работа с FindWindow и FindWindowEx. Но не думаю, что с помощью неё можно отправить клик на флэш гаму.
Фактически PostMessage посылает сигнал о положении мыши, а не эмулирует его. Наверное. Так что это именно то, что мне нужно. Только я пока туплю, и не могу разобраться с этой функцией
Nub вне форума Ответить с цитированием
Старый 18.10.2010, 19:06   #4
Nub
Пользователь
 
Регистрация: 04.10.2010
Сообщений: 19
По умолчанию

А так можно?

Код:
procedure TfrmMain.ClickToPage(const left: integer; const top: integer);
var
  Pt: TPoint;
  begin
  {Позволим кнопке перерисоваться}
  Application.ProcessMessages;
  {Найдем координаты центра button 1}
  Pt.x := WebBrowser1.Left + left;
  Pt.y := WebBrowser1.Top + top; 
  {Преобразуем 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);

end;
Nub вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с mouse_event() Boвa Общие вопросы C/C++ 1 14.09.2011 11:34
SendMessage/PostMessage evil29a Win Api 9 25.11.2010 21:48
Send и PostMessage Alex Cones Общие вопросы Delphi 5 13.09.2010 19:48
как пользоватся mouse_event() ? Boвa Общие вопросы C/C++ 1 10.06.2010 23:17
PostMessage [Qj] Win Api 1 21.08.2009 20:29