Это классическая c ошибка путаницы устаревшего синтаксиса с новым синтаксисом выражения.
В частности, эти две строки:
this_id := %A_LoopField%
ControlHwnd := %A_LoopField%
В устаревшем назначении (=
) вы действительно ссылаетесь на переменную, заключая ее в % %
, но в выражении (которое вы получаете, когда используете :=
), вы ссылаетесь на переменные, просто набирая ее:
this_id := A_LoopField
ControlHwnd := A_LoopField
Нет %
s.
Mis c stuff:
Метки горячих клавиш не нужно переносить в { }
s, если вы не знали.
И нет необходимости устанавливать
DetectHiddenText, On
DetectHiddenWindows, On
каждый раз, когда вы нажимаете горячую клавишу. Вы можете просто установить их один раз в верхней части вашего скрипта.
Вот ваш полный скрипт с использованием синтаксиса выражений.
В целом, я бы рекомендовал прекратить использовать устаревший синтаксис, это уже не 2008.
Вы можете начать изучение различий между унаследованным и синтаксисом выражений здесь
DetectHiddenText, On DetectHidden Windows, On
!t::
MsgBox, Starting
;parameters that are started with a % followed up by a space
;are automatically evaluated as expressions
;using it to just be able to quate straight text parameters
;could be considered overkill, but I'll just convert everything
;to expression syntax for the sake of the demonstration
;also, I'd change "test.txt - Notepad" to "ahk_exe notepad.exe"
WinGet, id, ControlListHwnd, % "test.txt - Notepad", , % "Program Manager"
Loop, Parse, id, `n
{
this_id := A_LoopField
WinGetClass, this_class, % "ahk_id " this_id
WinGetTitle, this_title, % "ahk_id " this_id
ControlHwnd := A_LoopField
ControlGetText, outputText, , % "ahk_id " ControlHwnd
MsgBox, 4, , % "All Controls`n id - " A_LoopField "`n Control Text - " outputText "`n Class - " this_class "`n Title - " this_title "`n `n Continue?"
IfMsgBox, No
break
}
MsgBox, % "Finished - " id " - end"
return