Нужно написать прогу которая меняет рисунок рабочего стола. SPI_SETDESKWALLPAPER.
На msdn.microsoft.com нашёл описание этой функции.
Подскажите как её использовать.
P.S. Это моя первая прога на vc++
Заранее спасибо
смена wallpaper на VC++
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Собственно вся программа сводится к вызову одной WinAPI функции (ну, может, если это должнабыть самостоятельная прога, то какая-то логика у тебя будет в полуучении имени файла того "обоя", который нужно установить. В простейшем случае - можно передать как параметр командной строки):
SystemParametersInfo(
UINT uiAction, // system parameter to retrieve or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update option
);
Вызов именно для установки обоев будет выглядеть так:
ПРИМЕЧАНИЕ: Насколько я понимаю, <файл_рисунка> ДОЛЖЕН быть в BMP-формате.
Еще такое воспоминание из области "шаманства", когда я писал сееб такую прогу. После компиляции этого текста на Microsoft C++ и запуск получившейся EXE-шки на, по-моему, Win98 эта функция (SystemParametersInfo) возвращала ошибку (точно не помню какую). А на Win2000 нормально устанавливала.
Скомпилировал на Borland C++ - работает без проблем!
Загадка, блин!
SystemParametersInfo(
UINT uiAction, // system parameter to retrieve or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update option
);
Вызов именно для установки обоев будет выглядеть так:
Код: Выделить всё
bool blOK = SystemParametersInfo (
SPI_SETDESKWALLPAPER,
0,
<твое_имя_файла_рисунка>,
SPIF_UPDATEINIFILE);
Еще такое воспоминание из области "шаманства", когда я писал сееб такую прогу. После компиляции этого текста на Microsoft C++ и запуск получившейся EXE-шки на, по-моему, Win98 эта функция (SystemParametersInfo) возвращала ошибку (точно не помню какую). А на Win2000 нормально устанавливала.
Скомпилировал на Borland C++ - работает без проблем!
Загадка, блин!

Можно использовать интерфейс IActiveDesktop.
Только сначала нужно для рабочего стола установить флаг Show Web Content. (Клик правой кнопкой мыши по рабочему столу и в пункте меню Active Desktop выбирается соответствующая позиция).
Только сначала нужно для рабочего стола установить флаг Show Web Content. (Клик правой кнопкой мыши по рабочему столу и в пункте меню Active Desktop выбирается соответствующая позиция).
Код: Выделить всё
#include "stdafx.h"
#include <wininet.h>
#include <shlobj.h>
#include <atlbase.h>
struct _COINITIALIZE
{
_COINITIALIZE() {::CoInitialize(NULL);}
~_COINITIALIZE() {::CoUninitialize();}
};
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
struct _COINITIALIZE co_init;
CComPtr<IActiveDesktop> pAD;
::CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_ALL, IID_IActiveDesktop, (LPVOID*)&pAD);
pAD->SetWallpaper(L"C:\\WINNT\\Web\\Wallpaper\\Paradise.jpg", 0);
pAD->ApplyChanges(AD_APPLY_ALL);
return 0;
}
Спасибо всем!!!
to BBB: Разобрался. Всё работает.
to WinMain: не всё пока понятно. Ещё буду Разбираться)))
to BBB: Разобрался. Всё работает.
to WinMain: не всё пока понятно. Ещё буду Разбираться)))