Es la tecla de mayúsculas presionada en JavaScript

He escrito una función JS que solo permite ingresar números. Una copia de esa función está abajo:

function NumbersOnly(e) {
    var evt = e || window.event;
    if (evt) {
        var keyCode = evt.charCode || evt.keyCode;
        //Allow tab, backspace and numbers to be pressed, otherwise return false for everything.
        //(keyCode>=96 && keyCode<=105) are the numpad numbers        
        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }
}

Esta función funciona bien con todos los números, pero mi problema ocurre cuando se mantiene presionada la tecla Mayús y se presiona una de las teclas numéricas. El valor devuelto es uno de los caracteres sobre los números. Entonces, por ejemplo, si presiono Mayús y presiono 7, se devuelve '&', ¡¡pero el KeyCode sigue siendo 55 !! Hubiera esperado que eso fuera diferente.

Entonces, mi pregunta es ¿cómo verifico si la tecla Mayús está presionada? He intentado la siguiente comprobación, pero esto no funcionó:

    if (keyCode === 16) {
        evt.returnValue = false;
    }
    else {

        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }

Estoy usando ASP.NET 4.0.

Cualquier ayuda sería recibida con gratitud.

Gracias por adelantado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta