Не могу сменить картинку на раб столе:
Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop', 'Wallpaper', reg_str);
Reg.WriteString('desktop', 'TileWallpaper', reg_type_scr1);
Reg.WriteString('desktop', 'WallpaperStyle', reg_type_scr2);
Reg.Free;
Работает только если картинка в формате *.bmp а мне надо в jpg.
C jpeg-ом в XP экран становится черным а в 98 просто ничего не происходит
Пробовал обновить Экран
hDesktop := FindWindowEx(FindWindowEx(FindWindow('Progman', 'Program Manager'), 0,'SHELLDLL_DefView', ''), 0, 'SysListView32', '');
PostMessage(hDesktop, WM_KEYDOWN, VK_F5, 0);
PostMessage(hDesktop, WM_KEYUP, VK_F5, 1 shl 31);
Тоже ничего что делать
Здравствуйте, KolanT, Вы писали:
KT>Не могу сменить картинку на раб столе:
[]
KT>Тоже ничего что делать
Первое: если менять картинку на рабочем столе, а картинка в формате BMP, то лучше все-же юзать SystemParametersInfo с параметром SPI_SETDESKWALLPAPER — это все-же пограмотней, чем напрямую писать в ини-файл, ведь никому неизвестно, что у М$ на уме
Второе: если хотите картинку в формате JPEG, то вам прямая дорога в хелт по Active Desktop, и, в частности, хелп по интерфейсу IActiveDesktop и его методу SetWallpaper. Естественно, что в этом случае Active Desktop должен быть включен на компе у юзера.
Все разобрался вот так надо (если кому интересно)
procedure ChangeWallpaper(Path:PwideChar);
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ActiveDesktop: IActiveDesktop;
begin
if path <> '' then
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)as IActiveDesktop;
ActiveDesktop.SetWallpaper(path, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end
else exit;
end;
А в PwideChar переводить вот так:
function StringToPWide( sStr: string; var iNewSize: integer ): PWideChar;
var
pw : PWideChar;
iSize : integer;
begin
iSize := Length( sStr ) + 1;
iNewSize := iSize * 2;
pw := AllocMem( iNewSize );
MultiByteToWideChar( CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize );
Result := pw;
end;