2015-07-25 2 views
1

Я хочу использовать AutoHotKey для отключения Alt + F4, когда они будут нажаты в течение 0,05 секунд друг от друга. В противном случае я бы хотел, чтобы он работал нормально.Отключить Fn + F4 с помощью AutoHotKey с использованием времени

Пояснение:
У моей Lenovo Yoga 2 Pro есть альтернативные функции для функциональных клавиш.
Например: «F3» отображается объем + «F4» отображается «закрыть активное окно»

Есть два режима:

  • Старая школа режим: F3 просто действует как F3, и вы должны удерживать клавишу Fn + F3, чтобы активировать громкость +
  • Режим новой школы: нажатие F3 активирует громкость +, а Fn + F3 будет делать нормальный F3.

В любом из режимов я рискую закрыть свое активное окно, когда я иду использовать громкость +, потому что они слишком близки, что очень проблематично. Обратите внимание, что AutoHotKey не может обнаружить ключ Fn, поэтому я не могу использовать это для решения моей проблемы.

На изображении ниже показан инструмент истории ключевых слов AutoHotKey. В режиме «Новая школа» я набрал «asdf», а затем нажал «F4», который является «закрытым активным окном». Вы можете увидеть это на самом деле имитирует ALT + F4, и есть очень короткий промежуток между ALT и F4 ...

AutoHotKey Key history

Я думаю, что я мог бы отключить этот «закрыть активное окно» функцию, имеющими AutoHotKey прерывает комбинацию ALT + F4, когда между двумя клавишами меньше 0,05 секунды. Это можно сделать?

Редактировать: В ответ на код Блаухирна, здесь оригинал, отредактированный для более короткой продолжительности ожидания (от 50 до 10). Он работает большую часть времени, хотя 1/10 раз окно еще cosed:

~alt:: 
hotkey, alt, off 
hotkey, !F4, doNothing, on 
sleep, 10 
hotkey, !F4, doNothing, off 
while(getKeyState("alt")) 
    sleep, 1 
hotkey, alt, on 
return 

doNothing: 
return 

Вот это изменение, я думал, что будет решить мою проблему фокусировки, отправив 2nd Alt, когда «закрыть активное окно» был обнаружен:

doNothing: 
send {LAlt} 
return 

Однако второй Alt не отправляется. Он отправляется, когда задержка выше 40, однако я считаю, что это слишком долго, и в свою очередь это мешает моему ручному использованию Alt + F4.

ответ

1

Вы пробовали использовать просто

F4::return 

? Может быть, это будет переопределить действие Lenovo для F4

Кроме этого, здесь есть два подхода я могу думать:

  1. Отключения ALT + F4 стандартных выигрыш горячих клавиш по умолчанию ,Добавление пользовательских горячих клавиш для замедленного F4

    !F4:: ; by default: 
    doNothing: ; this is a label (see GoSub) 
    return ; == do nothing 
    
    ~alt:: ; alt was pressed 
        sleep, 50 ; wait 50 milliseconds 
        if(!getKeyState("alt")) ; if alt is NOT pressed down anymore, exit 
         return 
        else ; (else is actually unnecessary here) 
         hotkey, !F4, close ; Add new AltF4-hotkey 
    return 
    
    close: 
        winclose, A ; close the Active window 
    return 
    
    ~alt up:: ; alt is being released 
        hotkey, !F4, doNothing ; remove the new AltF4 hotkey and go back to custom standard behaviour: do nothing. 
    return 
    

    он все еще вызывает Alt, который обычно оставляет меня в меню активного окна (File, Edit, View и т.д.), или если печатал в пределах textarea (вот так), он удалит фокус ввода.

    хорошо да. Если вы решите сохранить ключи lenovo, я не думаю, что есть способ предотвратить это. Как вы предложили, посылая ALT снова должна решить проблему

  2. с использованием Input, после ALT была нажата. Input блокирует пользовательский ввод для настраиваемого времени, если используется опция V.

(3. Отключайте Lenovo Yoga 2 Pro специальные клавиши. Если вам нужна F3 функцию, вы можете сделать это в AutoHotkey, например, с помощью send {volume_up}

+0

Ваш первый подход работает! Единственная проблема в том, что он по-прежнему вызывает Alt, который обычно оставляет меня в меню активного окна (File, Edit, View и т. д.), или если вы печатаете в текстовом поле (например, это), он удаляет фокус ввода. Можете ли вы объяснить логику что происходит в этом фрагменте? Если я добавлю дополнительный Alt, когда он обнаружит Fn + Alt, он должен отменить изменение фокуса. Плюс я, возможно, захочу его отредактировать, но я не уверен, что происходит. – Bort

+0

Я скорректировал код (& post), теперь немного изменился. – Blauhirn

+0

Спасибо, но я, возможно, объяснил себя плохо. Ваш исходный код работал, но новый - нет. Я просто хотел отредактировать исходный код, чтобы снова нажать Alt, если обнаружил «Закрыть активное окно». Я редактировал свой вопрос, чтобы показать, что я пробовал. Имейте в виду, что я не хочу отключать F4 или Alt + F4, когда я делаю это вручную. – Bort

Смежные вопросы