1

Тема: Клик мышью без перемещения

так понял, что есть два метода :
1. ControlClick


2. Через систему сообщений, хотя подозреваю что тоже самое реализует контролклик.

Проблема в том, что все работает прекрасно если мышь находится над кнопкой которую нужно нажать
(кнопка даже подсвечивается)
Но если она в другом месте - то ничего не получается.
Проверял сообщения которые проходят. Скопировал абсолютно все сообщения.
Так что все идентично. Это такая защита у программы или это я чего то не доделал ?
Спасибо.

2

Re: Клик мышью без перемещения

хотя подозреваю что тоже самое реализует контролклик.

Правильно подозреваете.

Проблема в том, что все работает прекрасно если мышь находится над кнопкой которую нужно нажать

Именно «ControlClick»?

Укажите приложение, диалог и элемент управления. Приведите Ваш код.

3

Re: Клик мышью без перемещения

alexii пишет:

Именно «ControlClick»?

Укажите приложение, диалог и элемент управления. Приведите Ваш код.

ControlClick, x1161 y788, A

или

SendMessage ,0x0084,0,0x03140489,,A
PostMessage, 0x201, 1,0x02FE04A5,,A
Sleep 100
SendMessage ,0x0084,0,0x03140489,,A
PostMessage, 0x202, 0,0x02FE04A5,,A

Работает одинаково. Это игра, выполняется в оконном режиме

4

Re: Клик мышью без перемещения

Повторяю:

Укажите приложение, … и элемент управления.

5 (изменено: lngvar, 2014-01-02 06:02:09)

Re: Клик мышью без перемещения

Эээ не понимаю, что точно интересует. Игра Eve , хендлов окон и элементов нет, все клики проходят по координатам.

вот скрин сообщений двух нажатий на кнопку http://clip2net.com/s/6vpcWD

6

Re: Клик мышью без перемещения

Ну, скриншот хотя бы приложите, указав этот «элемент управления».

Ага. Пока писал — Вы уже приложили. Только не тот .

7

Re: Клик мышью без перемещения

alexii пишет:

Ну, скриншот хотя бы приложите, указав этот «элемент управления».

Ага. Пока писал — Вы уже приложили. Только не тот .

http://clip2net.com/s/6vpdeW  вот скрин из игры

8

Re: Клик мышью без перемещения

Это называется не "Клик мышью без перемещения", а "Послать нажатие ЛКМ в координаты окна".

9

Re: Клик мышью без перемещения

ypppu пишет:

Это называется не "Клик мышью без перемещения", а "Послать нажатие ЛКМ в координаты окна".

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

10

Re: Клик мышью без перемещения

Вопрос: а какие либо другие действия с помощью AHK удается осуществить в окне ЕВЫ?

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

11

Re: Клик мышью без перемещения

Mikki пишет:

Вопрос: а какие либо другие действия с помощью AHK удается осуществить в окне ЕВЫ?

да, двигая мышкой через MouseMove и клик например - все работает как обычно.
Сейчас я все реализовал через BlockInput, но период срабатывания таймера меньше 2 секунд, и не очень приятные постоянные убегания мыши, клик по кнопке  и возвращение ее на место.

12

Re: Клик мышью без перемещения

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

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

13

Re: Клик мышью без перемещения

ControlClick вообще немного мистическая вещь. В одних приложениях после него окно активируется, а в других нет.

14 (изменено: Mikki, 2015-01-22 22:00:13)

Re: Клик мышью без перемещения

Приветствую форумчан.

Есть клиент иры "The Infinite Black" написанный на Unity.

Есть скрипт который успешно передает нажатие левой кнопки мыши в игру, но при этом он перемещает мышку:
(пример кода)

WinActivate, ahk_pid %current_pid%
MouseClick,, %X%, %Y%

Я пытаюсь передать нажатие без перемещения мыши.
Пытался через ControlSend, через PostMessage:

WinActivate, ahk_pid 10760
sleep, 100
PostMessage, 0x201,, 0x00280032,, ahk_pid 10760 ; WM_LBUTTONDOWN at 50, 40
PostMessage, 0x202,, 0x00280032,, ahk_pid 10760 ; WM_LBUTTONUP at 50, 40

. Не работает.
Запускал WinSpector и видел что мэсаджи доходят.... чего ж не жмется?

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

15

Re: Клик мышью без перемещения

Я сталкивался с подобным в онлайн играх. Попробуй такой вариант.


WinGet, pid, pid, название окна игры
ControlClick(X,Y,"ahk_pid"pid)


ControlClick(X, Y, WinTitle="", WinText="", ExcludeTitle="", ExcludeText="")
{
  hwnd:=ControlFromPoint(X, Y, WinTitle, WinText, cX, cY
                             , ExcludeTitle, ExcludeText)
  PostMessage, 0x200, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_MOUSEMOVE
  PostMessage, 0x2A1, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_MOUSEHOVER
  PostMessage, 0x201, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_LBUTTONDOWN
  PostMessage, 0x202, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_LBUTTONUP
 }

ControlFromPoint(X, Y, WinTitle="", WinText="", ByRef cX="", ByRef cY="", ExcludeTitle="", ExcludeText="")
{
    if !(hwnd := WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText))
        return false
  
    VarSetCapacity(pt,8)
    VarSetCapacity(wi,60), NumPut(60,wi)
    DllCall("GetWindowInfo","uint",hwnd,"uint",&wi)
    NumPut(X + (w:=NumGet(wi,4,"int")) - (cw:=NumGet(wi,20,"int")), pt,0)
    NumPut(Y + (h:=NumGet(wi,8,"int")) - (ch:=NumGet(wi,24,"int")), pt,4)
  
    Loop {

        child := DllCall("ChildWindowFromPointEx","uint",hwnd,"int64",NumGet(pt,0,"int64"),"uint",0x5)
        if !child or child=hwnd
            break
        DllCall("MapWindowPoints","uint",hwnd,"uint",child,"uint",&pt,"uint",1)
        hwnd := child
    }
    cX := NumGet(pt,0,"int")
    cY := NumGet(pt,4,"int")
   return hwnd
}

16

Re: Клик мышью без перемещения

Попробовал. Не работает.

А важно , то что у меня х64 система?

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди