2012-10-03 58 views
2

嗯,我一再被告知系统命令不好,但我需要更改注册表值,而我的优点是批处理,所以我有一个命令记住它:用C++更改注册表值? (系统命令失败)

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以及Panel和Desktop之间的斜线为错误,并且不允许我编译或调试我的程序。我不想使用系统命令,所以我想知道如何使用C++来执行相同的注册表命令? 我不明白WIN32注册表API?

而且是确定使用系统命令此

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

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

对不起,我知道这是一个很大的问题,但如果可能的话,你可以请包括代码,我刚刚开始,其他论坛没有任何意义,我一直在寻找释放三个小时(我不笨其一)!

在此先感谢

回答

1

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

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

结果将是这样的:

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

使用注册表API是你的任务是更好的选择,当然,但你也需要知道如何正确地写字符串文字。

+0

我试过这个,它仍然在这里捕获错误: – user1715942

+0

是的,与注册表API。 MSDN有很多例子。这里是一个:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724256(v=vs.85).aspx –

+0

我不明白它:(我是愚蠢的... – user1715942

5

请使用Win32 Registry API !!!

+0

有点感叹,但你是正确的。 – linuxuser27

+0

我已经试过了,对我没有意义吗?我刚刚开始,一些东西还没有点击!!!!你能解释它是如何工作的,请举个例子! – user1715942

+0

@ linuxuser27:我觉得惊叹的尾巴是故意的讽刺。 –