Как программно обновить рабочий стол?

Тема в разделе "WASM.WIN32", создана пользователем vg, 4 янв 2009.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как программно обновить Рабочий стол в Windows? Т. е. сделать то, что происходит при нажатии F5 на Рабочем столе.
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    SHChangeNotify(SHCNE_ASSOCCHANGED, 0, 0, 0)
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Найти окно рабочего стола и сэмулировать нажатие F5?
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    vg
    Код (Text):
    1. #include <windows.h>
    2. #include <wininet.h>
    3. #include <shlobj.h>
    4.  
    5. int UpdateActiveDesktop(void)
    6. {
    7.   int Result = 0;
    8.  
    9.   IActiveDesktop *pActiveDesktop;
    10.  
    11.   if (S_OK == CoCreateInstance(CLSID_ActiveDesktop,
    12.                                NULL,
    13.                                CLSCTX_INPROC_SERVER,
    14.                                IID_IActiveDesktop,
    15.                                (void**)&pActiveDesktop))
    16.   {
    17.     if (S_OK == pActiveDesktop->ApplyChanges(AD_APPLY_ALL | AD_APPLY_FORCE))
    18.       Result = 1;
    19.  
    20.     pActiveDesktop->Release();
    21.   }
    22.  
    23.   return Result;
    24. }
    25.  
    26. int main(void)
    27. {
    28.   CoInitialize(NULL);
    29.   UpdateActiveDesktop();
    30.   CoUninitialize();
    31.  
    32.   return 0;
    33. }
     
  5. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Работает, но не полностью. Не обновляются обои. Это можно сделать при помощи SHChangeNotify?
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    А что с обоями ? Ты их изменяешь ?
     
  7. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Удаляю ключ реестра HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ну так и по F5 он не обновляется после удаления этого ключа реестра.
     
  9. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Обновляется, только что проверил.
     
  10. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    vg У меня нет. XP SP2
     
  11. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    У меня тоже. А что после удаления ключа и перезагрузки?
     
  12. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    После перезагрузки, думаю, обновится :)
    А вообще кривой способ удаления обоев.
    Юзай SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL,0)
     
  13. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    У Джефри Рихтера есть хороший код обновлению+востановлению