1 (изменено: Николай2010, 2010-11-21 21:30:10)

Тема: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Здравствуйте!

Наверняка многим  надоело постоянно переключаться между русским и английским языком, чтобы набрать фигурные {} или квадратные [] скобки, знаки больше-меньше <> и другие символы.

Хочу сделать, чтобы набор цифр и специальных символов на клавиатуре работал как на мобильном телефоне.

Это нужно для того, чтобы не переключаться на английский язык для набора @, квадратных [] и фигурных {} скобок, знаков больше-меньше <> и других.

Пример на клавише 2:
Один раз нажал кнопку - это цифра 2
2 раза нажал - это @
3 раза нажал - это "
(см. клавиатуру)

Есть стандартный скрипт в документации, но он сначала определяет количество нажатий, а потом срабатывает. В результате не видно какой символ будет набран. А в мобильных телефонах, мы видим символы, которые набираем.

Подскажите, какие изменения нужно внести в скрипт, чтобы было как на мобильных телефонах?

; Example #3: Detection of single, double, and triple-presses of a hotkey. This
; allows a hotkey to perform a different operation depending on how many times
; you press it:
#c::
if winc_presses > 0 ; SetTimer already started, so we log the keypress instead.
{
    winc_presses += 1
    return
}
; Otherwise, this is the first press of a new series. Set count to 1 and start
; the timer:
winc_presses = 1
SetTimer, KeyWinC, 600 ; Wait for more presses within a 400 millisecond window.
return

KeyWinC:
SetTimer, KeyWinC, off
if winc_presses = 1 ; The key was pressed once.
{
SendInput 1 
;   Run, c:\  ; Open a folder.
}
else if winc_presses = 2 ; The key was pressed twice.
{
SendInput {Backspace}2
;    Run, c:\windows  ; Open a different folder.
}
else if winc_presses > 2
{
SendInput {Backspace}3
;    MsgBox, Three or more clicks detected.
}
; Regardless of which action above was triggered, reset the count to
; prepare for the next series of presses:
winc_presses = 0
return

2

Re: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Николай2010 пишет:

Пример на клавише 2:
Один раз нажал кнопку - это цифра 2
2 раза нажал - это @
3 раза нажал - это "

А если нужно набрать несколько двоек подряд?

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

3 (изменено: Николай2010, 2010-11-22 03:43:20)

Re: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Тогда можно набирать цифры на цифровой клавиатуре, если она есть.

Или набирать просто цифры с нажатым Shift или CapsLock

Или сделать наоборот, чтобы эта функция работала с нажатым Shift или включенным CapsLock

Получилось 3 варианта

Мне больше нравится средний. Позвольте объяснить почему.

Значит стандартный режим, как в примере выше.
Если Вам нужно набрать много цифр (калькулятор), то рекомендую включить CapsLock.
    Если -- быстро набрать несколько цифр, то придержать Shift.
          А если совсем лень что-то нажимать, то не спеша набрать все нужные цифры с включенной функцией.

4

Re: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Мне, честно говоря, не нравится ни один. По второму можно так:

#UseHook
Delay = 500      ; задержка

*2::
*3::
*4::
; и т. д.
   if GetKeyState("Shift", "P")
   {
      Send, % SubStr(A_ThisHotkey, 2)
      Return
   }

   if (A_PriorHotkey = A_ThisHotkey && A_TimeSincePriorHotkey < Delay)
   {
      mod := Mod(++i, 3)
      Send, {BackSpace}
      if A_ThisHotkey = *2
         SendRaw, % mod = 1 ? "@" : mod = 2 ? """" : 2
      else if A_ThisHotkey = *3
         SendRaw, % mod = 1 ? "#" : mod = 2 ? "№"  : 3
      else if A_ThisHotkey = *4
         SendRaw, % mod = 1 ? "$" : mod = 2 ? "`;" : 4
      ; и т. д.
   }
   else
   {
      Send, % SubStr(A_ThisHotkey, 2)
      i = 0
   }
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Николай2010, 2010-11-22 15:23:58)

Re: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Teadrinker, Спасибо огромное!!!
Без Вас я никогда не сделал бы его!
Когда запрограммирую все остальные клавиши, выложу скрипт в этой теме.
Спасибо ещё раз!

6 (изменено: Николай2010, 2010-11-23 02:59:34)

Re: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Результаты работы. Полный скрипт
Этот скрипт переносит все спецсимволы на цифровые клавиши.

Спасибо за помощь!
Теперь в русской раскладке доступны все специальные символы:
квадратные [] и фигурные скобки {},
знак доллара $,
знаки больше-меньше <>,
решетка #
собака @

http://clip2net.com/clip/m20333/thumb640/1290466586-clip-15kb.png

#UseHook
#SingleInstance force
Delay = 700      ; задержка

*1::
*2::
*3::
*4::
*5::
*6::
*7::
*8::
*9::
*0::
*-::
*=::
*\::
*`::
; и т. д.
   if GetKeyState("Shift", "P")
   {
      Send, % SubStr(A_ThisHotkey, 2)
      Return
   }

   if (A_PriorHotkey = A_ThisHotkey && A_TimeSincePriorHotkey < Delay)
   {
      mod := Mod(++i, 3)
      Send, {BackSpace}
      if A_ThisHotkey = *1
         SendRaw, % mod = 1 ? "!" : mod = 2 ? "'" : 1
      else if A_ThisHotkey = *2
         SendRaw, % mod = 1 ? """" : mod = 2 ? "@" : 2
      else if A_ThisHotkey = *3
         SendRaw, % mod = 1 ? "№" : mod = 2 ? "#"  : 3
      else if A_ThisHotkey = *4
         SendRaw, % mod = 1 ? "`;" : mod = 2 ? "$" : 4
      else if A_ThisHotkey = *5
         SendRaw, % mod = 1 ? "%" : mod = 2 ? "{" : 5
      else if A_ThisHotkey = *6
         SendRaw, % mod = 1 ? ":" : mod = 2 ? "^" : 6
      else if A_ThisHotkey = *7
         SendRaw, % mod = 1 ? "?" : mod = 2 ? "&" : 7
      else if A_ThisHotkey = *8
         SendRaw, % mod = 1 ? "*" : mod = 2 ? "}" : 8
      else if A_ThisHotkey = *9
         SendRaw, % mod = 1 ? "(" : mod = 2 ? "[" : 9
      else if A_ThisHotkey = *0
         SendRaw, % mod = 1 ? ")" : mod = 2 ? "]" : 0
      else if A_ThisHotkey = *-
         SendRaw, % mod = 1 ? "_" : mod = 2 ? "<" : "-"
      else if A_ThisHotkey = *=
         SendRaw, % mod = 1 ? "+" : mod = 2 ? ">" : "="
      else if A_ThisHotkey = *\
         SendRaw, % mod = 1 ? "|" : mod = 2 ? "/" : "\"
      else if A_ThisHotkey = *``
         SendRaw, % mod = 1 ? "~" : mod = 2 ? "ё" : "``"
      ; и т. д.
   }
   else
   {
      Send, % SubStr(A_ThisHotkey, 2)
      i = 0
   }
   Return

7 (изменено: monsoon, 2013-07-12 15:32:01)

Re: AHK: Одинарное и двойное и тройное нажатие на клавиатуре - не работают

Если в поиске выбрать раздел Autohotkey и набрать "тройное", в одном из двух результатов выдается сообщение от Николай за  2010 2010-11-21 19:28:46 из этой темы.
При открытии темы его нет и указано, что всего д.б. 6 сообщений. Как можно посмотреть остальные?