Unter Linux wird ein Tastaturinterrupt ausgelöst, der erstmal an den Kernel weitergereicht wird. Der wiederum weiß, welches Programm im Vordergrund läuft (d.h. welches vituelle Terminal gerade den Fokus hat) und leitet das dorthin weiter.
Dort läuft ein X-Server, der das an das Fenster weiterleitet, welches gerade den Fokus hat. Ist normalerweise das Fenster, wo der Mauszeiger drüber schwebt, aber ein Window-Manager verwaltet das (sofern einer läuft, also quasi immer).
Zu 1.: Je nachdem, wie du deine RPC eingerichtet hast; unter Windows wird eine Message an das Handle geschickt. Wenn die Anwendung sich das selbst holen muss, endet das am Ende im Polling und damit in CPU-Last... von daher solltest du die interruptgesteuerte Art beibehalten.
Zu 2.: Dein Kernel leitet es an die Vordergrundanwendung weiter, was die damit macht, bleibt ihr überlassen. Und wenn sie selbst mehrere Fenster unterstützt, muss sie das dann halt selbst entscheiden. Für den Fokus gibt es mehrere Modelle, von "Fokus folgt Mauszeiger" bis "das zuletzt gestartete Fenster". Das kannst du dann auch wieder implementieren, wie du möchtest.
Hoffe, geholfen zu haben;
Gruß,
Svenska