1 (изменено: Lanceg, 2013-08-06 21:31:53)

Тема: AHK: Включение/выключение цикла на одну кнопку.

Вот такой простой код, как сделать так, чтобы при нажатии на T, цикл запускался, при повторном нажатии Т - переставал работать и возвращался в исходную, и так далее.
Можно конечно сменить запуск скрипта с Т на Y, но возможно ли чтобы все эти действия выполнялись лишь одной T?
Вкл/выкл нужно именно на одну кнопку, желательно ту же что и в цикле используется. Две я и сам могу сделать.

vk54::
Loop
{
    Send, {vk54 down}{vk54 up}
    Random, Rand, 10, 1000
    sleep % Rand + 100
}
return
+ открыть спойлер

В сети нашел этот код:

SC105:: ; по нажанию клавиши "Messenger"
SoundSet, +1, Microphone, mute ; переключить микрофон в противоположное положение включен/выключен
return 

Но он не работает, как более 'тонко' сделать код для микрофона?

2 (изменено: Irbis, 2013-08-06 18:29:23)

Re: AHK: Включение/выключение цикла на одну кнопку.

Первое. При нажатии на хоткей скрипт не "возвращается к началу", а встает на паузу, что в данном случае роли не играет:

pause
Loop
{
    Send, {vk54 down}{vk54 up}
    Random, Rand, 10, 1000
    sleep % Rand + 100
}
return
$vk54:: pause

Насчет микрофона не могу подсказать, пример верный, в справке практически такой же, но он и у меня не работает.

3 (изменено: Lanceg, 2013-08-06 18:47:05)

Re: AHK: Включение/выключение цикла на одну кнопку.

Через паузу и суспенд не вариант, я еще несколько макросов и кучу хоткеев использую одновременно с ним, необходим переключатель на одну кнопку, вот пример для двух кнопок:

t::
off := 1
Loop
{
    Send, {vk54 down}{vk54 up}
    Random, Rand, 10, 1000
    sleep % Rand + 100

If off = 0
Break
}
return

y::
off := 0
Return

4 (изменено: serzh82saratov, 2013-08-06 19:46:21)

Re: AHK: Включение/выключение цикла на одну кнопку.

Включение/выключение цикла на одну кнопку

1 вариант:

#MaxThreadsPerHotkey 2 
        
vk54::
    T := !T
    While T 
        ToolTip % A_TickCount  
    return

2 вариант, если MaxThreadsPerHotkey мешает:

vk54::
    T := !T 
    SetTimer, Loop, -1
    return

Loop:
    While T
        ToolTip % A_TickCount  
    return

Регулировка микрофона.

Во первых нельзя задавать 2 вопроса в теме, тем более в шапке, учтите на будущее. Если у вас 7, то задайте вопрос тут - AHK: Управление звуком в windows 7, если нет то поискать нужную тему либо создать свою. По счёт этого есть решения. Регулировка микрофона из заголовка убрать.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: serzh82saratov, 2013-08-06 21:29:53)

Re: AHK: Включение/выключение цикла на одну кнопку.

Также если не нужна высокая частота повторений, можно иммитировать цикл:


vk54::
    T := !T
Loop: 
    ToolTip % A_TickCount
    If !T
        Return
    SetTimer, Loop, -1
    Return

упд: Лучше так:

vk54:: SetTimer, Loop, % (T := !T) ? 1 : "Off" 

Loop: 
    ToolTip % A_TickCount  
    return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: Lanceg, 2013-08-06 21:45:05)

Re: AHK: Включение/выключение цикла на одну кнопку.

Мне необходима гибкость скрипта, сделать код вкл/выкл. именно вот для такого цикла:


Loop
{
    Send, {vk54 down}{vk54 up}
    Random, Rand, 10, 1000
    sleep % Rand + 100
}

Скрипты выше не подходят вроде бы, либо подходят, но я не вижу сходства с работой моего цикла, мне не нужны постоянные повторения, нужно в пределах интервала рандома задать эти нажатия кнопки Т, к тому же было бы неплохо если сам скрипт вкл и выкл на эту же кнопку Т, но можно сделать и на другую, главное чтобы была задействована клавиша Т и выполнялся цикл который я показал, либо аналогичный или схожий, с возможностью динамической настройки.
Моих знаний в кодинге не хватает для построения такого кода, я дилетант

