As I understand, you only needs a Hebrew keyboard layout. It's absolutely the best to have it system-wide. What's wrong with one of the standard layouts bundled with Windows?
Well, I know what can be wrong. I use non-standard keyboard layout from third-party; free but no Open Source, unfortunately. Actually, this keyboard — "phonetic" — layout is extremely valuable (always provided by most distro of Linux) and maybe highly used (if not more then the standard one, I don't know), but Microsoft is so careless about it so it was never included in any version, even though there are many people who cannot leave without it.
So, you may want to try to ask an advice from the advice from the author of this product, which is practically the only one good for my culture. See
http://winrus.com/kbd_e.htm[
^]. I don't think he does Hebrew but he may know how to approach the problem of system-wide keyboard layout.
(Again, are you sure everyone bundled with Windows is not good?)
If you want to stay with the application-specific keyboard layout, this is more easy.
You can follow the idea shown by Nagy, but of course it should be done more seriously. Use System.Collections.Generic.Dictionary<char, char> for character translation dictionary; always persist it on the disk, provide a feature to replace it during run-time.
You also need to present an image of the altered keyboard on screen, otherwise your user will be lost.
The best thing to do it is creating your own Virtual Keyboard.
Here you can find the key recipe for doing it:
Application focus getting and losing[
^],
Programming on BACKSPACE button[
^].
See also this CodeProject article:
A software Virtual Keyboard for your WPF apps[
^].
—SA