-
Помогите с таким вопросом. Код ниже ставит картинку на рабочий стол из того каталога, в котором прога. Но при варианте, когда путь содержит русские папки - ничего не происходит. Помогите разобраться.
procedure ChangeActiveWallpaper; const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}'; var ActiveDesktop: IActiveDesktop; s: string; wideChars: array[0..255] of WideChar; begin s := GetCurrentDir+'\wallpaper.html'; StringToWideChar(s, wideChars, 255); ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop; ActiveDesktop.SetWallpaper(widechars, 0); ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE); end;
-
Проблема на Windows XP не повторяется, картинка меняется, в проверке использовался не html, а jpg.
-
ну во-первых интересует именно html, во-вторых попробуй запустить из какого- нибудь d:\русская папка. Не сработает.
-
Проверяемый код
procedure ChangeActiveWallpaper;
const
CLSID_ActiveDesktop: TGUID = '';
var
ActiveDesktop: IActiveDesktop;
s: string;
wideChars: array[0..255] of WideChar;
begin
s := 'C:\Русский каталог\Autumn.jpg';
StringToWideChar(s, wideChars, 255);
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
ActiveDesktop.SetWallpaper(widechars, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
procedure TForm40.Button1Click(Sender: TObject);
begin
ChangeActiveWallpaper
end;
-
Когда ставится статическая картинка - это несколько иная история.. Мне нужно html и в ней ембеднут флеш объект.
-
Я так понимаю проблема где-то в этом месте s := GetCurrentDir+'\wallpaper.html'; StringToWideChar(s, wideChars, 255); Но объяснить не могу
-
StringToWideChar(s, wideChars, 255);
wideChars читаемый ?
-
у меня да, но у меня и все работает на машине... глюк плавающий, надо вылавливать...
-
?
procedure EnableActiveDesktop(bEnabled : Boolean);
const
CLSID_ActiveDesktop : TGUID = '';
var
ActiveDesktop : IActiveDesktop;
ComponentsOpt : TComponentsOpt;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
ComponentsOpt.dwSize := SizeOf(ComponentsOpt);
ComponentsOpt.fEnableComponents := bEnabled;
ComponentsOpt.fActiveDesktop := bEnabled;
ActiveDesktop.SetDesktopItemOptions(ComponentsOpt, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_REFRESH);
end;
-
Ну это я делаю само собой
-
А если проверить результат ActiveDesktop.SetWallpaper ?
-
Посмотрю,.. но проблема мне кажется в конвертации пути в юникод
-
неплохо! а на счет картинок могу рекомендовать сайт с хорошими обоями на разную тематику www.anywalls.com/new/
-
Как бэ... Vista, Seven & 8 не поддерживают HTML-страницу на рабочем столе.
-
-
амм... И чего? О_о
|