Тема: AHK: Параллельно (одновременно) выполнить несколько действий по хоткею
Что делает скрипт сейчас? По нажатию левой кнопки мыши, зажимается левая кнопка мыши и мышь перемещается в определенном направлении. Когда я отпускаю левую кнопку мыши, мышь двигаться перестает и левая кнопка мыши отпускается. Еще с помощью Alt+стрелка можно изменять значения XAxis и YAxis и соответственно менять направление и скорость движения мыши по нажатию левой кноки мыши.
Что нужно чтобы делал скрипт? Мне нужно, чтобы по нажатию левой кнопки мыши, начиналось зацикливание нажатия левой кнопки мыши и параллельно с этим начинала двигаться мышь в определенном направлении.
Вот скрипт:
;SetTitleMatchMode 3 ; Название окна должно полностью совпадать
;#IfWinActive , XXX,
; Считываются параметры из NR.ini
IniRead , XAxis, NR.ini, Main, XAxis, %XAxis%
IniRead , YAxis, NR.ini, Main, YAxis, %YAxis%
timer = 10
PauseOn = 0
SleepTime = 25
; После нажатия левой кнопки мыши, зажимается левая кнопка мыши и мышь начинает перемещаться.
*$lButton::
Send {LButton Down}
LOOP
{
DllCall("mouse_event", UInt, 0x1
, Int, XAxis
, Int, -YAxis
, UInt, 0
, Int, 0)
Sleep, SleepTime
GetKeyState, state, lButton, P
if state = U
break
}
Return
LButton Up::
{
Send {LButton Up}
}
Return
; Звуковое оповещение при Suspend'e скрипта
*$XButton1::
Suspend
If not SuspendOn
{
SuspendOn = 1
SoundPlay, C:\Windows\Media\Windows Logoff Sound.wav
}
Else
{
SuspendOn = 0
SoundPlay, C:\Windows\Media\Windows Logon Sound.wav
}
Return
; Дальше идет регулировка значений XAxis и YAxis и вывод текущего значения на экран. Это нужно для того, чтобы указывать направление движения мыши, когда жмется левая кнопка мыши
!Right::
!Left::
XAxis := 80
XAxis_Step = 1 ; шаг регулировки
vol_DisplayTime_XAxis = 1500
vol_TransValue_XAxis = 500
vol_CW_XAxis = 000000
vol_Thick_XAxis = 10
vol_PosX := 1996
vol_PosY := 1108
vol_Width = 50
vol_BarOptionsMaster_XAxis = 1:B1 R0-299 ZH%vol_Thick_XAxis% ZX8 ZY4 W%vol_Width% X%vol_PosX% Y%vol_PosY% CW%vol_CW_XAxis%
IniRead , XAxis, NR.ini, Main, XAxis, %XAxis%
XAxis += (InStr(A_ThisHotkey, "!Left") ? -XAxis_step : XAxis_step )
IniWrite , %XAxis%, NR.ini, Main, XAxis
vol_ShowBars_XAxis:
vol_Master := XAxis
if vol_Master <> 80
{
vol_Colour = F19720
vol_Text = %XAxis%
}
Else
{
vol_Colour = red
vol_Text = %XAxis%
}
IfWinNotExist, Rapidfire
{
WS_EX_TRANSPARENT := 0x20
WS_EX_LAYERED := 0x80000
Gui +AlwaysOnTop
Progress , %vol_BarOptionsMaster_XAxis% CT%vol_Colour% CB%vol_Colour%, , %vol_Text%, Rapidfire
WinSet, Transparent, %vol_TransValue_XAxis%, Rapidfire
WinSet, ExStyle, % "+" WS_EX_LAYERED|WS_EX_TRANSPARENT, Rapidfire
Gui -Caption +ToolWindow
}
Progress, 1:%vol_Master% , , %vol_Text%
SetTimer, vol_BarOff_XAxis, %vol_DisplayTime_XAxis%
return
vol_BarOff_XAxis:
SetTimer, vol_BarOff_XAxis, off
Progress, 1:Off
return
!Up::
!Down::
YAxis := 80
YAxis_Step = 1 ; шаг регулировки
vol_DisplayTime_YAxis = 1500
vol_TransValue_YAxis = 500
vol_CW_YAxis = 000000
vol_Thick_YAxis = 10
vol_PosX := 1996
vol_PosY := 1108
vol_Width = 50
vol_BarOptionsMaster_YAxis = 1:B1 R0-299 ZH%vol_Thick_YAxis% ZX8 ZY4 W%vol_Width% X%vol_PosX% Y%vol_PosY% CW%vol_CW_YAxis%
IniRead , YAxis, NR.ini, Main, YAxis, %YAxis%
YAxis += (InStr(A_ThisHotkey, "!Down") ? -YAxis_step : YAxis_step )
IniWrite , %YAxis%, NR.ini, Main, YAxis
vol_ShowBars_YAxis:
vol_Master := YAxis
if vol_Master <> 80
{
vol_Colour = F19720
vol_Text = %YAxis%
}
Else
{
vol_Colour = red
vol_Text = %YAxis%
}
IfWinNotExist, Rapidfire
{
WS_EX_TRANSPARENT := 0x20
WS_EX_LAYERED := 0x80000
Gui +AlwaysOnTop
Progress , %vol_BarOptionsMaster_YAxis% CT%vol_Colour% CB%vol_Colour%, , %vol_Text%, Rapidfire
WinSet, Transparent, %vol_TransValue_YAxis%, Rapidfire
WinSet, ExStyle, % "+" WS_EX_LAYERED|WS_EX_TRANSPARENT, Rapidfire
Gui -Caption +ToolWindow
}
Progress, 1:%vol_Master% , , %vol_Text%
SetTimer, vol_BarOff_YAxis, %vol_DisplayTime_YAxis%
return
vol_BarOff_YAxis:
SetTimer, vol_BarOff_YAxis, off
Progress, 1:Off
return
Я могу сделать что-то вроде этого:
*$lButton::
LOOP
{
Send {LButton Down}
Sleep, 10
Send {Lbutton Up}
Sleep, 10
DllCall("mouse_event", UInt, 0x1
, Int, XAxis
, Int, -YAxis
, UInt, 0
, Int, 0)
Sleep, SleepTime
GetKeyState, state, lButton, P
if state = U
break
}
Return
Но это будет не параллельно, а последовательно, а мне нужно именно параллельно. Может есть идеи, как все-таки сделать параллельно?
До меня не доходит, как все-таки сделать параллельно.