Обои изменения программно с помощью C++ и API окон

Я пытался записать приложение, с помощью 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;
    }
}
7
задан Blue Peppers 26 July 2010 в 01:10
поделиться

2 ответа

Возможно, 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 .

9
ответ дан 7 December 2019 в 01:15
поделиться
"C:\Documents and Settings\Owner\My Documents\Wallpapers\wallpaper.png";

не должно ли это быть:

"C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
2
ответ дан 7 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: