Обои рабочего стола
От: CeproBan  
Дата: 08.10.02 21:08
Оценка:
Как сменить обои на рабочем столе если картинка в JPEG формате.
Как изменить запись в реестре я знаю, а вот как обновить
рабочий стол, чтоб обои поменялись на новые никак не могу понять.
Re: Обои рабочего стола
От: Hacker_Delphi Россия  
Дата: 08.10.02 21:12
Оценка:
Здравствуйте CeproBan, Вы писали:

CB>Как сменить обои на рабочем столе если картинка в JPEG формате.

CB>Как изменить запись в реестре я знаю, а вот как обновить
CB>рабочий стол, чтоб обои поменялись на новые никак не могу понять.
Как вариант: убить все процессы explorer.exe, а потом запустить один...
он автоматом поднимется Shell'ом, и, соотв. перерисуется с новыми обоями.
Еще вариант — протрассируй, какие оконные сообщения шлются окошкам Хплорера, когда в paint выбираеш Файл-сделать обои (или типа того)
ЗЫ при первом способе все иконки из трея пропадут...
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: Обои рабочего стола
От: Crush Россия http://www.ael.ru/_crush/
Дата: 08.10.02 21:24
Оценка:
Здравствуйте CeproBan, Вы писали:

CB>Как сменить обои на рабочем столе если картинка в JPEG формате.

CB>Как изменить запись в реестре я знаю, а вот как обновить
CB>рабочий стол, чтоб обои поменялись на новые никак не могу понять.

IMHO гемморно менять параметры в реестре. Для этого существует специальный API интерфейс IActiveDesktop — если нужно поменять обои на ActiveDesktop. И функция API существует для смены на обычном рабочем столе. Иными словами, тебе прямая дорога к MSDN. Ща у меня под рукой нет подходящего примера, и негде уточнить что конкретно надо делать, но завтра, если интересно, могу притащить живой примерчик.
Не ошибается то, что не работает. (с) Windows
Re[2]: Обои рабочего стола
От: CeproBan  
Дата: 09.10.02 06:40
Оценка:
APIшная SystemParametersInfo с параметром SPI_SETDESKWALLPAPER в моем случае не подходит, так как работает только с БИТМАПами а JPEGов знать не хочет.
А вот про IActiveDesktop поподробнее пожалуста...
Re[3]: Обои рабочего стола
От: sasha Грузия  
Дата: 09.10.02 09:41
Оценка:
Здравствуйте CeproBan, Вы писали:

CB>А вот про IActiveDesktop поподробнее пожалуста...


Вот поподробнее:
    HRESULT hr;
    IActiveDesktop *pActiveDesktop;

    hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                      IID_IActiveDesktop, (void**)&pActiveDesktop);

    hr = pActiveDesktop->SetWallpaper(L"С:\\wallpaper.jpg",0);
    hr = pActiveDesktop->ApplyChanges(AD_APPLY_ALL);

    pActiveDesktop->Release();
Re[4]: Обои рабочего стола
От: CeproBan  
Дата: 09.10.02 23:20
Оценка:
Здравствуйте sasha, Вы писали:

S>Вот поподробнее:

S>
S>    HRESULT hr;
S>    IActiveDesktop *pActiveDesktop;

S>    hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
S>                      IID_IActiveDesktop, (void**)&pActiveDesktop);

S>    hr = pActiveDesktop->SetWallpaper(L"С:\\wallpaper.jpg",0);
S>    hr = pActiveDesktop->ApplyChanges(AD_APPLY_ALL);

S>    pActiveDesktop->Release();
S>


Такой код я уже пробовал — не пашет.
CoCreateInstance не срабатывает, интересно почему?
Re[5]: Обои рабочего стола
От: Crush Россия http://www.ael.ru/_crush/
Дата: 10.10.02 01:13
Оценка: 14 (3)
CB>Такой код я уже пробовал — не пашет.
CB>CoCreateInstance не срабатывает, интересно почему?


HRESULT hr;
IActiveDesktop* pIAD;
char *n_file="c:\\image.jpg";  //  Полный путь к изображению
WCHAR wc[100];

// Инициализируем интерфейс IActiveDesktop
CoInitialize(NULL); // Вот почему не срабатывает CoCreateInstance
hr = CoCreateInstance (Shlobj::CLSID_ActiveDesktop,
                       NULL,
                       CLSCTX_INPROC_SERVER,
                       IID_IActiveDesktop,
                       (void**) &pIAD );

if (SUCCEEDED(hr))
  {
  // Получаем ссылку на текущий Wallpaper
  hr = pIAD->GetWallpaper ( wszWallpaper, MAX_PATH, 0 );
  if (SUCCEEDED(hr))
    {
    // Приводим путь к изображению к типу WideChar
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,n_file,-1,wc,100);
    // Тут, думаю, все говорит само за себя 
    pIAD->SetWallpaper(wc,0);
    pIAD->ApplyChanges(AD_APPLY_ALL);

    pIAD->Release();
    CoUninitialize();
    }
  }
Не ошибается то, что не работает. (с) Windows
Re[6]: Обои рабочего стола
От: uncleslava  
Дата: 28.01.09 19:52
Оценка:
Подскажите, может кто нибудь знает как ускорить смену обоев. Хотелось бы с большой скоростью менять изображение на экране.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.