информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Атака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
А если использовать PostMessage? 16.12.08 19:43  Число просмотров: 4402
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach