2013-05-22 3 views
1

Прежде всего, если есть какие-либо языковые решения для этого, которые возможны только в C++/C#/java и т. Д., Пожалуйста, скажите так, потому что им хорошо с использованием любого. В настоящее время я пытаюсь нажать кнопку в приложении, которое находится в фоновом режиме, и я могу управлять частью «щелчка», используя сообщение «Отправить/отправить». Как так:Дурачивание приложения о местоположении мыши

  SendMessage(Window, 0x201, 0, 700 * 0x10000 + 700); 

0x201 здесь левой кнопкой мыши вниз и, предположительно, место должно быть 700, 700

Однако, когда я отправить это сообщение, приложение им морочат акты основаны на моей текущей позиции мыши а не 700 700.

Я считаю, что это связано с тем, что приложение im, пытающееся обмануть, ищет текущую позицию мыши. любой способ обмануть это?

ответ

1

Вы не должны реализовывать это с помощью SendMessage, вы слишком поздно в процессе там - система уже обработала всевозможные вещи и определила, какое сообщение отправить, как только оно попадет в очереди сообщений. Отправка сырых событий щелчка там только смущает его больше.

Вместо этого вы должны использовать SendInput Win32 API call. Он эмулирует поведение мыши (и других устройств ввода) на более высоком уровне, а затем позволяет системе заботиться о обработке полученных сообщений , как если бы настоящая мышь вызывала их. Таким образом, по определению, обмануть всех, потому что нечего обманывать - мышь действительно переместилась в данное место для всех целей и задач.

Вы также можете использовать для этой цели более простой mouse_event звонок, но он официально устарел, поэтому SendInput является предпочтительным.

+0

проблема здесь, если я использую sendinput, я бы использовал фактическую мышь и не обманывал приложение. При этом мое приложение будет бесполезным для компьютера, поскольку оно использует мышь, а «пользователь» не сможет делать то, что им нравится в данный момент. – claus78

+0

Единственная реальная альтернатива - установка [Spy ++] (http://msdn.microsoft.com/en-us/library/aa264396 (v = vs.60) .aspx). Это позволяет вам точно проверить *, какие сообщения передаются в каком порядке, например, mouseclick. Из этого журнала вы должны будете воспроизвести точно требуемую последовательность. –

+0

будет ли он отличаться от ОС к ОС или они такие же? (Как в Windows), как я могу воспроизвести точную последовательность? по sendmessage? – claus78