2012-10-03 92 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:我覺得驚歎的尾巴是故意的諷刺。 –