Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > TWebBrowser (EmbeddedWb) эмуляция мыши


Автор: RazoRIII 21.7.2011, 17:02
Работаю с EmbeddedWB.
Нужно программно сэмулировать действия мыши: "повозить" ею по элементу (down - move - up). При этом помех никаких быть не должно - чистая эмуляция.
Работа идет с flash объектом, получить его как wb.ElementByID['...']  в IHtmlElement могу.
mouse_event не подходит - нужен фокус на окно.
Код

 sendmessage(wb.Hwnd, WM_LBUTTONDOWN, MK_LBUTTON, X + Y shl 16);
 sendmessage(wb.Hwnd, WM_LBUTTONUP, MK_LBUTTON, X + Y shl 16);

работает непонятно как, клика по факту нет. - событие wb.OnClick не вызывается.

Код

var  
  TI:TInput;   
  MI: TMouseInput;  
-----
  MI.dx := X;   
  MI.dy := Y;   
  MI.mouseData := 0;   
  MI.dwFlags := MOUSEEVENTF_LEFTDOWN ;   
  MI.time := 10;   
  TI.mi := MI;   
  TI.Itype := INPUT_MOUSE;   
  SendInput(1, TI, SizeOf(TInput));   
  MI.dwFlags:=MOUSEEVENTF_LEFTUP;   
  TI.mi := MI;   
  SendInput(1, TI, SizeOf(TInput)); 

с ПКМ работает, с ЛКМ - гаснут мониторы (непонятная фигня). Пробовал сюда же прикрутить move - тоже самое. Если убрать MOUSEEVENTF_LEFTUP - монитор не гаснет, но толку естесно нет.

Каким образом (любым, не требующим фокуса на окно) реализовать алгоритм?

Автор: CTPAX 3.4.2013, 17:11
может и поздновато, но в аналогичной ситуации использую внешнюю dll от AutoIt autoitx3.dll. там есть функции для работы с мышью

Автор: lollollollol 3.4.2013, 21:04
Код

sendmessage(wb.Hwnd, WM_LBUTTONDOWN, MK_LBUTTON, X + Y shl 16);
sleep(150); //Sleep
sendmessage(wb.Hwnd, WM_LBUTTONUP, MK_LBUTTON, X + Y shl 16);
sleep(150); //Sleep

Вот так будет клик, иначе нет 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)