Программирование с функцией SPI_SETDESKWALLPAPER Изменяет только фон рабочего стола на черный цвет при попытке изменить его на изображение с использованием C ++ - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь изменить фон рабочего стола / обои на другое изображение с файлом .png. Хотя при запуске программы фон становится сплошным черным.

Я уверен, что я правильно ввел имя файла "ksa.png" в своем коде, чтобы оно было изображением, которое я хочу видеть на своем фоне. Я использовал условие if, чтобы записать последнюю ошибку в файл при возникновении ошибки, и использовал условие else, чтобы записать «Success», если ошибок не было; но когда я запускаю программу, она пишет «Успех» в файл. Я думал об использовании файла .jpg, думая, что, возможно, файлы .png просто не работают. Я дам обновление, когда я попробовал использовать это.

#include <windows.h>
#include <fstream>

int main () {
    const wchar_t *filenm = L"ksa.png";
    std::ofstream log;
    if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)filenm, SPIF_UPDATEINIFILE) == FALSE) {
        log.open("log.txt");
        log << "Error: " << GetLastError();
        log.close();
    }
    else {
        log.open("log.txt");
        log << "Success";
        log.close();
    }
    return 0;
}

Когда я запускаю эту программу, фон рабочего стола предполагается установить как изображение "ksa.png". Вместо этого он сплошной черный. Спасибо за помощь в создании этой работы, спасибо.

UPDATE

Хорошо, я обновил код, чтобы он запускал файл .jpg, и я все еще получаю тот же результат. Также я переместил команду line log.open("log.txt") перед функцией SystemParametersInfo(), как предложил Реми Лебо, и она все еще записывает «Success» в файл. У меня все та же проблема. Вот мой обновленный код:

#include <windows.h>
#include <fstream>

int main () {
    const wchar_t *filenm = L"3.jpg";
    std::ofstream log;
    log.open("log.txt");
    if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)filenm, SPIF_UPDATEINIFILE) == FALSE) {
        log << "Error: " << GetLastError();
        log.close();
    }
    else {
        log.open("log.txt");
        log << "Success";
        log.close();
    }
    return 0;
}

1 Ответ

0 голосов
/ 03 апреля 2019

Эмммм, проблема с вашей картинкой.Я попробовал твой код.Вы не можете получить изображения под относительными путями, если не используете абсолютные пути.

Как и Коди Грей ♦ суждение.

const wchar_t *filenm = L"C:\\Users\\strives\\Desktop\\timg.bmp";
...