А ведь здравая идея проскочила не переключать раскладку, а сделать автотранслитер. Что-то типа такого:
Код:
Const
Lat = '~@#$^&QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?`qwertyuiop[]asdfghjkl;''\zxcvbnm,./';
Cyr = 'Ё"№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,ёйцукенгшщзхъфывапролджэ\ячсмитьбю.';
var
i: Integer;
begin
for i := 1 to Length(Lat)
do if Key=Lat[i] then Key := Cyr[i];
end;