C/C++

Нужна помощь в AHK скрипте..

дело такого:
скрипт работает так, что через определенные тайминги дублирует пробел несколько раз, мне нужно переделать его, чтобы он ВСЕГДА долбил пробел несколько раз. И при этом, чтобы при нажатии клавиши, скрипт переставал работать, а после повторного нажатия заново работал.
сам скрипт -

*~$Space::
Sleep 1
Loop
{
GetKeyState, SpaceState, Space, P
If SpaceState = U
break
Sleep 1
Send, {Blind}{Space}
}

кто разбирается, помогите прошу, я уже совсем запутался. Нужно, чтобы при нажатии клавиши U скрипт приостанавливал работу, а при повторном нажатии возвращался в работу. И подскажите, можно ли сделать , чтобы при 2х клавишах скрипт приостанавливался, к примеру нажал U, он приостановился и так же наоборот, и к другой клавише, допустим O он так-же приостанавливался и при повторном нажатии продолжал работу (можно и без этого, главное, чтобы при U он приостанавливался)

очень прошу понимающих в этом деле помочь....
 *~$Space:: 
while GetKeyState("Space", "P")
{
Send, {Blind}{Space}
Sleep 1
}
Этот скрипт будет продолжать повторяться, пока клавиша Space нажата. Каждый раз, когда скрипт повторяется, он отправляет символ пробела

~$Space::
Paused := 0
while GetKeyState("Space", "P")
{
if Paused
break
Send, {Blind}{Space}
Sleep 1
}
Этот скрипт будет проверять переменную Paused в начале цикла. Если переменная равна 1, то скрипт приостанавливается. Если переменная равна 0, то скрипт работает

Саша Кобелев
Саша Кобелев
1 900
Лучший ответ
Саша Кобелев
 Чтобы при повторном нажатии клавиши U скрипт возобновлял работу, нужно добавить следующий код в конец скрипта: 

if GetKeyState("U", "P")
Paused := 0
Саша Кобелев
 Вот как будет выглядеть полный измененный скрипт с поддержкой клавиши O: 

Paused := 0
*~$Space::
while GetKeyState("Space", "P")
{
if Paused
break
Send, {Blind}{Space}
Sleep 1
}
if GetKeyState("U", "P")
Paused := 0
if GetKeyState("O", "P")
Paused := 1
Саша Кобелев
 isActive := false 

; Настройки для задержки между пробелами и количества пробелов
delayBetweenSpaces := 50 ; Задержка в миллисекундах между пробелами
numberOfSpaces := 5 ; Количество пробелов

$Space::
if (isActive) {
; Если скрипт активен и нажата клавиша пробела, посылаем несколько пробелов
SendSpaces(numberOfSpaces)
} else {
; Если скрипт не активен, активируем его
isActive := true
}
return

; Обработка клавиши "U" для включения/выключения скрипта
$u::
isActive := !isActive
return

SendSpaces(count) {
Loop, % count {
Send, {Space}
Sleep, % delayBetweenSpaces
}
}
Для реализации требуемого функционала, вы можете использовать переменную для отслеживания состояния работы скрипта и обработчик событий keydown для переключения состояния работы скрипта.

Пример скрипта:


isRunning := False

*~$Space::
isRunning := True
While (isRunning) {
SendInput {Space 3}
Sleep 1000
}
return

$u::
isRunning := not isRunning
return



В данном скрипте:

- Переменная `isRunning` инициализируется значением `False`, которое показывает, что скрипт не выполняется.
- При нажатии клавиши "Space", переменная `isRunning` устанавливается в `True` и запускается цикл, который отправляет 3 пробела каждую секунду до тех пор, пока `isRunning` равно `True`.
- При нажатии клавиши "u" переменная `isRunning` переключается между `True` и `False`, останавливая или возобновляя выполнение скрипта.

Если вы хотите добавить функционал для переключения состояния с помощью двух клавиш, вы можете модифицировать код следующим образом:


isRunning := False

*~$Space::
isRunning := True
While (isRunning) {
SendInput {Space 3}
Sleep 1000
}
return

$u::
$o::
isRunning := not isRunning
return



В этой версии скрипта переменная `isRunning` будет переключать состояние выполнения, как только нажата клавиша "u" или "o".
Равиль Ахмедьянов извините, я немного не так сформулировался..помогите, прошу)

при зажатии пробела, он должен спамить много раз, если пробел не зажат, скрипт не работает, как это можно реализовать ? вы очень хорошо понимаете в этом..