информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Портрет посетителяСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
не помогает 17.12.08 01:58  Число просмотров: 4404
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
<programming>
[Win32] Эмуляция работы пользователя с мышью 16.12.08 19:06  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 16.12.08 19:07  Количество правок: 2
<"чистая" ссылка>
Суть проблемы. Пишу бота для игры в шахматы, точнее уже написал для одной программы, а теперь адаптирую для другой. Этой другой оказалась игра на рамблере: http://games.rambler.ru/game/chess/.

Вот этот код здесь работать не хочет:
	SendMessage(m_hwndBoard, WM_LBUTTONDOWN, 0, MAKELONG(xFrom, yFrom));
	SendMessage(m_hwndBoard, WM_MOUSEMOVE, 0, MAKELONG(xTo, yTo));
	SendMessage(m_hwndBoard, WM_LBUTTONUP, 0, MAKELONG(xTo, yTo));

---
хотя в другой программе работал. Здесь же, он поднимает шахматную фигуру, перемещает её, но опускать на доску не хочет. С чем это может быть связано?

Я наконец-то внял наставлениям amirul'а и HandleX и разобрасля с программой Spy++ (классная вещь!). Она выдаёт вот такую последовательность сообщений, когда я работаю с мышью "легально"
WM_MOUSEACTIVATE
WM_MOUSEACTIVATE
WM_SETCURSOR
WM_SETCURSOR
WM_LBUTTONDOWN
WM_MOUSEMOVE
...
WM_MOUSEMOVE
WM_LBUTTONUP
WM_SETCURSOR
WM_SETCURSOR

---
По аналогии с этим сформировал свои сообщения через SendMessage, но желаемого результата так и недобился.

Если кратко вопрос в следующем: как поднятую в рамблере шахматную фигуру поставить туда, куда я хочу?
используй mouse_event() или лучше SendInput() 17.12.08 00:19  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
используй mouse_event() или лучше SendInput()

VOID mouse_event(          DWORD dwFlags,
    DWORD dx,
    DWORD dy,
    DWORD dwData,
    ULONG_PTR dwExtraInfo
);

UINT SendInput(          UINT nInputs,
    LPINPUT pInputs,
    int cbSize
);


---
> Суть проблемы. Пишу бота для игры в шахматы, точнее уже
> написал для одной программы, а теперь адаптирую для другой.
> Этой другой оказалась игра на рамблере:
> http://games.rambler.ru/game/chess/.
>
> Вот этот код здесь работать не хочет:
>
> 	SendMessage(m_hwndBoard, WM_LBUTTONDOWN, 0,
> MAKELONG(xFrom, yFrom));
> 	SendMessage(m_hwndBoard, WM_MOUSEMOVE, 0,
> MAKELONG(xTo, yTo));
> 	SendMessage(m_hwndBoard, WM_LBUTTONUP, 0,
> MAKELONG(xTo, yTo));
> 

---
> хотя в другой программе работал. Здесь же, он поднимает
> шахматную фигуру, перемещает её, но опускать на доску не
> хочет. С чем это может быть связано?
>
> Я наконец-то внял наставлениям amirul
> и HandleX и разобрасля с программой
> Spy++ (классная вещь!). Она выдаёт вот такую
> последовательность сообщений, когда я работаю с мышью
> "легально"
>
> WM_MOUSEACTIVATE
> WM_MOUSEACTIVATE
> WM_SETCURSOR
> WM_SETCURSOR
> WM_LBUTTONDOWN
> WM_MOUSEMOVE
> ...
> WM_MOUSEMOVE
> WM_LBUTTONUP
> WM_SETCURSOR
> WM_SETCURSOR
> 

---
> По аналогии с этим сформировал свои сообщения через
> SendMessage, но желаемого результата так и недобился.
>
> Если кратко вопрос в следующем: как поднятую в рамблере
> шахматную фигуру поставить туда, куда я хочу?
На худой конец и mouse_event сойдёт, но не хотелось бы её... 17.12.08 02:04  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
На худой конец и mouse_event сойдёт, но не хотелось бы её использовать, т.к. тогда компьютер только игрой и будет занят, а хотелось бы чтобы за ним ещё что-то делать можно было.

C SendMessage так можно, главное мышь на окно с программой не наводить.

А чем SendInput лучше mouse_event?
А ты уверен - может, эта фигура по правилам шахмат - туда не ходит? 16.12.08 22:17  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка>
уверен, фигура зависает над той клеткой, куда должна упасть 17.12.08 01:58  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
А если использовать PostMessage? 16.12.08 19:43  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
не помогает 17.12.08 01:58  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
В общем я додумался до того, что в этом флеш клиенте стоит... 25.01.09 08:46  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
В общем я додумался до того, что в этом флеш клиенте стоит какая-то защита от автоматического нажатия мыши. Я обнаружил, что если перед началом эмуляции мыши нажать левой кнопкой на окно клиента, то дальше SendMessage и PostMessage прокатывает.

Плюс на другом флеш клиенте (правда не на браузерном, а на "программном") SendMessage и PostMessage работают на ура.

Обходное решение через mouse_event найдено, но общее решение через SendMessage и PostMessage продолжает интересовать, так что тему не закрываю.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach