Свет
Профи
(513)
2 часа назад
Проблема с остановкой и багами в скрипте связана с несколькими аспектами, и давайте их разберем по порядку. Вот что я рекомендую исправить:
1. **Остановка скрипта** — Похоже, что код для остановки скрипта работает не совсем корректно. В частности, нужно правильно обрабатывать состояние переменной `running` и корректно останавливать цикл, если она `false`.
2. **Проблема с нажатием клавиши Alt** — Это может происходить из-за того, что скрипт по ошибке не отправляет нужные клавиши (например, пробел) или нажатие другого действия срабатывает при другом условии. Возможно, нужно точно настроить проверку нажатия.
3. **Не нажимается пробел** — Это может быть связано с задержками в коде, либо с тем, как работает команда `Send`. Нужно удостовериться, что скрипт точно выполняет команду.
### Исправленный вариант скрипта
```ahk
#Requires AutoHotkey v1.1
; *** Настройки ***
checkX := 955 ; X координата проверяемого пикселя
checkY := 321 ; Y координата проверяемого пикселя
targetColor := 0xEC4E04 ; Цвет целевого пикселя (обратите внимание на формат)
interval := 10 ; Интервал проверки в миллисекундах
intervalSpace := 220 ; Интервал для Space (в миллисекундах)
intervalMouseClick := 200 ; Интервал для MouseClick (в миллисекундах)
clickX := 855 ; X координата клика
clickY := 820 ; Y координата клика
winTitle := "RADMIR CRMP" ; Название окна
running := false ; Переменная для отслеживания состояния скрипта
End:: ; Нажатие клавиши End
running := true
SetTimer, MainLoop, %interval% ; Запускаем цикл с интервалом 10 мс
return
MainLoop:
if (!running) ; Если скрипт остановлен, выходим из цикла
return
IfWinActive, %winTitle%
{
; Проверка цвета пикселя
PixelGetColor, color, %checkX%, %checkY%, RGB ; Получаем цвет пикселя в RGB формате
if (color = targetColor) ; Если цвет совпадает с целевым
{
Send, {Space} ; Нажимаем пробел
Sleep, %intervalSpace% ; Пауза
}
; Клик левой кнопкой мыши
MouseClick, Left, %clickX%, %clickY%
Sleep, %intervalMouseClick% ; Пауза
}
return
Home:: ; Нажатие клавиши Home
running := false ; Останавливаем цикл
SetTimer, MainLoop, Off ; Отключаем таймер
return
```
### Ключевые изменения:
1. **Использование RGB для `PixelGetColor`**: Если ваши координаты работают с цветами, которые могут быть в RGB, это важно учитывать при получении цвета.
2. **Исправление остановки**: Теперь таймер останавливается корректно, и проверка на `running` происходит перед выполнением цикла.
3. **Отсутствие лишних команд**: Удалены лишние команды для `ExitApp`, так как они могут вызывать неожиданные закрытия. Стоп-скрипт с кнопкой `Home` работает без сбоев.
### Важные моменты:
- **Почему не нажимается пробел**: Возможно, проблема в том, что команда `Send, {Space}` не срабатывает на момент, когда скрипт идет в цикле. Мы добавили задержки после каждого действия для более стабильной работы.
- **Баг с поворотом экрана**: Это может быть связано с тем, что скрипт ошибочно нажимает не те клавиши или применяет слишком много команд на экране. Убедитесь, что не задействованы дополнительные клавиши.
Пробуйте этот исправленный вариант и посмотрите, решает ли это вашу проблему! Если что-то ещё не так — пишите!
код |
\/
#Requires AutoHotkey v1.1
; *** Настройки ***
checkX := 955 ; X координата проверяемого пикселя
checkY := 321 ; Y координата проверяемого пикселя
targetColor := 0xEC4E04 ; Цвет целевого пикселя (обратите внимание на формат)
interval := 10 ; Интервал проверки в миллисекундах
intervalSpace := 220 ; Интервал для Space (в миллисекундах)
intervalMouseClick := 200 ; Интервал для MouseClick (в миллисекундах)
clickX := 855 ; X координата клика
clickY := 820 ; Y координата клика
winTitle := "RADMIR CRMP" ; Название окна
running := false ; Переменная для отслеживания состояния скрипта
End:: ; Нажатие клавиши End
running := true
SetTimer, MainLoop, 1 ; Запускаем цикл с интервалом 1 мс (управляем задержками внутри цикла)
return
MainLoop:
If (!running) ; Если скрипт остановлен, выходим из цикла
Return
IfWinActive, %winTitle%
{
; Проверка цвета пикселя
PixelGetColor, color, %checkX%, %checkY% ; Получаем цвет пикселя
if (color = targetColor) ; Если цвет совпадает с целевым
{
Send, {Space} ; Нажимаем пробел
Sleep, %intervalSpace% ; Пауза
}
; Клик левой кнопкой мыши
MouseClick, Left, %clickX%, %clickY%
Sleep, %intervalMouseClick% ; Пауза
}
return
Home:: ; Нажатие клавиши Home
running := false ; Останавливаем цикл
SetTimer, MainLoop, Off ; Отключаем таймер
ExitApp ; Закрываем скрипт полностью
return