in src/keyboard_win.cc [347:366]
napi_value _GetCurrentKeyboardLayout(napi_env env, napi_callback_info info) {
UseForegroundKeyboardLayoutScope use_foreground_keyboard_layout;
char chr_layout_name[KL_NAMELENGTH];
if (!GetKeyboardLayoutName(chr_layout_name)) {
return napi_fetch_null(env);
}
std::string layout_name = chr_layout_name;
// https://technet.microsoft.com/en-us/library/dd744319(v=ws.10).aspx
std::string layout_id = GetStringRegKey("System\\CurrentControlSet\\Control\\Keyboard Layouts\\" + layout_name, "Layout Id");
std::string layout_text = GetStringRegKey("System\\CurrentControlSet\\Control\\Keyboard Layouts\\" + layout_name, "Layout Text");
napi_value result;
NAPI_CALL(env, napi_create_object(env, &result));
NAPI_CALL(env, napi_set_named_property_string_utf8(env, result, "name", layout_name.c_str()));
NAPI_CALL(env, napi_set_named_property_string_utf8(env, result, "id", layout_id.c_str()));
NAPI_CALL(env, napi_set_named_property_string_utf8(env, result, "text", layout_text.c_str()));
return result;
}