En fait, CTRL, SHIFT et ALT ont un code ASCI associé, et on fait la somme de leur code plus la seconde touche associée.
En programmation, on peut donc savoir quand la touche est enfoncée avant même l'appuis de la seconde touche, puisque le code associé est envoyé au contrôlleur.
La touche FN, elle, est gérée au niveau du clavier lui-même, et c'est le processeur interne du clavier qui effectue l'oppération suivant la combinaison des touches. Il envoie alors uniquement le résultat de la combinaison au contrôlleur. Impossible donc de savoir si FN est enfoncée ou non.
Il y a peut-être moyen en passant par le driver du clavier, qui est peut-être capable d'interroger le clavier directement, mais j'en doute.