Автор Тема: [C++] Как программно сменить обои рабочего стола?  (Прочитано 3957 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Qwentor

  • Пользователь
  • Сообщений: 935
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Как программно сменить обои рабочего стола?
Использую
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"C:\\ds\\2.bmp",SPIF_UPDATEINIFILE);

На Vista/XP проверил - работает, а на 2000, только если снята галочка Active Desktop  :(
Как сделать, чтоб работало на 2000? Очень надо именно на этой системе..

Добавлено позже:
нашел в нете что-то про функцию IActiveDesktop, но не пойму как ей пользоваться, ниче не компилируется - выдает ошибки :(

Оффлайн Qwentor

  • Пользователь
  • Сообщений: 935
  • Пол: Мужской
    • ВКонтакте
    • Просмотр профиля
Разобрался!
#include "stdafx.h"
#include <string.h>
#include <windows.h>
#include <wininet.h>
#include <shlobj.h>
#include <AtlBase.h>
#include <AtlConv.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     HRESULT hr;
IActiveDesktop *pActiveDesktop;
hr=CoInitialize(NULL);
//Create an instance of the Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                      IID_IActiveDesktop, (void**)&pActiveDesktop);

//Insert code to call the IActiveDesktop methods
USES_CONVERSION;
LPCWSTR fname = A2W("c:\\ds\\2.bmp");
pActiveDesktop->SetWallpaper(fname, 0);
pActiveDesktop->ApplyChanges(AD_APPLY_ALL);

// Call the Release method
pActiveDesktop->Release();
    return 0;
}