Partiendo de NumPadDecSeperator, un plugin de JQuery, creo las siguientes funciones para poner comas usando la tecla del punto del teclado numérico, independientemente de la configuración del teclado en el sistema operativo. 

 1 /**
 2  	* Funciones para añadir una coma cuando se pulsa la tecla del punto del teclado
 3  	* numérico.
 4  	*/
 5 
 6 	function _replaceSelectedVal(input, text) {
 7  		if ('selectionStart' in input) {
 8  			var start = input.selectionStart + 1;
 9 
10 			input.value = input.value.substr(0, input.selectionStart) + text
11  				+ input.value.substr(input.selectionEnd, input.value.length);
12 
13 			input.selectionStart = start;
14 			input.selectionEnd = start;
15 			input.focus();
16  		} else if (document.selection) {
17 			input.focus();
18 			var sel = document.selection.createRange();
19 			sel.text = text;
20 			// Move selection start and end to 0 position
21 			sel.moveStart('character', -input.value.length);
22 			
23 			// Move selection start and end to desired position
24 			sel.moveStart('character', sel.text.length);
25 			sel.moveEnd('character', 0);
26 			sel.select();
27 		} else {
28 			input.value += text;
29 		}
30 	}
31 	
32 
33 
34 	/**
35 	* La tecla del punto del teclado numérico tiene el código 110 (por lo menos en
36  	* firefox y IE)
37 	*/
38 
39 	function _numericPadPeriodPressed(keydownCode) {
40 		return 110 == keydownCode;
41 	}
42 
43 
44 	/**
45 	* Función que se llama en el evento keyDown del input para guardar el keyCode
46 	* de la tecla pulsada.
47 	*/
48 
49 
50 	function setLastkeyCode(input, e) {
51 		input.lastKeyCode = e.keyCode;
52 	}
53 
54 
55 	/**
56 	* Función que se llama en el keyPress del input y añade la coma si se ha
57  	* pulsado el punto del teclado numérico.
58  	*
59 	*/
60 
61 	function changeNumericPadPeriod(input, e) {
62  		if (_numericPadPeriodPressed(input.lastKeyCode) && !e.shiftKey
63 			&& !e.ctrlKey && !e.altKey) {
64 			_replaceSelectedVal(input, ",");
65 
66 			/* Stops all propagation of the event in the bubbling phase. */ 
67 			e.cancelBubble = true; //Microsoft model 
68 			if (e.stopPropagation) e.stopPropagation(); //W3C model 
69 			return false;
70 		}
71  		return true;
72 	}

Para usar las funciones configuro el campo de la siguiente forma:

1 <input type="text"  onkeydown="setLastkeyCode(this,event);printKeyCode(this);"
2 		onkeypress="return changeNumericPadPeriod(this,event);" />

Pruebalo tú mismo.