2011-02-01 62 views
1

我剛剛學習C++並試圖編寫一個小程序來更改桌面壁紙。使用文檔here,我寫了這個程序:使用SystemParametersInfo設置桌面壁紙的問題功能

#include <windows.h> 
#include <stdio.h> 
#pragma comment(lib, "user32.lib") 

void main(){ 

    BOOL success = SystemParametersInfo(
    SPI_SETDESKWALLPAPER, //iuAction 
    0,      //uiParam 
    "C:\\test.jpg",   //pvParam 
    SPIF_SENDCHANGE   //fWinIni 
    ); 
    if (success){ 
     printf("Success!\n"); 
    }else 
     printf("Failure =(\n"); 
} 

程序當我試圖指定pvParam文件路徑總是失敗。如果我將pvParam設置爲「」,它將正確清除壁紙。我究竟做錯了什麼?

感謝 -Abhorsen

回答

4

除了Dennis對JPEG文件的評論之外,使用UNICODE編譯是否有效也很重要。如果你這樣做,那麼你必須將文件指定爲L「C:\ test.jpg」。注意字符串前面的L,這使它成爲一個寬字符串。或者使用SystemParametersInfoA(),注意A(但它是古老的)。

+0

將文件指定爲L「C:\\ test.jpg」工作。你能解釋一下UNICODE的實際編譯意味着什麼,以及如何檢查我是否正在這麼做? – 2011-02-01 21:42:43

0

根據不同的操作系統版本,pvParam可能無法正常工作。

如果您使用的是Windows XP加上你想分配爲牆紙的JPEG文件,請注意在文檔註釋:

的Windows Server 2003和Windows XP/2000年:pvParam參數不能 指定一個.jpg文件。