Тема: AHK: Сравнение значений строки состояния программы и операции с ними
Столкнулся со следующей проблемой:
Torrent := "AHK_exe utorrent.exe"
while WinExist(Torrent)
{
StatusBarGetText, DL, 4, %Torrent%
Gosub, Chek
sleep 5000
}
return
Chek:
Loop, parse, DL, %A_Tab%%A_Space%
{
If A_Index=2
speed := A_LoopField
If A_Index=3
tipspeed := A_LoopField
Gosub, Chek2
}
return
Chek2:
If tipspeed = "МБ/с"
SoundPlay, C:\Windows\Media\tada.wav
else
{
Gosub, Chek3
}
return
Chek3:
If speed < 300
{
действия по перезапуску закачки
}
return
Но скрипт работает некорректно. Начал прогонять участки скрипта для поиска ошибки и обнаружил следующее:
Для примера переменной DL присвоена строка
П: 1.5 КБ/с В: 5.3 МБ
, на деле вид строки тот же, числа разумеется различные. Делаю парсинг по пробелам и табуляциям и проверяю командой MsgBox:
DL := "П: 1.5 КБ/с В: 5.3 МБ"
F5::
Loop, parse, DL, %A_Tab%%A_Space%
{
MsgBox, %A_Index%: %A_LoopField%
}
return
В результате выдается 6 подстрок:
1: П:
2: 1.5
3: КБ/с
4: В:
5: 5.3
6: МБ
Проверка осуществляется по подстрокам №3 и №2. Тут надо оговориться почему:
Если значение переменной tipspeed = "МБ/с", то меня это устраивает, значит скорость нормальная. Если равенство нарушается, значит скачивание уже явно идет в КБ/с и мы отправляемся на проверку условия
If speed < 300
То есть если скорость закачки опустилась ниже 300Кб/с, то меня это не устраивает и выполняется нажатие кнопок управления для перезапуска закачки. По идее все должно работать, но нет, тогда проверяю таким образом:
DL := "П: 1.5 КБ/с В: 5.3 МБ"
F5::
Loop, parse, DL, %A_Tab%%A_Space%
{
If A_Index=2
speed := A_LoopField
If A_Index=3
tipspeed := A_LoopField
Gosub, Showmix
}
return
Showmix:
Send %tipspeed%
sleep 1000
Send %speed%
return
И тут шок, результат такой (для наглядности разделил пробелами):
КБ/с 1.5 КБ/с 1.5 КБ/с 1.5 КБ/с 1.5 КБ/с 1.5 КБ/с 1.5
Видно, что переменная tipspeed и speed были напечатаны по 6 раз каждая. Вопрос почему? Естественно на уме всплывает, что в результате парсинга получилось 6 подстрок, но ведь я четко указываю при каком круге цикла парсинга какое значение подстроки присваивать переменным:
Loop, parse, DL, %A_Tab%%A_Space%
{
If A_Index=2
speed := A_LoopField
If A_Index=3
tipspeed := A_LoopField
Подскажите, что я делаю не так? А то уже крыша едет и все бесит(