1 (изменено: Hydrogenium, 2013-06-24 23:41:58)

Тема: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

MouseMove %x%, %y%, 0  

выставляя даже 0, всё равно они медленные и заметны,
а нужно максимально быстрое движение к нужной координате

в делфи на вид, как будто курсор телепортируется, а тут видны движения не вооружённым глазом ))

2

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

В справке есть такой пример:

DllCall("SetCursorPos", int, 100, int, 400)

3 (изменено: Hydrogenium, 2013-06-25 01:04:58)

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?


MouseGetPos, xpos, ypos  

WinGet, active_id, ID, A 
    
CoordMode, Mouse, Client    
Click %x%, %y% 
    
CoordMode, Mouse, Relative  
MouseMove %xpos%, %ypos%, 0  

раньше было так и работало



MouseGetPos, xpos, ypos    

WinGet, active_id, ID, A     
   
CoordMode, Mouse, Client    
DllCall("SetCursorPos", int, x, int, y)
Click
    
CoordMode, Mouse, Relative      
DllCall("SetCursorPos", int, xpos, int, ypos)

почему мышь не возвращается на прежнее место ?
да и смещение для клика произошло
как-то не корректно CoordMode работает с SetCursorPos

как быть ?

4

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

MouseGetPos, xpos, ypos  

WinGet, active_id, ID, A 
    
CoordMode, Mouse, Client    
Click %x%, %y% 
    
CoordMode, Mouse, Relative  
MouseMove %xpos%, %ypos%, 0

Я тут ошибок не вижу.
Должно работать.
Протестируйте в блокноте.

5 (изменено: Hydrogenium, 2013-06-25 01:06:24)

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Malcev пишет:

Я тут ошибок не вижу.
Должно работать.
Протестируйте в блокноте.

Ekklesiast пишет:

раньше было так и работало

не работает SetCursorPos + CoordMode

MouseGetPos, xpos, ypos    

WinGet, active_id, ID, A     
   
CoordMode, Mouse, Client    
DllCall("SetCursorPos", int, x, int, y)
Click
    
CoordMode, Mouse, Relative      
DllCall("SetCursorPos", int, xpos, int, ypos)

6

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Такой вариант с выключением курсора:

#NoEnv
SetMouseDelay -1
SetBatchLines -1
SystemCursor("I")
X := 200, Y := 100
Return

F12:: HideClick(X, Y)

HideClick(X, Y)
{
   MouseGetPos saveX0, saveY0
   SystemCursor(0)
   click %X%, %Y%
   MouseMove %saveX0%, %saveY0%
   SystemCursor(1)
Return
}

