1

Тема: AHK: Пока активен CapsLock, зажата клавиша RAlt

Доброго времени суток, уважаемые форумчане!
Помогите пожалуйста сделать так, чтобы при первом нажатии на CapsLock залипала клавиша RAlt, и соответственно, при повторном нажатии она отлипала. А также по возможности избавиться от естественного действия клавиши CapsLock - печати букв в верхнем регистре. И еще было бы просто здорово сохранить индикацию активности клавиши CapsLock... ну или по возможности заменить чем-нибудь, чтобы не нужно было методом тыка проверять текущее ее состояние. Заранее спасибо!

2

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

*CapsLock::
Send, % (CapsOn:=!CapsOn) ? "{RAlt Down}":"{RAlt Up}"
SetNumLockState, % CapsOn ? "On":"Off"
KeyWait, CapsLock
Return

3 (изменено: Lexanni, 2011-10-15 12:03:29)

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Все прекрасно работает, огромное спасибо!

Добавлено спустя пару часов...

Думаю, Grey, Вы немножко ошиблись в своем коде... ибо при таком раскладе лампочка CapsLock не загоралась. Рискну Вас поправить:

~CapsLock::
Send, % (CapsOn:=!CapsOn) ? "{RAlt Down}":"{RAlt Up}"
SetCapsLockState, % CapsOn ? "On":"Off"
KeyWait, CapsLock
return

И все равно, большое спасибо! Без Вас я бы очень долго разбирался!

4

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Lexanni пишет:

...избавиться от естественного действия клавиши CapsLock - печати букв в верхнем регистре.

Да нет, не ошибся, с SetCapsLockState верхнего регистра не избежать.

5 (изменено: Lexanni, 2011-10-15 16:29:44)

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Прошу простить мое невежество... Я все пытался сделать методом тыка и вроде бы нашел то, что хотел. Наверное, лучше всего рассказать, то, что я пытался сделать. Я использую программу Type it Easy для набора разных спецсимволов. Когда я зажимаю клавишу AltGr я активирую как бы новый слой клавиатуры с этими самыми спецсимволами. А еще я немножко помешан на клавиатурном наборе... и недавно у меня появилось стойкое желание "подтащить" поближе к основному ряду цифры - поставить их на клавиши "фвыамтолдж" в слой, активируемый клавишей AltGr. Но чтобы набирать эти цифры, мне не удобно постоянно держать палец на этой клавише. Вот я и подумал, чтобы неплохо было бы перетащить клавишу AltGr на CapsLock и сделать так, чтобы она залипала при первом нажатии и отлипала при повторном. С помощью Вас, Grey я этого практически добился... но пока что есть несколько "но": в таком режиме не работает Backspace и пробел. Да и клавиша CapsLock ведет себя странно: такое ощущение, что у нее появилось 3 режима а не 2... или она залипает и не отлипает при повторном нажатии. Отлипает только после нажатия на AltGr.
Собственно, почему думал реализовать еще один слой клавиатуры через Type it Easy? Потому, что в ней очень удобно и наглядно создавать свои слои, модифицируемые с помощью AltGr. Да и потому, что только это у меня и получилось придумать, читая этот форум и документацию к AHK.
Почему именно клавиша CapsLock? Потому, что на ней у меня есть лампочка-индикатор, которая бы подсказала мне, что клавиша активирована.

Исходя из выше написанного, осмелюсь поинтересоваться, можно ли сей бред реализовать только силами AHK? Чтобы при активации клавиши CapsLock у меня появлялся как бы дополнительный слой клавиатуры? И, если можно, с небольшими комментариями, чтобы я смог лучше понять, как это работает и уже сам смог это сотворить с другими клавишами...

P.S. Если не получится сделать с лампочкой-индикатором, то не беда - я здесь на форуме где-то видел, как можно менять значок скрипта в системном лотке.:)

6 (изменено: Grey, 2011-10-15 19:49:07)

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Lexanni пишет:

...можно ли сей бред реализовать только силами AHK?

Можно попытаться . Капслок теперь не кнопка-активатор, с запуском скрипт как бы на паузе, кликаете по иконе в трее, RAlt залипает, проблему бэкспэйса и спэйса во время работы скрипта вроде бы тоже пофиксил.

