Действительно, есть несколько проблем, которые нужно исправить, хотя их исправление еще не гарантирует, что ваш код будет работать. ControlClick
ing всегда будет попаданием или промахом.
Итак, ваша самая большая проблема здесь
WinGet,b,,Title
Даже не знаю, что эта строка должна делать.
Конечно, вы пытаетесь ссылаться на переменную Title
, которую вы определили выше, и чтобы сделать это в устаревшем синтаксисе, вы должны заключить ее в %%
. Может быть, вы просто забыли.
Но даже с этим исправлением, я не знаю, почему используется эта команда.
Вы даже не указываете, какую подкоманду использовать, поэтому по умолчанию получается получить hwnd совпавшего window.
Если это действительно то, к чему мы стремимся, тогда вам нужно будет исправить параметр WinTitle ControlClick
, чтобы указать, что вы сопоставляете окно на основе его hwnd, например:
ControlClick, X%c1% Y%c2%, ahk_id %b%
Сопоставление windows на основе их hwnd на самом деле является лучшей практикой для сопоставления windows, но ваша реализация здесь сомнительна. Я думаю, это было даже случайно.
Тем не менее, позвольте мне исправить код для более разумной реализации сопоставления hwnd.
Я также избавлюсь от устаревшего синтаксиса и переключусь на более новый и лучший синтаксис выражений .
#SingleInstance, Force
#Persistent
$^q::
;ditched the legacy WinGetTitle command, and switched over to
;the WinActive function, its return value is the HWND of the
;matched window (active window)
ActiveWindowHWND := WinActive("A")
;getting the title as well, in case you really want to see it
;this part can be removed though
WinGetTitle, ActiveWindowTitle, % "ahk_id " ActiveWindowHWND
;concatenating strings and values by just separting them with a space
;and double quotes to escape a quote in an expression
;outer most quotes always just specify that we're writing a string
MsgBox, % "The active window's HWND is " ActiveWindowHWND " and its title is """ ActiveWindowTitle """"
;explicitly specifying that these long strings are actually strings
Inputbox, c1, , % "Coordinate of button you want to click on(x)"
Inputbox, c2, , % "Coordinate of button you want to click on(y)"
MsgBox, % c1 " , " c2
Inputbox, times, , % "How many times would you like to click?"
While (times > 0)
{
;specifying the NA option
;it's documented to improve reliablility, read more about it
;from the documentation
ControlClick, % "x" c1 " y" c2, % "ahk_id " ActiveWindowHWND, , , , NA
Sleep, 10500
times--
}
MsgBox, % "End"
return
Если вы совершенно не знакомы с новым и улучшенным синтаксисом выражений, вы можете вернуться к устаревшему синтаксису, он также будет работать.
Просто не забудьте добавить NA
вариант для элемента управления, хотя я бы рекомендовал, конечно, более новый синтаксис выражений.
Вот хорошая страница документации, чтобы начать работу:
https://www.autohotkey.com/docs/Language.htm