Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

String and PWideChar   Найти похожие ветки 

 
Alek_1   (2006-07-20 17:04) [0]

Привет, пробую сменить обоину у рабочего стола с помощью вот этой процедурки :) и немного не получается :(.

procedure ChangeActiveWallpaper(name: string);
const
 CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
 ActiveDesktop: IActiveDesktop;
 s: PWideChar;

begin
 ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
   as IActiveDesktop;
 s:=PWideChar(StringReplace(name,"\","\\",[rfReplaceAll]));
 ActiveDesktop.SetWallpaper(s, 0);
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

В чем может быть проблемкка? :)
НАсоклько я понимаю тут что-то с преобразованием со string в pWideChar


 
tesseract ©   (2006-07-20 17:12) [1]

Используй :
function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;


 
Alek_1   (2006-07-20 17:22) [2]

хм, а как им пользоваться? :)
первый параметр понятен, а остальные два?


 
Alek_1   (2006-07-20 17:34) [3]

написал вот такое

procedure ChangeActiveWallpaper(name: string);
const
 CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
 ActiveDesktop: IActiveDesktop;
 wideChars : array of WideChar;
 s: PWideChar;
begin
 ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
   as IActiveDesktop;
 SetLength(wideChars,Length(name));
 s:=StringToWideChar(StringReplace(name,"\","\\",[rfReplaceAll]), wideChars, Length(name)+1);
 ActiveDesktop.SetWallpaper(s, 0);
 ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;


и ругается на несоответствие типов Array and WideChar


 
tesseract ©   (2006-07-20 17:34) [4]

Dest - переменная копировать данные,
DestSize - размер переменной.

Getmem(dest,length(name))
 
StringToWideChar(name, Dest,length(name)):


 
tesseract ©   (2006-07-20 17:36) [5]


> Alek_1   (20.07.06 17:34) [3]


ещё бы  должен быть PWideChar - туда строка пойдёт.


 
Lamer@fools.ua ©   (2006-07-20 17:51) [6]

procedure ChangeActiveWallpaper(name: string);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ActiveDesktop: IActiveDesktop;
s: WideString;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
s:=WideString(StringReplace(name,"\","\\",[rfReplaceAll]));
ActiveDesktop.SetWallpaper(PWideChar(s), 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;


?


 
Alek_1   (2006-07-20 18:16) [7]

2 Lamer@fools.ua: работает :) спасибо :)



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
1-1161334225
alexvan
2006-10-20 12:50
2006.12.03
Вопрос по TCustomDBGrid


15-1163073684
tear
2006-11-09 15:01
2006.12.03
MS SQL: как понять были данные или нет?


15-1163158307
Андрей ББББ
2006-11-10 14:31
2006.12.03
проблемы с Windows XP


2-1163396548
диффур
2006-11-13 08:42
2006.12.03
как организовать цикл по записям в таблице ib


2-1163720755
Basement
2006-11-17 02:45
2006.12.03
Правильно ли использую ZeroMemory ? И можно ли обнулить быстрее ?