1

Тема: AHK: Управление персонажем в неактивном окне

Добрый вечер.
Написал скрипт для управления персонажем в неактивном окне.
Скрипт работает, но иногда происходит залипание shift'а, которое мешает управлению, и не смог настроить включение/отключение скрипта на одну клавишу.
Просьба помочь в решении данных проблем, а так же хотел узнать, возможна ли более правильная реализация скрипта с другими командами AHK.

\::
loop
{
SetKeyDelay, 0
GetKeyState, state, A
if state = D
	{
	ControlSend, , {A Down}, BlueStacks whrvari
	ControlSend, , {A Down}, BlueStacks feinwau
	ControlSend, , {A Down}, BlueStacks kilindiam
	}
else
	{
	ControlSend, , {A up}, BlueStacks whrvari
	ControlSend, , {A up}, BlueStacks feinwau
	ControlSend, , {A up}, BlueStacks kilindiam
	}
GetKeyState, state, d
if state = D
	{
	ControlSend, , {d Down}, BlueStacks whrvari
	ControlSend, , {d Down}, BlueStacks feinwau
	ControlSend, , {d Down}, BlueStacks kilindiam
	}
else
	{
	ControlSend, , {d up}, BlueStacks whrvari
	ControlSend, , {d up}, BlueStacks feinwau
	ControlSend, , {d up}, BlueStacks kilindiam
	}
GetKeyState, state, w
if state = D
	{
	ControlSend, , {w Down}, BlueStacks whrvari
	ControlSend, , {w Down}, BlueStacks feinwau
	ControlSend, , {w Down}, BlueStacks kilindiam
	}
else
	{
	ControlSend, , {w up}, BlueStacks whrvari
	ControlSend, , {w up}, BlueStacks feinwau
	ControlSend, , {w up}, BlueStacks kilindiam
	}
GetKeyState, state, s
if state = D
	{
	ControlSend, , {s Down}, BlueStacks whrvari
	ControlSend, , {s Down}, BlueStacks feinwau
	ControlSend, , {s Down}, BlueStacks kilindiam
	}
else
	{
	ControlSend, , {s up}, BlueStacks whrvari
	ControlSend, , {s up}, BlueStacks feinwau
	ControlSend, , {s up}, BlueStacks kilindiam
	}

GetKeyState, state, F12
if state = D
    	break
}
return

2

Re: AHK: Управление персонажем в неактивном окне

global BlueStacksWindowsTitle := ["whrvari", "feinwau", "kilindiam"]
#IfWinActive BlueStacks
~*a::blueSendDown("a")
~*a up::blueSendUp("a")
#IfWinActive

blueSendUp(key) {
	SetKeyDelay -1
	for n, title in BlueStacksWindowsTitle
		ControlSend,, {Blind}{%key% DownR}, BlueStacks %title%
}

blueSendUp(key) {
	SetKeyDelay -1
	for n, title in BlueStacksWindowsTitle
		ControlSend,, {Blind}{%key% Up}, BlueStacks %title%
}

3

Re: AHK: Управление персонажем в неактивном окне

stealzy, cпасибо.

но теперь у меня не получается остановить скрипт, иконка становится красной, но передача хоткеев продолжается в неактивные окна.
Пробовал следующей командой:

f12::Pause

4

Re: AHK: Управление персонажем в неактивном окне

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

5

Re: AHK: Управление персонажем в неактивном окне

stealzy, спасибо. Suspend работает.
При длительном использовании скрипта появляется ошибка.
Увеличение #MaxHotkeysPerInterval окно с ошибкой убирает, но иногда персонаж в неактивном окне "залипает" и начинает двигаться только в одну сторону, пока не нажмешь еще раз на эту же клавишу.
Подскажите, каким образом это можно исправить?

Post's attachments

ошибка.png
ошибка.png 3.28 kb, 2 downloads since 2019-07-01 

You don't have the permssions to download the attachments of this post.

6 (изменено: stealzy, 2019-07-02 10:24:12)

Re: AHK: Управление персонажем в неактивном окне

Добавьте SetWinDelay 0, и DownR замените на Down.
По умолчанию задержка 100 мс, значит в последнее окно нажатие идет с задержкой в треть секунды.