1 (изменено: 47th, 2015-05-12 20:55:16)

Тема: AHK: Инверсия нажатия клавиш клавиатуры

Помогите со скриптом для инверсии нажатия клавиши. Нужно, чтобы по умолчанию клавиша считалось зажатой, а по нажатию на кнопку - она отжималась. На форуме вроде ничего подходящего не нашёл. Может у кого есть пример такого скрипта или поможет с его написанием для моего случая. Нужно инвертировать работу кнопки Fn на ноутбуке. Разработчик сделал, что по умолчанию клавиша Fn считается всегда нажатой, и чтобы использовать банально кнопки F1-F12 в тех же играх - нужно зажимать Fn, что чертовски неудобно и попросту раздражает.

2

Re: AHK: Инверсия нажатия клавиш клавиатуры

Можно просто переназначить кнопки.
Посмотрите, какое нажатие происходит при зажатии Fn и f1 в keyhistory и переназначьте их типа:

a:: SendInput, b
return

3 (изменено: yalanne, 2015-05-12 21:30:23)

Re: AHK: Инверсия нажатия клавиш клавиатуры

Для этого не нужен скрипт. Возможные варианты:
1) нажать fn + NumLK
2) нажать fn + insert
3) нажать fnLock(если есть)
4) в биосе отключить Action Keys Mode

4 (изменено: 47th, 2015-05-12 21:39:08)

Re: AHK: Инверсия нажатия клавиш клавиатуры

Malcev пишет:

Можно просто переназначить кнопки.
Посмотрите, какое нажатие происходит при зажатии Fn и f1 в keyhistory и переназначьте их типа:

a:: SendInput, b
return

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

yalanne пишет:

Для этого не нужен скрипт. Возможные варианты:
1) нажать fn + NumLK
2) нажать fn + insert
3) нажать fnLock(если есть)
4) в биосе отключить Action Keys Mode

Ни один из этих пунктов не подходит. Первые два никакой реакции не дают, третьего нет. В моём буке должно отключаться в биосе, но чтобы бы не было выбрано в Action Keys - ничего не меняется. Месяц пытался решить проблему через форумы именно по моему ноуту, но ни у кого такой проблемы судя по всему не возникало. Нести в сервис совсем не хочу, остаётся только вариант как-то программно с этим бороться.

5

Re: AHK: Инверсия нажатия клавиш клавиатуры

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

Самый простой как-раз таки будет просто переназначить.

6

Re: AHK: Инверсия нажатия клавиш клавиатуры

Malcev пишет:

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

Самый простой как-раз таки будет просто переназначить.

Разве будет проще переписывать 24 комбинации вместо одной?

7

Re: AHK: Инверсия нажатия клавиш клавиатуры

Нажатие на Fn не перехватывается программно, поэтому задать ее зажатие не получится. Если интересно, поищите по форуму, уже были попытки назначить свои действия на Fn.

8

Re: AHK: Инверсия нажатия клавиш клавиатуры

Irbis пишет:

Нажатие на Fn не перехватывается программно, поэтому задать ее зажатие не получится.

Вот это крайне неприятная новость :\  Тогда совсем коряво получится сделать...  Придётся одним скриптом переписывать значения ф1-ф12, вторым , когда нужно подкрутить что-то функциональными кнопками - возвращать всё, как было.
А я пока вообще ничерта не разобрался как писать эти скрипты

9

Re: AHK: Инверсия нажатия клавиш клавиатуры

Я решил очень похожую проблему. Отличие моей проблемы заключается в том что я делал так что бы скрипт зажимал отжимал клавишу fn. Как и сказал Irbis клавиша fn но обрабатывается, но я нашел метод перехвата нажатий комбинаций клавиш fn+F*. Вот мой скрипт:



:*:fn.::
Function_Switch := !Function_Switch
if Function_Switch
    Send, ON.
else
    Send, OFF
Sleep, 400
Send, {BS 3} ; deleting it
return
~$VKFFSC109:: ;From Down key
if !switch_5 
    {
    Send, {VKFFSC109 7} ; -1
    switch_5 := TRUE
    }
return
#if Function_Switch
SC03C::VKFFSC103 ;F2
SC03D::€ ;F3, this key does not have any special scan code
SC03E::VKFFSC102 ;F4
SC03F::VKFFSC104 ;F5
SC040::Volume_Mute ;F6
SC041::VKFFSC131 ;F7
SC042::VKFFSC133 ;F8
:*?:WiFi::
SC043:: ;F9
Send, {VKFFSC106}
return
SC044:: ;F10
if Switch_4
    {
    Send, {vkFFsc179} ; off touchpad
    Switch_4 := FALSE
    }
else
    {
    Send, {vkFFsc177}
    Switch_4 := TRUE
    }
return
SC14B::Volume_Down ;Left
SC14D::Volume_Up ;Right
SC148::VKFFSC108 ;Up
SC150:: ;Down
if !switch_5 
    {
    Send, {VKFFSC109 5}
    switch_5 := TRUE
    }
else
    Send, {VKFFSC109}
return

Так вот комбинация типа VKFFSC109 является сочетанием нажатия fn + f*. Для того что бы получить это, нужно отследить скан и vk коды всех необходимых клавиш, а потом повесить на эти нажатия клавиши f1-f12.