Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ahk скрип остановка

Лололошка Кравчук Ученик (101), открыт 3 часа назад
создал небольшой скрип и немогу понять как остановить его пока идет поиск цвета пикселя
код |
\/
#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
Дополнен 3 часа назад
а так-же почему-то он стал багатся и вместо нажатия кнопки alt он бьёт и поворачивает экран
Дополнен 3 часа назад
а еще он просто не нажимает пробел когда пиксель опустился до нужной точки
3 ответа
Свет Профи (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}` не срабатывает на момент, когда скрипт идет в цикле. Мы добавили задержки после каждого действия для более стабильной работы.
- **Баг с поворотом экрана**: Это может быть связано с тем, что скрипт ошибочно нажимает не те клавиши или применяет слишком много команд на экране. Убедитесь, что не задействованы дополнительные клавиши.

Пробуйте этот исправленный вариант и посмотрите, решает ли это вашу проблему! Если что-то ещё не так — пишите!
Степан Шабалков Знаток (400) 2 часа назад
чтобы остановить скрипт просто нажми клавишу home а про баги проверь настройки экрана и клавиш
Марта Дегодарова Знаток (337) 1 час назад
чтобы остановить скрипт просто нажми клавишу home а баги могут быть из-за других программ
Похожие вопросы