2011-01-31 2 views
0

Я хочу получить название раскладки клавиатуры, например, «kbdus» для англо-английской клавиатуры или «kbdusx» для US-International. Я попробовал «GetKeyboardLayoutName» из Win32API, но я просто получил номер (0x20409). Я знаю, что 0x0409 означает «английский» и «0x2», вероятно, означает один из вариантов английской клавиатуры. Как получить точное имя раскладки клавиатуры для пользователя? Я использую Ruby 1.8.7 в Windows.Как получить раскладку клавиатуры на окнах с рубином?

ответ

1

Я нашел ответ на мой вопрос:

require 'win32/registry' 
require 'win32API' 

Win32API.new('user32', 'GetKeyboardLayoutName', 'p', '').call(layoutid = "\0"*8) 

reg_path = 'SYSTEM\CurrentControlSet\Control\Keyboard Layouts\\' << layoutid 
reg = Win32::Registry::HKEY_LOCAL_MACHINE.open(reg_path) 

layoutcode = reg.read('Layout File')[1].split('.', 2)[0] 
layoutname = reg.read('Layout Text')[1] 

layoutcode # => "KDBUSX" 
layoutname # => "United States-International" 
Смежные вопросы