Seu problema não está no Windows, mas uma consequência de como o seu navegador da Web implementa o manuseio do teclado.
Por exemplo, no Internet Explorer, obtemos:
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keydown keyCode=9 which=9 charCode=0
keyup keyCode=9 which=9 charCode=0
Enquanto no Firefox, recebemos isso:
keydown keyCode=9 which=9 charCode=0
keypress keyCode=9 which=0 charCode=0
keydown keyCode=9 which=9 charCode=0
keypress keyCode=9 which=0 charCode=0
keydown keyCode=9 which=9 charCode=0
keypress keyCode=9 which=0 charCode=0
keyup keyCode=9 which=9 charCode=0
Você pode encontrar esta referência útil. Em particular, veja a seção 3.2. Valores clássicos retornados em eventos de caractere . O único problema é que essa referência parece terrivelmente desatualizada. Mas o princípio fundamental está lá. Navegadores diferentes fazem as coisas de maneira diferente:
When keypress events are generated for special keys, the browser needs to return some non-ASCII value to indicate which key ways pressed. We'll see that various different browsers do this in different ways.
EDITAR: Uma referência mais atualizada .