1

Тема: AHK: временное зажатие мыши в координатах клика

Кнопки в одной программе плохо откликаются. Если просто нажимать мышью как обычно - не всегда нажимается кнопка. Для того чтобы она 100% нажималась нужно зажать мышкой по ней на пару миллисекунд.
Пытаюсь написать код, но получается не то, что нужно:


LButton::
     MouseGetPos, xpos, ypos
     Click down, %xpos%, %ypos%
     Sleep,  5000
     Click up, %xpos%, %ypos%
return

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

2

Re: AHK: временное зажатие мыши в координатах клика

Как программа реагирует на двойной клик?

Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: временное зажатие мыши в координатах клика

__Михаил__, хорошо что вы спросили. Плохо. Почему то файл скачивается с ошибкой, когда вместо зажатия делаю двойной клик.

4

Re: AHK: временное зажатие мыши в координатах клика

Команду Click используете некорректно, загляните в справку.

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

5

Re: AHK: временное зажатие мыши в координатах клика

Проверьте этот код:


LButton::
CoordMode, Mouse
MouseGetPos, xpos, ypos
KeyWait, %A_ThisHotkey%, U
Sleep, 100
ToolTip, % "[Зажим]" xpos ", " ypos, % xpos, % ypos
Send, {vk1 Down}
Sleep, 1000
Send, {vk1 Up}
MouseMove, % xpos, % ypos, 10
ToolTip
Return
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6 (изменено: CyberGudini, 2021-11-11 22:01:20)

Re: AHK: временное зажатие мыши в координатах клика

__Михаил__, Он зажимает - да, однако работает не так как надо. Левый клик почти ничего не открывает. Лишь в диспетчер задач каким-то образом заходит. Ни кнопка Windows, ни ярлыки на панели задач не открывает.
О, а вот это лишнее:


MouseMove, % xpos, % ypos, 10

Я прошу прощения я неправильно выразился вот тут:

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

Перефразирую на примере:
Рукой (не через скрипт) нажимаю обычным одиночным кликом на кнопку [Скачать] и сразу без задержки веду курсор к рядом открытому окну загрузки. Но когда я нажал на кнопку [Скачать], скрипт воспроизводит эффект временного зажатия левым кликом мыши на этом месте (на кнопке). В промежуток времени этого эффекта зажатия, я могу двигать курсор. Т.е. я надеялся сделать так, чтобы не нужно было задерживать курсор на том месте (на месте зажатия, иначе говоря на кнопке). Как будто появился курсор-клон, зажимающий кнопку [скачать], в то время как курсор-оригинал гуляет где хочет.
Но сейчас поэкспериментировав с командами AHK по управлению мыши, я предполагаю что такого эффекта невозможно добиться, да?
В принципе я не привереда, меня устроит и другой вариант - с задержкой курсора на кнопке. Но только я хочу чтобы мне пришлось нажимать как обычно, а скрипт бы зажимал и блокировал движение курсора пока происходит зажатие.
Я разобрал ваш код, без MouseMove и не считая отсутствия блокировки движения, он должен работать. Но что-то нетак.
А еще я так и не понял зачем вот эта часть:

KeyWait, %A_ThisHotkey%, U

7 (изменено: CyberGudini, 2021-11-12 00:08:31)

Re: AHK: временное зажатие мыши в координатах клика

__Михаил__ вариант с задержкой вот сделал сам кое-как:


^LButton::
	BlockInput MouseMove
	Send, {vk1 Down}
	Sleep, 3000
	Send, {vk1 Up}
	BlockInput MouseMoveOff
Return

А что касается первого варианта с эффектом курсора-клона... Все-таки так нельзя?

8

Re: AHK: временное зажатие мыши в координатах клика

Пытаюсь добить свой код, хочу чтобы работал только в окне IE:


RButton::
	IfWinActive, Clients - Internet Explorer
    {
         BlockInput MouseMove
	     Send, {vk1 Down}
	     Sleep, 3000
	     Send, {vk1 Up}
	     BlockInput MouseMoveOff
    }
Return

И он действительно зажимает левый клик только когда нахожусь в ie. Однако почему то когда я в др. окнах не работает контекстное меню вызываемое правым кликом. Ведь не должно. Почему так?

9

Re: AHK: временное зажатие мыши в координатах клика

А в чём вопрос-то? Не работает, и не должно, как вы и сказали.

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

10 (изменено: CyberGudini, 2021-11-12 17:51:17)

Re: AHK: временное зажатие мыши в координатах клика

teadrinker  Не дописал:"Не должно так быть." Я это хотел сказать.
Вы говорите что все правильно, но почему?
Еще раз, мне нужно, чтобы:
1) в окне ie правый клик мыши заменялся на левый с задержкой зажатия.   Это работает. Отлично.
2) во всех других окнах  Windows правый клик как обычно вызывал контекстное меню.
Это не работает. В других окнах контекстное меню правым кликом не вызывается. Вообще ничего не происходит. Каким то образом скрипт влияет на нормальную работу Windows. А такого не должно быть. Ведь я поставил условие, чтобы он работал только в ie:


IfWinActive, Clients - Internet Explorer

11

Re: AHK: временное зажатие мыши в координатах клика

Но условие выполняется уже после срабатывания горячей клавиши. Оно говорит, что делать в окне IE, а для остальных срабатывает Return, то-есть просто бездействие.
Вам нужно изучить директивы #If, #IfWinActive.

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

12

Re: AHK: временное зажатие мыши в координатах клика

CyberGudini

AHK установил полный перехват ПКМ, естественно в других окнах ничего не произойдёт, ведь так настроен скрипт.

Вот пример как установить перехват в конкретном окне: (блокнот)

#IfWinActive, ahk_exe Notepad.exe

RButton::
ToolTip, ПКМ нажат в блокноте.
KeyWait, %A_ThisHotkey%, U
Sleep, 100
ToolTip
Return

#If
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

13 (изменено: CyberGudini, 2021-11-12 22:01:45)

Re: AHK: временное зажатие мыши в координатах клика

teadrinker я понял. Само событие по нажатию горячих клавиш меняет стандартный функционал Windows. Раньше я об этом не задумывался, т.к. сочетания моих горячих клавиш не пересекались с Виндовскими. А теперь подругому.
Почитаю то что вы посоветовали.

14 (изменено: CyberGudini, 2021-11-12 22:01:32)

Re: AHK: временное зажатие мыши в координатах клика

__Михаил__ отлично как попробую, отпишусь.

15

Re: AHK: временное зажатие мыши в координатах клика

CyberGudini, ок, только точки верните, пожалуйста.

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

16

Re: AHK: временное зажатие мыши в координатах клика

__Михаил__ ваш пример отлично работает! Спасибо!
Переделал под себя:


#IfWinActive, Ninite Zoom Unattended Silent Installer and Updater - Internet Explorer

RButton::
	BlockInput MouseMove
	Send, {vk1 Down}
	Sleep, 3000
	Send, {vk1 Up}
	BlockInput MouseMoveOff
Return

#If