napi_value _GetCurrentKeyboardLayout()

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;
}