使用 C++ 更改注册表值? (系统命令失败)

Posted

技术标签:

【中文标题】使用 C++ 更改注册表值? (系统命令失败)【英文标题】:Changing a registry value with C++? (system command failed) 【发布时间】:2012-09-23 23:15:04 【问题描述】:

好吧,我一次又一次地被告知系统命令不好,但我需要更改注册表值,而且我的强项是批处理,所以我心里有一个命令:

system("REG ADD "HKCU\Control Panel\Desktop" /V Wallpaper /T REG_SZ /F /D "C:\background.bmp"");
system("REG ADD "HKCU\Control Panel\Desktop" /V WallpaperStyle /T REG_SZ /F /D 0");
system("REG ADD "HKCU\Control Panel\Desktop" /V TileWallpaper /T REG_SZ /F /D 2");
system("%SystemRoot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters");

但是,使用它会使 Visual C++ 2010 Express 突出显示 HKCU 以及面板和桌面之间的斜线作为错误,并且不允许我编译或调试我的程序。我不想使用系统命令,所以我想知道如何使用 C++ 来执行相同的注册表命令? 我不明白 WIN32 注册表 API???

这个用系统命令可以吗

system("%SystemRoot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters");

因为我不知道没有它 C++ 是否可以执行相同的任务,如果它可以如何???

抱歉,我知道这是一个大问题,但如果可能的话,请您提供代码,我才刚刚开始,其他论坛都没有任何意义,我一直在寻找至少三个小时(我对计算机也不傻)!!!

提前致谢

【问题讨论】:

【参考方案1】:

请使用Win32 Registry API!!!

【讨论】:

我已经试过了,对我来说没有意义吗?我刚刚开始,有些东西还没有点击!!!!你能解释一下它是如何工作的,请举个例子! @linuxuser27:我认为感叹尾是故意的讽刺。 @user1715942:你在撒尿吗? 我有时会很兴奋。无意冒犯。那里有很多示例代码,如果您只是搜索“C++ 代码来修改 Windows 注册表项”。你甚至会得到results on *** 啊,我看到了混乱和随后的愤怒。从来没有考虑过批处理是一种编程语言——它只是一个愚蠢的 shell 脚本。在 80 年代后期,我们都认为这是理所当然的,任何想在 PC 上编码的人都会从 BASIC、Pascal、C 或汇编等实际语言开始。通常我们只是通过阅读代码而不是要求将其提供给我们来学习;)希望您喜欢您的 C++ 之旅!【参考方案2】:

需要一些额外的工作来编写包含特殊字符的字符串文字。例如,在您的代码中,ADD 之后的" 是字符串的结尾。

您需要在每个特殊字符(包括引号和退格)之前放置一个退格,以确保将它们放入字符串而不是由编译器处理。这称为转义

结果将如下所示:

system("REG ADD \"HKCU\\Control Panel\\Desktop\" /V Wallpaper /T REG_SZ /F /D \"C:\\background.bmp\"");

当然,使用 Registry API 是完成任务的更好选择,但您还需要知道如何正确编写字符串文字。

【讨论】:

是的,使用 Registry API。 MSDN 充满了例子。这是一个:msdn.microsoft.com/en-us/library/windows/desktop/…

以上是关于使用 C++ 更改注册表值? (系统命令失败)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我对注册表的更改不保留在 C++ 中?

如何用批处理语句获取reg命令的返回值?

C++的本地持续集成系统?

cmd更改注册表值?

32. 安装oracle11g时,先决条件一直失败的解决方法

win10安装inventor失败,怎么强力卸载删除注册表并重新安装