Menu, Tray, NoStandard
Menu, Tray, Icon, shell32.dll, 28
Menu, Tray, Tip, Paused
Menu, Tray, Add, &Exit (Tilde+Esc), ExitScript
OnMessage(0x404, "WM_LBUTTONUP")
Return

*$BackSpace::
Send, % RAltOn ? "{RAlt Up}{BackSpace Down}":"{BackSpace Down}"
KeyWait, BackSpace
Send, % RAltOn ? "{RAlt Down}{BackSpace Up}":"{BackSpace Up}"
Return

*$Space::
Send, % RAltOn ? "{RAlt Up}{Space Down}":"{Space Down}"
KeyWait, Space
Send, % RAltOn ? "{RAlt Down}{Space Up}":"{Space Up}"
Return

WM_LBUTTONUP(Msg, lParam)
{
   Global
   If (Msg=0x404 And lParam=0x202) ; WM_USER+4, WM_LBUTTONUP
   {
      Send, % (RAltOn:=!RAltOn) ? "{RAlt Down}":"{RAlt Up}"
      Menu, Tray, Icon, shell32.dll, % RAltOn ? 172:28
      Menu, Tray, Tip, % RAltOn ? "Ready":"Paused"
      TrayTip,, % RAltOn ? "Ready":"Paused"
;      SetNumLockState, % RAltOn ? "On":"Off"
   }
}

ExitScript:
vkC0 & Esc:: ; tilde + esc
   ExitApp

7

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Большое спасибо за труд! Но проблема бэкспейса и спейса не решена полностью - невозможно, зажав пробел, набирать много пробелов, а также стирать много, зажав бэкспейс. И Вы, наверное, меня не совсем поняли... Мне крайне важно, чтобы включение/выключение происходило по нажатию клавиши... Ну да ладно. Из Ваших примеров я почерпнул много. Больше не смею Вас беспокоить.

8

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Lexanni пишет:

...проблема бэкспейса и спейса не решена полностью - невозможно, зажав пробел, набирать много пробелов, а также стирать много, зажав бэкспейс.

Ясно, не реализован автоповтор - сори:

*$BackSpace::
   Send, % RAltOn ? "{RAlt Up}{BackSpace Down}":"{BackSpace Down}"
   Return
BackSpace Up::
   Send, % RAltOn ? "{RAlt Down}{BackSpace Up}":"{BackSpace Up}"
   Return

*$Space::
   Send, % RAltOn ? "{RAlt Up}{Space Down}":"{Space Down}"
   Return
Space Up::
   Send, % RAltOn ? "{RAlt Down}{Space Up}":"{Space Up}"
   Return
Lexanni пишет:

Мне крайне важно, чтобы включение/выключение происходило по нажатию клавиши...

Пример как это реализовать у Вас уже есть .

9 (изменено: Advocat, 2016-02-26 12:01:27)

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Grey

А подскажите пожалуйста, что нужно изменить в этом скрипте чтоб кнопки отжимались когда отпускаешь клавишу, а не были на удержании?

*CapsLock::
Send, % (CapsOn:=!CapsOn) ? "{RAlt Down}":"{RAlt Up}"
SetNumLockState, % CapsOn ? "On":"Off"
KeyWait, CapsLock
Return

10

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

Advocat, оформите код тегом code.

11 (изменено: Advocat, 2016-02-26 12:54:50)

Re: AHK: Пока активен CapsLock, зажата клавиша RAlt

А подскажите пожалуйста, что нужно изменить в этом скрипте чтоб кнопки отжимались когда отпускаешь клавишу, а не были на удержании? То есть пока держишь, то кнопки активны, отпускаешь - неактивны.  Сaps при этом тоже должен работать одновременно с RAltом, по сути при нажатии Capsa должен одновременно срабатывать и RAlt.


~CapsLock::
Send, % (CapsOn:=!CapsOn) ? "{RAlt Down}":"{RAlt Up}"
SetNumLockState, % CapsOn ? "On":"Off"
KeyWait, CapsLock
Return