1

Тема: AHK: Использование клавиш с модификаторами в input.

Из руководства.
Хотя комбинации с модификаторами, вроде Control-C (^c), не поддерживаются, но с версии v1.0.14 поддерживаются в качестве завершающих знаки, требующие удержания клавиши Shift, а именно символы пунктуации, такие как ?!:@&{}. Указание кода виртуальной клавиши, наподобие {vkFF}, также допустимо. Это полезно в тех редких случаях, когда клавиша не имеет имени и при нажатии не производит никакого видимого символа. Её виртуальный код может быть определён методом, описанным в конце статьи Список клавиш и кнопок мыши/джойстика.

Собственно вопрос, как использовать клавиши с модификаторами типа ctrl-f, и др. Примеров использования не нашел.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

2

Re: AHK: Использование клавиш с модификаторами в input.

Назначить горячую клавишу типа ^F или ~^F.

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

3

Re: AHK: Использование клавиш с модификаторами в input.

teadrinker Объясните разницу пожалуйста? Я как понимаю должно срабатывать например ctrlf. Просто покажите пример как с этим работать.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

4

Re: AHK: Использование клавиш с модификаторами в input.

Опция "M" же есть.

5

Re: AHK: Использование клавиш с модификаторами в input.

svoboden, а разве там не только с модификатором Ctrl? Сейчас с телефона, не могу поверить.

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

6 (изменено: svoboden, 2017-07-25 15:13:02)

Re: AHK: Использование клавиш с модификаторами в input.

teadrinker, вроде только на ctrl откликается. Вот пример с ctrl+f:

Transform, CtrlF, Chr, 6
Input, OutputVar, L1 M
if OutputVar = %CtrlF%
    MsgBox, Вы нажали Control-F.
ExitApp

7

Re: AHK: Использование клавиш с модификаторами в input.

Viruzober, такой вариант годится?

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

8

Re: AHK: Использование клавиш с модификаторами в input.

teadrinker Да вполне хорош. В руководстве подобный был. А с другими модификаторами не выйдет? Сейчас буду пробовать.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

9

Re: AHK: Использование клавиш с модификаторами в input.

svoboden А не получится сделать клавиши с модификатором в andkey?

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

10

Re: AHK: Использование клавиш с модификаторами в input.

Viruzober, так:

Transform, CtrlF, Chr, 6
Input, OutputVar, M, {Enter}
if OutputVar = %CtrlF%
    MsgBox, Вы нажали Control-F.
ExitApp

11

Re: AHK: Использование клавиш с модификаторами в input.

svoboden И звените, я похоже туплю. Я имел в виду сделать обработку alt и shift. Я только что пробовал с alt, не получилось.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

12 (изменено: svoboden, 2017-07-25 17:47:20)

Re: AHK: Использование клавиш с модификаторами в input.

Viruzober, так для левого alt будет: {lalt}. В справке же написано, что клавиши с модификаторами, не поддерживаются.

13

Re: AHK: Использование клавиш с модификаторами в input.

svoboden Я имел в виду что-то такое.

Transform, lAltF, Chr, 6
Transform, CtrlF, Chr, 6
Transform, CtrlC, Chr, 3
Input, OutputVar, L1 M
if OutputVar = %CtrlF%
    MsgBox, Вы нажали Control-F.
else if OutputVar = %CtrlC%
    MsgBox, Вы нажали Control-C.
else if OutputVar = %lAltF%
    MsgBox, Вы нажали ShiftF.
ExitApp
win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

14 (изменено: svoboden, 2017-07-25 19:41:31)

Re: AHK: Использование клавиш с модификаторами в input.

Viruzober, кажется, там только на ctrl можно добавить нажатия клавиш. Может, кто-нибудь другой точно скажет, не знаю.

15

Re: AHK: Использование клавиш с модификаторами в input.

Viruzober, так я не пойму, вам нужно отловить какие-то конкретные клавиши с модификаторами, или вообще любые?

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

16

Re: AHK: Использование клавиш с модификаторами в input.

teadrinker Отловить нужно любые клавиши с модификаторами ctrl, shift, alt. Но этого сделать как я понимаю не получится. Ну или не через input. Буду дальше руководство ковырять.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

17 (изменено: teadrinker, 2017-07-26 03:06:10)

Re: AHK: Использование клавиш с модификаторами в input.

Можно так через хук:

CoordMode, ToolTip
hHookKeybd := DllCall("SetWindowsHookEx"
   , Int, WH_KEYBOARD_LL := 13
   , Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
   , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
   , UInt, 0, Ptr)
OnExit( Func("Exit").Bind(hHookKeybd) )
Return

Esc::ExitApp

Exit(hHookKeybd)  {
   DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
}

LowLevelKeyboardProc(nCode, wParam, lParam)  {
   static lpData, size := VarSetCapacity(lpData, 16, 0)

   DllCall("RtlMoveMemory", Ptr, &lpData, Ptr, lParam, Ptr, size)
   timer := Func("EventHandling").Bind(wParam, &lpData)
   SetTimer, % timer, -10
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}

EventHandling(wp, lp)  {
   static oMsg := {0x100: "WM_KEYDOWN", 0x101: "WM_KEYUP", 0x104: "WM_SYSKEYDOWN", 0x105: "WM_SYSKEYUP"}
        , oMembers := ["vk", "sc", "flags", "time"]
        , oFlagOffsets := {LLKHF_EXTENDED: 0, LLKHF_LOWER_IL_INJECTED: 1, LLKHF_INJECTED: 4, LLKHF_ALTDOWN: 5, LLKHF_UP: 7}
      
        , oModifiersSC := { LCtrl: 0x1D , LShift: 0x2A , LAlt: 0x38
                          , RCtrl: 0x11D, RShift: 0x136, RAlt: 0x138 }
        , oModifiersPressed := {}

   msg := wp
   for k, v in oMembers
      %v% := NumGet(lp + (k - 1)*4, "UInt")

   for k, v in oFlagOffsets
      %k% := (flags >> v) & 1

   sc |= LLKHF_EXTENDED << 8

   for k, v in oModifiersSC  {
      if (sc = v && Modifier := true)  {
         if LLKHF_UP
            oModifiersPressed.Delete(k)
         else
            oModifiersPressed[k] := true
      }
   }
   
   if !(Modifier || LLKHF_UP)  {
      for k in oModifiersPressed
         ModifiersString .= (A_Index = 1 ? "" : " + ") . k
      
      if ModifiersString
         ToolTip, % "Вы нажали " . ModifiersString . " + " . GetEngKeyName(sc)
   }
}

GetEngKeyName(sc)  {
   static Cyr := "ёйцукенгшщзхъфывапролджэячсмитьбю,.""№;?:"
        , Lat := "``qwertyuiop[]asdfghjkl;'zxcvbnm,.?/@#$&^"
   KeyName := GetKeyName( "sc" . Format("{:X}", sc) )

   threadId := DllCall("GetWindowThreadProcessId", Ptr, WinExist("A"), UInt, 0, Ptr)
   landId := DllCall("GetKeyboardLayout", Ptr, threadId, Ptr) & 0xFFFF
   if ( landId = 0x419 && (n := InStr(Cyr, KeyName)) )
      KeyName := SubStr(Lat, n, 1)
   Return RegExReplace(KeyName, "^(.)", "$U1")
}

Не думаю, что сильно прояснилось.

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

18 (изменено: Viruzober, 2017-12-02 20:58:14)

Re: AHK: Использование клавиш с модификаторами в input.

teadrinker О то что надо, спасибо огромное. Вроде вьехал.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.