1 (изменено: Lexanni, 2012-12-09 23:31:19)

Тема: AHK: В #If не видно нажатия Shift'a повешенного на клавишу <>

В общем, суть скрипта такова:


. . . . .
vkC0:: ; клавиша | ` | Вкл/откл раскладки MSREJ
MsrejOn := !MsrejOn
return

*$vkE2::Send, {LShift Down} ;клавиша <>
vkE2 Up::Send, {LShift Up}

#If MsrejOn
   
; | Q |
    vk51::Send, {u+0063}     ; c
    +vk51::Send, {u+0043}   ; C
    
; | W |
    vk57::Send, {u+0066}     ; f
    +vk57::Send, {u+0046}   ; F
. . . . . . 

#If

Почему-то при запуске скрипта и включении раскладки MSREJ, не работают замены +vk51, +vk57 и т.п., а vk51, vk57 — работают. Без включения раскладки MSREJ, клавиша | <> |, без вопросов, работает как Shift. Забавно, что после того, как я открывают скрипт в SciTE4AutoHotkey, все начинает работать как надо, и +vk51 посылает большую букву! После закрытия SciTE4AutoHotkey, +vk51 все снова перестает работать.

Вроде бы версия AHK_L совсем новая - 1.1.09.00

Ребят, подскажите пожалуйста, как это победить?

2

Re: AHK: В #If не видно нажатия Shift'a повешенного на клавишу <>

Lexanni, ознакомься с этой темой, отредактируй заголовок.

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

3

Re: AHK: В #If не видно нажатия Shift'a повешенного на клавишу <>

Прошу прощения, поправил.

4

Re: AHK: В #If не видно нажатия Shift'a повешенного на клавишу <>

vkC0:: MsrejOn := !MsrejOn

#If MsrejOn
vk51:: Send, % MyShift() ? "{u+0043}" : "{u+0063}"
vk57:: Send, % MyShift() ? "{u+0046}" : "{u+0066}"
#If

MyShift()
{
return GetKeyState("vkE2", "P")
}

5 (изменено: Lexanni, 2012-12-10 21:10:49)

Re: AHK: В #If не видно нажатия Shift'a повешенного на клавишу <>

Спасибо! Как вариант, отметил для себя.
Вообще, тут все очень странно… Например, такой вариант работает:

. . . . .
vkC0:: ; клавиша | ` | Вкл/откл раскладки MSREJ
MsrejOn := !MsrejOn
return

*$vkE2::Send, {LShift Down} ;клавиша <>
vkE2 Up::Send, {LShift Up}

#If MsrejOn
   
; | Q |
    vk51::Send, c
    +vk51::Send, C
    
; | W |
    vk57::Send, f
    +vk57::Send, F
. . . . . . 

#If

Хотя, это работает только с буквами. С символами будет твориться какая-то хрень.

6 (изменено: Lexanni, 2012-12-14 15:02:09)

Re: AHK: В #If не видно нажатия Shift'a повешенного на клавишу <>

В общем, если кого интересует, в чем заключалась проблема:

В самом начале скрипта, был установлен рекомендуемый для новых скриптов режим Input для команды Send. Так вот, почему-то в блоке #If не было видно нажатия Shift'a, посылаемого с помощью метода Input, для посыла кодов Юникода. Заметил также проблемы с определением состояния конкретно левого или правого модификаторов (<! >^ и тп).

Проблема решалась посылом нажатий модификаторов с помощью команды SendEvent, либо удалением записи "SendMode Input", что делало Send псевдонимом SendEvent.

Но почему-то, когда был запущен SciTE4AutoHotkey проблем не было, и все работало. Видимо, мой скрипт брал параметры SendMode из этой проги.

Вот, для наглядности:

SendMode Input

vkC0:: ; клавиша | ` | Вкл/откл раскладки MSREJ
MsrejOn := !MsrejOn
return

*$vkE2::Send, {LShift Down} ;клавиша <>
vkE2 Up::Send, {LShift Up}

*$RShift::Send, {LCtrl Down}{RAlt Down}
RShift Up::Send, {LCtrl Up}{RAlt Up}

*vkBF::SendEvent, {RShift Down} ; это точка в русской раскладке
vkBF Up::SendEvent, {RShift Up}

<^>!vk38::Send, {u+002a}  ;  * — не сработает
^!vk36::Send, {U+005e}   ; ^ — сработает

#If MsrejOn
; | J |
    vk4A::Send, {u+006f} ; o — сработает
    <+vk4A::Send, {u+004f}   ; O — не сработает
    >+vk4A::Send, {u+004f}   ; O — сработает
    ^!vk4A::Send, {u+00f6}   ; ? — не сработает
#If

Вот такие дела…