1 (изменено: serzh82saratov, 2017-03-11 05:08:42)

Тема: AHK: Запуск Hotkey с помощью Send

Так срабатывает если нажать пробел на клавиатуре, и от команды Send {Space} посланной из другого скрипта:


Hotkey, Space, MyLabel    
Return

MyLabel:
	MsgBox %A_ThisHotkey%
	Return

Так только с клавиатуры:


#If 1
#If

Hotkey, If, 1
Hotkey, Space, MyLabel    
Hotkey, If
Return

MyLabel:
	MsgBox %A_ThisHotkey%
	Return

Получается с If отваливается реакция на нефизический посыл клавиш.

Баг?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

2

Re: AHK: Запуск Hotkey с помощью Send

Тут вопрос, скорее, почему Space срабатывает.
Такой пример вызывает срабатывание:

Send {Space}
Space:: MsgBox, % A_ThisHotkey

А такой нет:

Send {Enter}
Enter:: MsgBox, % A_ThisHotkey

SendLevel:

By default, hook hotkeys and hotstrings ignore keyboard and mouse events generated by any AutoHotkey script

#If 1
#If

Hotkey, If, 1
Hotkey, Space, MyLabel    
Hotkey, If
SendLevel, 1
Send {Space}
Return

MyLabel:
	MsgBox %A_ThisHotkey%
	Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: Запуск Hotkey с помощью Send

teadrinker пишет:

Тут вопрос, скорее, почему Space срабатывает.

Повезло с примером.

Какая то странная штука, если таких 2 скрипта запустить, то Hotkey не видит когда с таймера посыл, но реагирует на нажатие 1.


#If 1
#If

Hotkey, If, 1
Hotkey, Enter, MyLabel    
Hotkey, If    
Return

MyLabel:
	MsgBox, , , %A_ThisHotkey%, 0.3
	Return  
#InputLevel, 1

SetTimer, Send, 1000

1::
Send:
	Send {Enter}
	return

А если внутри себя, то не видит когда нажимаем 1, но с таймера видит:


#If 1
#If
SendLevel, 1
Hotkey, If, 1
Hotkey, Enter, MyLabel    
Hotkey, If
SetTimer, Send, 1000
Return

MyLabel:
	MsgBox, , , %A_ThisHotkey%, 0.3
	Return

1::
Send:
	Send {Enter}
	return	

Где такое описано...

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

4 (изменено: serzh82saratov, 2017-03-11 04:29:04)

Re: AHK: Запуск Hotkey с помощью Send

serzh82saratov пишет:

Какая то странная штука, если таких 2 скрипта запустить, то Hotkey не видит когда с таймера посыл, но реагирует на нажатие 1.

По поводу этого, если добавить SendLevel то и на таймер реагирует:

#If 1
#If

Hotkey, If, 1
Hotkey, Enter, MyLabel    
Hotkey, If    
Return

MyLabel:
	MsgBox, , , %A_ThisHotkey%, 0.1
	Return 

SendLevel, 1
#InputLevel, 1
SetTimer, Send, 1000

1::
Send:
	Send {Enter}
	return

Из справки с переводчиком мне не понятно чем это обусловлено.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

5

Re: AHK: Запуск Hotkey с помощью Send

И главное, как добится такой же работы не указывая SendLevel и InputLevel в скриптах посылающих нажатия?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

6

Re: AHK: Запуск Hotkey с помощью Send

Как добиться без SendLevel и InputLevel не знаю, а по остальному — SendLevel изменяет level только текущей ветки, а таймер создаёт (псевдо)новую. SendLevel влияет на отправку, InputLervel — на получение. И SendLevel должен быть выше, чем InputLervel, чтобы принимать генерируемые клавиатурные события.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK: Запуск Hotkey с помощью Send

teadrinker пишет:

InputLervel — на получение

Если убрать InputLevel, в отправляющем, то принимающий перестаёт принимать через нажатия, причём перенос InputLevel в принимающий ни на что не влияет.
Это если я тебя правильно понял про "влияет на получение", то есть InputLevel по идее должен иметь значение только в первом скрипте, в том где Hotkey.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

