1 (изменено: alexii, 2011-08-09 18:14:41)

Тема: AHK: обработка +Numpad0

ОС: Win7 рус
Версия AutoHotkey_L -  32б, юникод.
Необходимо выполнять Copy\Paste клавишами Ctrl\Shift + Ins(0) не зависимо от раскладки клавиатуры и от состояния NumLock.

^NumpadIns:: Send, ^{vk43} ; Ctrl+c
^Numpad0:: Send, ^{vk43} ; Ctrl+c
+NumpadIns:: Send, ^{vk56} ; Ctrl+v
+Numpad0:: Send, ^{vk56} ; Ctrl+v - это не работает полностью :(

Первые три строки выполняются правильно, а четвёртая только при NumLock = Off. При NumLock = On четвёртая строка выполняет только переключение режимов редактирования "вставить\заменить".
Операторы #UseHook и #InstallKeybdHook не помогли (а может, и не должны были помочь).

2

Re: AHK: обработка +Numpad0

Vitt, код на форуме оформляется тэгом «code». Я исправил Ваш пост.

3

Re: AHK: обработка +Numpad0

Так вроде работает

$NumpadIns::Send % GetKeyState("Numlock", "T") ? "^{VK56}" : "{NumpadIns}"

4

Re: AHK: обработка +Numpad0

InFlames пишет:

Так вроде работает

Большое спасибо - в основном работает, хотя и выкидывает "коленца" . Например, в Опере при намлоке, при вставке текста в окно редактирования этого сообщения происходит переход на страницу http://www.google.ru/search? Но, надеюсь с помощью этого сайта разобраться в деталях.
Если можете, пожалуйста, ответьте на несколько вопросов:
1. В скрипте не упоминается (кроме "^{VK56}") кнопка Shift, хотя она отрабатывает как надо. Как Shift работает при  "T" =0 и как вообще тогда запускается эта строка скрипта?
2. В начале строки стоит $ , в описании говорится: "Префикс $ является эквивалентом использования команды #UseHook в тексте скрипта где-нибудь выше определения этой горячей клавиши." Но, я использовал #UseHook и безрезультатно . Зачем тогда этот знак ($)здесь?
3. Имеется ли формальное описание языка вроде БНФ?

5 (изменено: InFlames, 2011-08-10 21:23:56)

Re: AHK: обработка +Numpad0

1) NumpadIns:
1. Если Намлок включен, то нажатие Shift+numpad0 равно NumpadIns
2. Если Намлок выключен, то нажатие Numpad0 равно NumpadIns

2) $ нужен, что бы хоткей мог запускать сам себя и не зацикливаться.

3) Справка нужна или что? Справка есть на русском языке на этом сайте.

Вот тот же код в более понятном варианте

$NumpadIns::
   If GetKeyState("Numlock", "T")
      Send ^{VK56}
   else
      Send {NumpadIns}
return

Сейчас проверил, работает так:
- если намлок выключен, то все работает нормально
- если намлок включен, то, если зажать шифт, и нажать numpad0 несколько раз, то срабатывает только первое нажатие, вместо остальных нажатий вставляется 0
Поэтому, что бы нормально работало при включенном намлоке, то необходимо отжимать шифт после каждого нажатия: шифт вниз, нампад0 вниз-вверх, шифт вверх.

6

Re: AHK: обработка +Numpad0

InFlames пишет:

1) NumpadIns:
1. Если Намлок включен, то нажатие Shift+numpad0 равно NumpadIns
2. Если Намлок выключен, то нажатие Numpad0 равно NumpadIns

Посмотрите, пожалуйста, на строку с кодом: нет анализа нажатия Shift, хотя реально она работает - это-то и не понятно!

InFlames пишет:

2) $ нужен, что бы хоткей мог запускать сам себя и не зацикливаться.

Это вроде сброса прерывания от клавиатуры?

InFlames пишет:

3) Справка нужна или что? Справка есть на русском языке на этом сайте.

Нет - надеялся найти формальное описание языка: например, работа с % описана в нескольких разделах и, значит, надо читать весь "Документация по программе AutoHotkey"

InFlames пишет:

Вот тот же код в более понятном варианте

$NumpadIns::
   If GetKeyState("Numlock", "T")
      Send ^{VK56}
   else
      Send {NumpadIns}
return

Это-то как раз понятно.

InFlames пишет:

Поэтому, что бы нормально работало при включенном намлоке, то необходимо отжимать шифт после каждого нажатия: шифт вниз, нампад0 вниз-вверх, шифт вверх.

И это в том числе я имел ввиду, когда писал про "коленца"

7

Re: AHK: обработка +Numpad0

Опера срабатывает от вминания кнопок а не от отпускания, как нормальные проги, поэтому она быстрее данного скрипта.