2011-02-01 2 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

Это дополнение к комментариям Денниса о файлах JPEG, важно также, скомпилировать ли вы с UNICODE или нет. Если вы это сделаете, вам придется указать файл как L "C: \ test.jpg". Обратите внимание на L перед строкой, что делает ее широкой строкой. Или используйте SystemParametersInfoA(), обратите внимание на A (но это архаично).

+0

Задание файла как L "C: \\ test.jpg" сработало. Можете ли вы объяснить, что означает компиляция с UNICODE, и как я могу проверить, действительно ли я это делаю? –

+0

Он находится на странице общих настроек, настройка набора символов. –

+0

Чтобы добавить дополнительные сведения об этом ответе для будущих читателей, проблемы Unicode возникают постоянно при использовании windows.h и связанных с ними. Более подробную информацию о юникоде можно найти здесь: http://en.wikibooks.org/wiki/Windows_Programming/Unicode –

0

В зависимости от версии операционной системы, pvParam не может работать.

Если вы используете Windows XP в сочетании с файлом JPEG, который вы пытаетесь назначить в качестве обоев, обратите внимание на комментарий в Документах

Windows Server 2003 и Windows, XP/2000: Параметр pvParam не может указать файл .jpg.

Смежные вопросы