Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Работа с реестром


Автор: Vendigo 1.3.2006, 21:17
Подскажите, люди добрые smile
Хотел программно, через реестр изменить обои рабочего стола.
Но что-то не выходит.
Программа выполняется, смотрю через regedit в HKEY_CURRENT_USER \ Control Panel \ Desktop параметр Wallpaper остается прежний. Что не так?
Код

    TRegistry *Reg = new TRegistry;                
    Reg->OpenKey("\Control Panel\Desktop",true);

    Reg->WriteString("Wallpaper",
        "D:\\Документы\\Мои рисунки\\Снаружи\\Обои\\Системные\\Girls 06.jpg");

    LB->Caption = Reg->ReadString("Wallpaper");            // LB это Label


Думаю, через реестр, можно будет устанавливать в качестве "обоев" .jpg картинки а не только .bmp
(Через SystemParametersInfo получалось только с .bmp)

P.S. стоит Windows XP, работаю в Builder 6.

Автор: Kostt 2.3.2006, 08:09
Навскидку - попробуй в конце Reg->CloseKey()

Автор: Vendigo 2.3.2006, 21:57
Спасибо Kostt, хороший совет. Но все равно не работает!

Автор: p0s0l 2.3.2006, 23:32
Если через реестр, то в конце надо делать еще
Код
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_SENDWININICHANGE);
иначе сразу не увидишь эффекта...
Но, имхо, так не установить .jpg в качестве обоев... Нужно вначале преобразовать .jpg в .bmp...

Можно попробовать устанавливать обои через IActiveDesktop:
Код
IActiveDesktop *ad;
CoInitialize (NULL);
CoCreateInstance( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&ad );  
ad->SetWallpaper( "D:\\Документы\\Мои рисунки\\Снаружи\\Обои\\Системные\\Girls 06.jpg", 0 );
ad->ApplyChanges( AD_APPLY_ALL || AD_APPLY_FORCE );
...

Автор: Helicopterr 4.3.2006, 17:35
Цитата(p0s0l @ 2.3.2006, 23:32)
Можно попробовать устанавливать обои через IActiveDesktop:
Код

#include <shlobj.h>
#include <unknwn.h>
IActiveDesktop *ad;
CoInitialize (NULL);
CoCreateInstance( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&ad );  
ad->SetWallpaper( "D:\\Документы\\Мои рисунки\\Снаружи\\Обои\\Системные\\Girls 06.jpg", 0 );
ad->ApplyChanges( AD_APPLY_ALL || AD_APPLY_FORCE );
...


а что в этом коде не хватает а то моя виз. студия так вот:

error C2065: 'IActiveDesktop' : undeclared identifier
error C2065: 'ad' : undeclared identifier
error C2227: left of '->SetWallpaper' must point to class/struct/union

ну и т.п.
?

Автор: _hunter 6.3.2006, 11:20
судя по MSDN ( интересно, чего бы самому не глянуть... ) IActiveDesktop описан в shlobj.h

Автор: Fixin 6.3.2006, 14:26
Цитата(_hunter @ 6.3.2006, 11:20 Найти цитируемый пост)
судя по MSDN
Судя по коду, он его включил smile

Автор: _hunter 6.3.2006, 14:55
значит все нормально smile

Автор: Rutti 10.4.2008, 18:04
Да нет. Что-то не так. У меня теже ошибки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)