Это не сложный процесс, как всегда лежит в области know-how. Предлагаю использовать вот такую связку функций.
1 2 3 4 5 6 7 8 |
function GetActiveKbdLayoutWnd : LongWord; var hWindow,idProcess : THandle; begin hWindow := GetForegroundWindow; idProcess := GetWindowThreadProcessId(hWindow,nil); Result:=(GetKeyboardLayout(idProcess) shr $10); end; |
Данная функция определяет активное окно и затем, по ID его процесса, получает код раскладки. Для русскоязычной публики типичны два кода (даю их в HEX виде):
1 2 |
$409 - Английский, США $419 - Русский, Россия |
Вы можете всегда их определить экспериментально или посмотреть в таблице кодов.