; Из справки AutoHotkey
SystemCursor(OnOff=1) ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
static AndMask, XorMask, $, h_cursor
,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; blank cursors
, h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; handles of default cursors
if (OnOff = "Init" or OnOff = "I" or $ = "") ; init when requested or at first call
{
$ = h ; active default cursors
VarSetCapacity( h_cursor,4444, 1 )
VarSetCapacity( AndMask, 32*4, 0xFF )
VarSetCapacity( XorMask, 32*4, 0 )
system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
StringSplit c, system_cursors, `,
Loop %c0%
{
h_cursor := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
h%A_Index% := DllCall( "CopyImage", "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0
, "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
}
}
if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
$ = b ; use blank cursors
else
$ = h ; use the saved cursors
$ = h ; use the saved cursors

Loop %c0%
{
h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
}
}

7 (изменено: Malcev, 2013-06-25 01:22:11)

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

не работает SetCursorPos + CoordMode

Понятное дело, что не работает.
http://msdn.microsoft.com/en-us/library … 85%29.aspx
А чем вам MouseMove не угодил?
Хотите просто посылать клики без движения мыши используйте ControlClick.

8 (изменено: Hydrogenium, 2013-06-25 03:20:41)

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Irbis, спасиб

$ = h ; use the saved cursors
$ = h ; use the saved cursors

тут ошибка (повтор) ?

p.s.
есть также норм команда

SetDefaultMouseSpeed, 0

9

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Пожалуйста

Ekklesiast пишет:

тут ошибка (повтор) ?

Действительно, вторая строка совсем не к месту и лишает процедуру SystemCursor смысла работы ))

10

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Malcev пишет:

не работает SetCursorPos + CoordMode

Хотите просто посылать клики без движения мыши используйте ControlClick.

   А если в программе, в которую отправляется такой клик, не всегда происходит действие от ControlClick? Я бы сказал 1 раз из 5 срабатывает. Есть какой-то модифицированный вариант ControlClick? Или другая замена.


Irbis пишет:

Пожалуйста

Ekklesiast пишет:

тут ошибка (повтор) ?

Действительно, вторая строка совсем не к месту и лишает процедуру SystemCursor смысла работы ))

   Кто тут шутит? Оба?

11 (изменено: Irbis, 2014-04-30 17:03:25)

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Там первая строка - часть оператора if...else. Изучайте код, прежде чем делать выводы.

12

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Irbis пишет:

Там первая строка - часть оператора if...else. Изучайте код, прежде чем делать выводы.

  Я никаких выводов не делал. Я задал вопрос.
  Пытаюсь понять почему код сбоит. Курсор практически исправно исчезает, а вот клики не всегда проходят.

13

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Первая часть вопроса осталась без внимания. Повторю

Malcev пишет:

Хотите просто посылать клики без движения мыши используйте ControlClick.

   А если в программе, в которую отправляется такой клик, не всегда происходит действие от ControlClick? Я бы сказал 1 раз из 5 срабатывает. Есть какой-то модифицированный вариант ControlClick? Или другая замена.

14

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

У меня онлайн-приложение исправно запускалось скриптом с ControlClick, а где-то недели две назад ControlClick перестал срабатывать. Вот гадаю, то ли очередная подлянка от гуглхрома, то ли от приложения.

15 (изменено: Hydrogenium, 2014-07-10 07:25:35)

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Часто курсор мыши не возвращается в исходные координаты (saveX, saveY), в чём может быть причина ?

+ открыть спойлер

MouseMoveAndClick(x, y)
{     
    SetDefaultMouseSpeed, 0 
    SetMouseDelay, -1 
    SetBatchLines, -1     
    
    MouseGetPos saveX, saveY
    SystemCursor(0)
   
    WinGet, active_id, ID, A
    CoordMode, Mouse, Client
    Click %x%, %y%
    CoordMode, Mouse, Relative   
    
    MouseMove %saveX%, %saveY%
    SystemCursor(1)
}

SystemCursor(OnOff = 1) ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
    static AndMask, XorMask, $, h_cursor
    ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors
    ,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; blank cursors
    ,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; handles of default cursors
    
    if (OnOff = "Init" or OnOff = "I" or $ = "") ; init when requested or at first call
    {
        $ = h ; active default cursors
        VarSetCapacity( h_cursor,4444, 1 )
        VarSetCapacity( AndMask, 32*4, 0xFF )
        VarSetCapacity( XorMask, 32*4, 0 )
        system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
        StringSplit c, system_cursors, `,

        Loop %c0%
        {
            h_cursor := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% )
            h%A_Index% := DllCall( "CopyImage", "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 )
            b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0 , "int",32, "int",32, "uint",&AndMask, "uint",&XorMask )
        }
    }

    if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
        $ = b ; use blank cursors
    else
        $ = h ; use the saved cursors        

    Loop %c0%
    {
        h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 )
        DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% )
    }
}

16

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Даже добавил проверки, всё равно перемещается иногда не на место:

+ открыть спойлер

MouseMoveAndClick(x, y)
{   
    global
    
    if !flagMyClick
        return
    flagMyClick := false
    
    SetDefaultMouseSpeed, 0 ; Скорость. Возможные значения: от 0 (быстро) до 100 (медленно)
    SetMouseDelay, -1       ; Значение -1 для отсутствия паузы и 0 для наименьшей возможной паузы
    SetBatchLines, -1       ; Use SetBatchLines -1 to never sleep (i.e. have the script run at maximum speed)
    
    MouseGetPos saveX, saveY
    SystemCursor(0)
   
    WinGet, active_id, ID, A
    CoordMode, Mouse, Client
    Click %x%, %y%
    CoordMode, Mouse, Relative   
    
    MouseMove %saveX%, %saveY%
    
    count := 0
    Loop
    {
        MouseGetPos x0, y0
        if (x0 = saveX) and (y0 = saveY)
            break
        
        ;~ CoordMode, Mouse, Relative    
        MouseMove %saveX%, %saveY%
        sleep, 50
        
        count := count + 1
        if (count >=5)
            break
    }
    
    SystemCursor(1)
    flagMyClick := true
}

17

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

R::
{
        MouseMove, 972, 568, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1650, 304, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1167, 573, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1650, 304, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1357, 582, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1650, 304, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1557, 577, 0  R
Sleep 17
click, ("LButton")
Sleep 17
MouseMove, 1650, 304, 0  R
Sleep 17
click, ("LButton")
}
Как сделать мышку невидимой

18

Re: AHK: Как сделать невидимые (макс. быстрые) движения мыши ?

Илья, что это было?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder