Я пытался записать приложение, с помощью QT и mingw32, к образам загрузки и установить их как фоновые Обои. Я прочитал несколько статей онлайн о том, как сделать это в VB и C#, и в некоторой степени как сделать это в C++. Я в настоящее время звоню SystemParametersInfo
с каким, кажется, все корректные споры (никакие ошибки компилятора), и это перестало работать. Никакой большой катастрофический отказ тарелок, просто a 0
возвращенный. GetLastError()
возвращается одинаково поучительный 0
.
Ниже код, который я использую (В немного измененной форме, таким образом, Вы не должны просматривать объектные внутренности).
#include <windows.h>
#include <iostream>
#include <QString>
void setWall()
{
QString filepath = "C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
char path[150];
strcpy(path, currentFilePath.toStdString().c_str());
char *pathp;
pathp = path;
cout << path;
int result;
result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pathp, SPIF_UPDATEINIFILE);
if (result)
{
cout << "Wallpaper set";
}
else
{
cout << "Wallpaper not set";
cout << "SPI returned" << result;
}
}
Возможно, SystemParametersInfo
ожидает LPWSTR
(указатель на wchar_t
).
Попробуйте следующее:
LPWSTR test = L"C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
result = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, test, SPIF_UPDATEINIFILE);
Если это сработает (попробуйте с несколькими разными файлами, чтобы убедиться), вам нужно преобразовать свой char *
в LPWSTR
. Я не уверен, предлагает ли Qt эти службы, но одна функция, которая может помочь, - это MultiByteToWideChar
.
"C:\Documents and Settings\Owner\My Documents\Wallpapers\wallpaper.png";
не должно ли это быть:
"C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";