8 (изменено: serzh82saratov, 2017-03-11 05:05:49)

Re: AHK: Запуск Hotkey с помощью Send

Если перенести SendLevel в метку, то InputLevel не нужен, но всё таки непонятно влияние наличия InputLevel, когда SendLevel первой строкой (как в 4 посте).


SetTimer, Send, 1000

1::
Send:
	SendLevel, 1
	Send {Enter}
	return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

9

Re: AHK: Запуск Hotkey с помощью Send

teadrinker пишет:

SendLevel влияет на отправку, InputLervel — на получение.

Не совсем правильно. SendLevel влияет на отправку из текущей ветки, #InputLervel — из всего скрипта. Если событие сгенерировано — level у принимающей ветки должен быть ниже, чем у отправляющей.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

10

Re: AHK: Запуск Hotkey с помощью Send

Принимающий:

Enter:: MsgBox, , , %A_ThisHotkey%, 0.1

Если отправляющий

1:: Send {Enter}

то сообщение не появится, а если отправляющий

#InputLevel 1
1:: Send {Enter}

или

1::
   SendLevel, 1
   Send {Enter}
   Return

то появится.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

11

Re: AHK: Запуск Hotkey с помощью Send

teadrinker пишет:

SendLevel влияет на отправку из текущей ветки, #InputLervel — из всего скрипта.

Тогда получается что эти два кода должны работать идентично?


SetTimer, Send, 1000

1::
Send:
	SendLevel, 1
	Send {Enter}
	return

#InputLevel, 1
SetTimer, Send, 1000

1::
Send:
	Send {Enter}
	return

Но с InputLevel не принимаются посылы по таймеру.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

12

Re: AHK: Запуск Hotkey с помощью Send

Принимающий:


#If 1
#If

Hotkey, If, 1
Hotkey, Enter, MyLabel    
Hotkey, If    
Return

MyLabel:
	MsgBox, , , %A_ThisHotkey%, 0.1
	Return 
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

13

Re: AHK: Запуск Hotkey с помощью Send

serzh82saratov пишет:

Но с InputLevel не принимаются посылы по таймеру.

#InputLevel — это, как я понял, директива только для горячих клавиш.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

14 (изменено: Malcev, 2017-03-13 01:52:06)

Re: AHK: Запуск Hotkey с помощью Send

serzh82saratov пишет:

Получается с If отваливается реакция на нефизический посыл клавиш.

teadrinker пишет:

Тут вопрос, скорее, почему Space срабатывает.
Такой пример вызывает срабатывание:

Send {Space}
Space:: MsgBox, % A_ThisHotkey

А такой нет:

Send {Enter}
Enter:: MsgBox, % A_ThisHotkey

Просто при ремаппинге энтера или использовании директивы #if включается клавиатурный хук.
А с ним надо указывать SendLevel:

By default, hook hotkeys and hotstrings ignore keyboard and mouse events generated by any AutoHotkey script

https://autohotkey.com/docs/commands/SendLevel.htm
Так работает:

SendLevel 1
Send {Enter}
Enter:: MsgBox, % A_ThisHotkey

Либо можно заменить enter на vk, тем самым отключить использование клавиатурного хука:

Send {Enter}
vkD:: MsgBox, % A_ThisHotkey

Specify for nn the hexadecimal virtual key code of a key. This rarely-used method also prevents certain types of hotkeys from requiring the keyboard hook.

https://autohotkey.com/docs/KeyList.htm

15

Re: AHK: Запуск Hotkey с помощью Send

Просто при ремаппинге энтера или использовании директивы #if включается клавиатурный хук.

Думал об этом, но не нашёл, где это сказано явно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

16

Re: AHK: Запуск Hotkey с помощью Send

Я проверял так:

ListHotkeys
pause
enter::
vkD::
space::
#if 1
a::
#if