使用 WinAPI 的应用程序设置

Posted

技术标签:

【中文标题】使用 WinAPI 的应用程序设置【英文标题】:Application settings with WinAPI 【发布时间】:2010-06-19 16:46:03 【问题描述】:

是否有任何标准方法可以在 WinAPI 中处理应用程序设置?我目前正在做的是这样的:

if(!ReadKey(some_setting))
    WriteKey(some_setting, some_setting_setting_default_value)

当设置对话框初始化时。然后我将小部件状态设置为从注册表中读取的相应值。问题是,如果应用程序是第一次运行,则无法按照上述代码模式读取默认设置。还需要一个ReadKey() 才能将刚刚写入的默认设置读入我程序中的设置变量。这对我来说看起来有点笨拙。所以问题基本上是:

在 Win32 中使用设置是否有任何标准方法? ,最重要的是,有没有办法在安装过程中设置默认应用程序设置,以便有代码来设置默认设置? (我猜这是首选方法,因为这样您就可以修改默认应用程序设置而无需重建它)

同样,这应该是纯 Win32,不允许 MFC。

为什么要做这个作业?这是关于是否有既定的做事惯例的问题,而不是要求为我做我的工作的问题。现在我最好从那里删除“大学项目”这个词。

【问题讨论】:

【参考方案1】:

您可以避免将硬编码的默认值写入注册表,并将注册表留空,除非它包含非默认值:

string ReadRegistry(
  const string& some_setting,
  const string& some_setting_default_value
  )

  //try to read user-specified setting from registry
  string rc;
  if (ReadKey(some_setting, rc))
  
    return rc;
  
  //else return hard-coded default value, not from registry
  return some_setting_default_value;

或者,您可以在安装程序时(在程序运行之前和尝试读取注册表之前)将所有默认值写入注册表。

在 Win32 中是否有任何标准方式来处理设置?

没有。

有没有办法在安装过程中设置默认应用程序设置

是的,安装程序可以写入注册表。

【讨论】:

所以我猜最常用的应用程序设置方法是在安装过程中写入默认值? @Semen Semenych - 我想这可能是一种常见的方式;并且两个小缺点是: a) 如果注册表中缺少值(例如,被最终用户删除),则健壮性较差(比使用硬编码的默认值); b) 不太容易知道注册表中的值(如果它是默认值)是由安装程序创建的,还是由最终用户明确选择/编写的。

以上是关于使用 WinAPI 的应用程序设置的主要内容,如果未能解决你的问题,请参考以下文章

将显示设置更改为重复的 WinAPI 函数

WinAPI:如何强制 DATETIMEPICKER 使用标准日历而不是本地日历设置

WINAPI - 设置组合框下拉菜单的背景和文本颜色

使用winapi进行远程程序控制[关闭]

从剪贴板获取数据并重新设置 - WINAPI,C [重复]

损坏的 winapi 可执行清单