【发布时间】:2011-02-02 00:11:34
【问题描述】:
我想获得键盘布局名称,例如美国英语键盘的“kbdus”或美国国际键盘的“kbdusx”。我尝试过 Win32API 中的“GetKeyboardLayoutName”,但我只得到了一个数字(0x20409)。我知道 0x0409 表示“英语”,而“0x2”可能表示英语键盘变体之一。如何获取用户键盘布局的确切名称?我在 Windows 上使用 Ruby 1.8.7。
【问题讨论】:
我想获得键盘布局名称,例如美国英语键盘的“kbdus”或美国国际键盘的“kbdusx”。我尝试过 Win32API 中的“GetKeyboardLayoutName”,但我只得到了一个数字(0x20409)。我知道 0x0409 表示“英语”,而“0x2”可能表示英语键盘变体之一。如何获取用户键盘布局的确切名称?我在 Windows 上使用 Ruby 1.8.7。
【问题讨论】:
我找到了我的问题的答案:
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"
【讨论】:
关于Language Identifiers 的讨论可能会让你朝着正确的方向前进。 This listing of constants 可能更好。
【讨论】: