Как отключить клавиши Windows (клавиша с логотипом и клавиша меню) с помощью Javascript

Я пишу этот код Javascript, но он не отключает 2 клавиши Windows (я имею в виду клавишу логотипа и клавишу меню):

document.onkeydown = function(e) {
    document.title = e.keyCode;
    if (e.keyCode == 91 || e.keyCode == 93) {
        window.event.keyCode = 0;
        window.event.returnValue = false;
        return false;
    }
};

2 оператора window.xxx на самом деле не нужны, но я добавляю их, чтобы купить страховку (просто сомневаюсь, что e не полностью равно window.event).

Поэтому я хотел бы задать этот вопрос: «Есть ли реальный способ, прямо или косвенно, выполнить эту работу в Javascript?»


person Scott Chu    schedule 15.05.2013    source источник
comment
01 кажется странным. Это работает для одного ключа или другого?   -  person Cfreak    schedule 15.05.2013
comment
Хочешь сказать, какой ключ ты собираешься ловить?   -  person Surendra Jnawali    schedule 15.05.2013
comment
Вы можете бросить туда e.stopPropagation(); прямо перед тем, как вернуться, на всякий случай. Кроме того, как уже упоминалось, 01 довольно странный. Вот список кодов клавиш.   -  person dinjas    schedule 15.05.2013
comment
@ SJnawali: Это те две клавиши Windows (клавиша с логотипом Windows и клавиша контекстного меню Windows), которые я хочу перехватить. Wiki называет их ключом Windows. Чтобы быть более ясным, я изменю заголовок, чтобы он был клавишей запуска и клавишей меню.   -  person Scott Chu    schedule 15.05.2013
comment
@ dinjas: Это опечатка, и я уже исправил ее на 91. Спасибо, что указали на опечатку. Я пробовал e.stopPropagation(), но это не помогает.   -  person Scott Chu    schedule 15.05.2013
comment
@Cfreak: 01 - опечатка. Корректировка сделана. Спасибо, что указали.   -  person Scott Chu    schedule 15.05.2013
comment
Я не уверен, что это возможно в кросс-браузерном режиме. Просто просматривал это (страница поиска клавиатур Windows).   -  person dinjas    schedule 15.05.2013


Ответы (2)


Ваш код выглядит правильно, попробуйте узнать настоящие коды клавиш с помощью этого простого скрипта:

document.onkeydown = checkKeycode
function checkKeycode(e) {
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  alert("keycode: " + keycode);
}

И чтобы отключить определенные клавиши, вы изменяете функцию (пример для «Enter»):

document.onkeydown = checkKeycode
function checkKeycode(e) {
  var event = e || window.event;
  var keycode = event.which || event.keyCode;

  if (keycode == 13) {
    // return key was pressed
  }
}
person zolter    schedule 15.05.2013
comment
Я почти уверен, что ключ с логотипом - это код 91, а ключ меню - 93. Предыдущий 01 - опечатка. - person Scott Chu; 15.05.2013
comment
Мой код работает точно так же, как ваш. Однако ключи Windows — это особый случай. Я также попробовал ваши коды (изменить 13 на 91 или 93), и он также не блокирует клавиши Windows. - person Scott Chu; 15.05.2013
comment
Вы находите решение для достижения этого? - person Kishore Indraganti; 15.10.2016
comment
@Zolter Я попробовал твой код. 91 для окон. Но это не останавливает клавишу Windows. Не могли бы вы помочь мне, как отключить все клавиши клавиатуры, когда моя страница приложения открыта. вот код, который я пытаюсь остановить, но не могу остановить клавишу Windows stroke.document.onkeydown = checkKeycode function checkKeycode(e) { var event = e || окно.событие; код ключа var = событие.которое || код события.keyCode; если (keycode == 91) { window.event.keyCode = 0; окно.событие.returnValue = ложь; вернуть ложь; // была нажата клавиша возврата } } - person sashikanta; 16.03.2017
comment
Вы можете проверить keycode.info, чтобы легко найти свои коды ключей (в отличие от использования предупреждения, которое немного громоздко) - person Mirage; 15.06.2017

JavaScript не может остановить действие клавиши с логотипом Windows, которая (при ее отпускании) должна вызывать меню «Пуск» окна. В сочетании с другими клавишами он имеет другие общесистемные эффекты (например, M = свернуть все окна). Это то, что происходит вне контекста браузера, и поэтому не может и не должно блокироваться кодом, работающим в вашем браузере.

Клавиша меню Windows может быть несколько отключена, как описано в этом ответе:

$(function(){
    var lastKey=0;
    $(window).on("keydown", document, function(event){
        lastKey = event.keyCode;            
    });

    $(window).on("contextmenu", document, function(event){
        if (lastKey === 93){
            lastKey=0;
            event.preventDefault();
            event.stopPropagation();
            return false;
        }
    });
});
person trincot    schedule 11.02.2017