Скрипт с единоразовым и зацикленным действиями

Помощь в написании скриптов
ZenRigel
Posts: 1
Joined: 20 Feb 2021, 20:43

Скрипт с единоразовым и зацикленным действиями

20 Feb 2021, 21:08

Добрый всем день! Хочу попросить вас о помощи в написании скрипта. Суть скрипта заключается в следующем: когда мы нажимаем определенную кнопку №1 (пусть это будет LAlt) сначала вводится единоразовое нажатие кнопки №2 (например, М), а затем, спустя какую то маленькую задержку (как если бы эти клавиши одну за другой нажимал бы вручную человек) запускается цикл нажатия кнопки №3 (пускай, Space) с задержкой между нажатиями в 100 ms, который, к тому же, повторяется до тех пор, пока зажата клавиша №1.
При этом повторятся должен только цикл с клавишей №3, вторая же - должна считываться только 1 раз, после нажатия кнопки №1. Плюс ко всему, нажатие кнопки №2 должно быть "естественным", т.е. таким, как будто мы просто вместо кнопки №1 нажимаем ее (возможно для этого нужно задать задержку или еще что то, я не знаю).
У меня есть пример скрипта, такой, каким я хочу его видеть, однако без одноразового нажатия клавиши №2, имеющий в себе лишь цикл. Вот он:

Code: Select all

*~$LAlt:: 
Sleep 100
Loop 
{ 
    GetKeyState, LAltState, LAlt, P 
    If LAltState = U 
        break  
    Sleep 1 
    Send, {Blind}{Space} 
} 
Return
[Mod edit: [code][/code] tags added.]

Возможно, его можно как то оптимизировать или просто поменять, я не знаю. Даю его с мыслью, что он может вам помочь. Если вы напишете другой, но функциональный, выполняющий поставленную задачу то я буду только рад. В общем - главное не форма, а что бы работал ;)
Всем заранее большое спасибо!)
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт с единоразовым и зацикленным действиями

21 Feb 2021, 17:13

Code: Select all

LAlt::
	Send m
	Sleep 250
	Loop
	{
		If (GetKeyState("LAlt", "P") == 0)
			Break
		Send {Space}
		Sleep 50
	}
	Return
1. Модификаторы для LAlt не нужны.
$ − в коде нет нажатия самого хоткея, так что модификатор, скорее всего, не нужен.
* − скорее всего, он тоже не нужен, но это зависит от поставленной задачи.
~ − действие клавиши сохраняется, из-за этого команда Send {Blind}{Space} будет нажимать Alt+Space, а системный автоповтор будет спамить нажатиями Alt. Не уверен, что это нужно.

2. Send m симулирует нажатие именно клавиши m, независимо от раскладки. Если нужно, чтобы раскладка учитывалась, можно написать или Send {m}, или через сканкод: Send {sc032}/Send {vk4D}.
github://oGDIp - GDI+ wrapper for AHK v1.1

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 42 guests