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

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

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

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

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

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

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

【问题讨论】:

    标签: c++ winapi


    【解决方案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) 不太容易知道注册表中的值(如果它是默认值)是由安装程序创建的,还是由最终用户明确选择/编写的。
    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多