7

Re: AHK: Включение/выключение цикла на одну кнопку.

Скрипты выше не подходят

В любом примере замените ToolTip % A_TickCount на своё:

{
    Send, {vk54 down}{vk54 up}
    Random, Rand, 10, 1000
    sleep % Rand + 100
}

и всё подойдёт.

неплохо если сам скрипт вкл и выкл на эту же кнопку Т

Не скрипт, а подпрограмма.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8 (изменено: Lanceg, 2013-08-06 22:25:20)

Re: AHK: Включение/выключение цикла на одну кнопку.

Забыл уточнить одну маленькую деталь, из-за которой, кажется, все не работает так как нужно:

Loop
{
    Send, {t down}{t up}
    Random, Rand, 10, 1000
    sleep % Rand + 100
}

Пытаюсь подстроить луп под разный код выше, безрезультатно.
Напишу еще раз, как должно это происходить:
После физического нажатия T, запускается цикл имитации нажатия этой кнопки с рандомной задержкой, при повторном физическом нажатии на Т, подпрограмма перестает исполнять цикл, до повторного запуска.
Если такой вариант невозможен, можно заменить запуск и выключение подпрограммы на другую кнопку, например Y.

9

Re: AHK: Включение/выключение цикла на одну кнопку.

А ну да, там же sleep. Тогда так:


vk54::
    T := !T
Loop:  
    Send, {t down}{t up}
    Random, Rand, 10, 1000
    ToolTip % Rand ; для наглядности
    sleep % Rand + 100 
    If !T
        Return
    SetTimer, Loop, -1
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 (изменено: serzh82saratov, 2013-08-06 22:31:41)

Re: AHK: Включение/выключение цикла на одну кнопку.

Если паузу можно заменить на таймер, то лучше так:

vk54::
    T := !T
Loop:  
    Send, {t down}{t up}
    Random, Rand, 10, 100 
    ToolTip % Rand ; для наглядности
    SetTimer, Loop, % T ? "-" Rand + 100 : "Off"  
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Включение/выключение цикла на одну кнопку.

Теперь все работает, большое спасибо ^^

12

Re: AHK: Включение/выключение цикла на одну кнопку.

Хотя во втором примере достаточно просто заменить:


vk54::
    T := !T 
    SetTimer, Loop, -1
    return

Loop:
    While T
    {
        Send, {vk54 down}{vk54 up}
        Random, Rand, 10, 10 
        sleep % Rand + 100
    }
    return

и тут будет именно цикл, так что лучше такой вариант.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Включение/выключение цикла на одну кнопку.

#MaxThreadsPerHotkey 2

Необходимо для всех этих подпрограмм использовать?

14 (изменено: serzh82saratov, 2013-08-06 23:13:19)

Re: AHK: Включение/выключение цикла на одну кнопку.

MaxThreadsPerHotkey лучше вообще не использовать. В посте 12 решение без него.

ап: SetTimer как бэ заменяет MaxThreadsPerHotkey для нужной подпрограммы. см. 4 пост.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Включение/выключение цикла на одну кнопку.

Представляю вашему вниманию чудо-костыли в похожем коде, но для других целей:

offon:=0
p::
if offon=1
{
offon:=0
}
else if offon=0
{
offon:=1
}

if offon=1
{
x := (A_ScreenWidth / 2)-1
y := (A_ScreenHeight / 2)-1
w = 3
h = 3
Color = 0xFF0000
WS_EX_TRANSPARENT := 0x20
WS_EX_LAYERED := 0x80000
Gui,2: +AlwaysOnTop -Caption +ToolWindow +LastFound
Gui,2: Color, % Color
Gui,2: Show, x%x% y%y% w%w% h%h% NA
WinSet, ExStyle, % "+" WS_EX_LAYERED|WS_EX_TRANSPARENT
}
else if offon=0
{
Gui,2: Destroy
}
return

m::ExitApp

16

Re: AHK: Включение/выключение цикла на одну кнопку.

Rio

1) Код оформляется тегом 'code'.
2) 'но для других целей' - и каких? Что должен делать ваш чудо код?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101