1

Тема: AHK: InputHook повторное использование

Пытаюсь перехватить некоторые клавиши. Установить перехват и выключить - проблем нет, а вот повторно включить - не выходит.


; F2 - Установить / Включить / Выключить хук клавиатуры:
; Hook.InProgress	Текущее состояние перехвата.


F2::
If (Hook.InProgress = 0)
{
 MsgBox,0,,Запуск,1
 Hook.Start()
 Return
}
Else If (Hook.InProgress = 1)
{
 MsgBox,0,,Остановка,1
 Hook.Stop()
 Return
}

Else
{
 MsgBox,0,,Установка,1
 Hook := InputHook("V")
 Hook.KeyOpt("{All}", "N")
 Hook.OnKeyDown := Func("AnyKey")
 Hook.Start()
}
Return


AnyKey(Hook, vk, sc)
{
 ToolTip % GetKeyName(Format("vk{:X}sc{:X}", vk, sc)) "`n" Format("vk{:X} sc{:X}",vk,sc),-1000,-1000
}

2 (изменено: stealzy, 2020-10-08 04:36:36)

Re: AHK: InputHook повторное использование

Стоп это не остановка:

F2::
	If Not Hook.InProgress {
		MsgBox,,,Вкл,1
		Hook := InputHook("V")
		Hook.KeyOpt("{All}", "N")
		Hook.OnKeyDown := Func("AnyKey")
		Hook.Start()
	} Else {
		MsgBox,,,Выкл,1
		Hook.Stop()
		ToolTip
	}
Return

AnyKey(Hook, vk, sc){
	ToolTip % GetKeyName(Format("vk{:X}sc{:X}", vk, sc)) "`n" Format("vk{:X} sc{:X}",vk,sc),-1000,-1000
}
0xFFFFFF
0xFF0000
0xFFFFFF

3

Re: AHK: InputHook повторное использование

stealzy

Странно, на Питоне было так - один раз назначил перехват и хоть сколько включай / выключай.

4

Re: AHK: InputHook повторное использование

Можете ещё обработчик обнулять.


Hook := InputHook("V")
Hook.KeyOpt("{All}", "N")
Hook.Start()

F2::
	If !Hook.OnKeyDown {
		Hook.OnKeyDown := Func("AnyKey")
		MsgBox,,,Вкл,1

	} Else {
		Hook.OnKeyDown := ""
		ToolTip
		MsgBox,,,Выкл,1 
	}
Return

AnyKey(Hook, vk, sc){
	ToolTip % GetKeyName(Format("vk{:X}sc{:X}", vk, sc)) "`n" Format("vk{:X} sc{:X}",vk,sc),-1000,-1000
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

5

Re: AHK: InputHook повторное использование

serzh82saratov

Тоже интересный вариант, я бы не пробовал даже обработчик менять, предполагая, что он назначается только при установке хука.
Так получается 'Hook.Stop()' полностью не нужен в коде.

Почему же тогда при остановке нельзя заново запустить - обработчик сбрасывается?
Явно что-то упустил при чтении перевода справки.

6

Re: AHK: InputHook повторное использование

Ну это автор так решил, по мне тоже логичнее что Stop останавливает а не удаляет хук вообще. Тут почему то Hook.Stop() выполняет роль Hook := "".

офф:

__Михаил__ пишет:

на Питоне было так

А зачем вам AutoHotkey, если на питоне пишете?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v2004, AutoHotkey_L v1.1.33.02 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

7

Re: AHK: InputHook повторное использование

serzh82saratov

Раньше немного изучал на смарте, мне знаний хватало только на нём и делать программы. На компе Питон что-то не зашёл, версия была другая, модули другие, как пользоваться не знаю, изучать заново - лень, забросил короче. Нашёл сразу альтернативу - АХК. Синтаксис хороший, перехват клавиш (самое основное требование) выполняет очень удобно, вариантов применения большое, правда некоторые заморочки тоже имеются. Тем более можно написать код дома и применить на работе для автоматизации рутины.