1

Тема: AHK: Проверка на зажатие клавиши без использования цикла

Вечер добрый, я уже давно пользуюсь проверкой зажатой клавиши путем обработки условия GetKeyState("vk01", "P") циком while:


While GetKeyState("vk01", "P") {
 ;действия при зажатой кнопке
}

Но хотелось бы узнать, возможно ли сделать проверку на зажатую клавишу без цикла и меток? К примеру делать проверку зажатой клавиши ( и делать необходимые действия ) в самовызывающейся функции через SetTimer раз в 5мс?

2

Re: AHK: Проверка на зажатие клавиши без использования цикла

Почему нет? Вам кто-то запрещает вызывать ф-ии вместо меток из SetTimer?
Другое дело что минимальный квант времени у SetTimer и Sleep — 10-12 мс, но на оф.форуме есть спец ф-ии для таких таймеров и sleep'ов.
И уж если нужна скорость, почему не так?:

~*vk01::MsgBox 0-o
~*vk01 Up::MsgBox o_0

3

Re: AHK: Проверка на зажатие клавиши без использования цикла

stealzy, увы но так не получится. Мой цикл встроен в экземпляр класса и действует только(!) в своем пространстве. И таких может быть 3 экземпляра

4

Re: AHK: Проверка на зажатие клавиши без использования цикла

McFree, ждал этого вопроса, правда я думал, что спросите как передать параметры ф-ии (Func("MyFn").Bind("Hi!")).

x := new My
Sleep 200
Return

Class My {
	__New() {
		timer := ObjBindMethod(this, "_Method", "Hi!")
		SetTimer % timer, -1
	}
	_Method(str) {
		MsgBox % str
	}
}

5

Re: AHK: Проверка на зажатие клавиши без использования цикла

Опять таки, не вижу причины не использовать прозрачные Hotkeys. Проверять зажатие клавиши в цикле это тупость.

x := new My
Return

Class My {
	__New() {
		this.LBState := GetKeyState("vk01", "P")

		d := ObjBindMethod(this, "_ChangeLBState", "LB Down", true)
		Hotkey ~*vk01, % d
		u := ObjBindMethod(this, "_ChangeLBState", "LB Up", false)
		Hotkey ~*vk01 Up, % u

		timer := ObjBindMethod(this, "_Timer")
		SetTimer % timer, 500
	}
	_ChangeLBState(str, state) {
		ToolTip % str
		this.LBState := state
	}
	_Timer() {
		ToolTip % "LBState := " this.LBState, 100, 100, 2
	}
}

6

Re: AHK: Проверка на зажатие клавиши без использования цикла

И переименуйте, пожалуйста, тему, потому что сейчас название никакого отношение к содержимому не имеет.

7

Re: AHK: Проверка на зажатие клавиши без использования цикла

stealzy пишет:

И переименуйте, пожалуйста, тему, потому что сейчас название никакого отношение к содержимому не имеет.

Не сказал бы, основной опрос так и остался

8

Re: AHK: Проверка на зажатие клавиши без использования цикла

McFree, кто-то насильно заставляет вас использовать цикл?