2016-01-10 3 views
1

Я стараюсь менять обои рабочего стола. Это прекрасно работает, когда я использую это так:SystemParametersInfo устанавливает обои полностью черным (с использованием SPI_SETDESKWALLPAPER)

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\1.jpg", SPIF_SENDCHANGE); 

Но когда я использую его, как это, обои для рабочего стола установлен укомплектовать черный:

std::string s = "C:\\1.jpg"; 
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &s, SPIF_SENDCHANGE); 

Я попытался получить некоторую информацию с помощью использования GetLastError(), но возвращаемое значение равно 0. Я также пытался использовать .png-файлы, но это ничего не меняет.

Любые идеи, что я делаю неправильно?

ответ

5

Попробуйте это:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)s.c_str(), SPIF_SENDCHANGE); 

SystemParametersInfo функция не принимает std::string указателя как путь, он принимает завершающий нуль массива символов. Это то, что обеспечивает c_str() метод std::string.

+0

windows api совместимы с системой языка C и интерфейсом? –

+0

почти решение. Я пытался использовать c_str(), но он говорит, что он не может преобразовать из «const char *» в «PVOID». Но он отлично работает, если вы используете его следующим образом: '(void *) s.c_str()'. Thx :) – aasoo

+2

@AngelusMortis неверный вывод; скорее, Windows API совместим только с строками C, а не с C++ '' объекты – andlabs