| 
| 
 | Вопрос # 1 367/ вопрос открыт / | 
 |  Здравствуйте, уважаемые господа!Столкнулся со следующей проблемой. Условиями задачи необходимо,
 чтобы програма выводила на обои рабочего стола картинку (битмэп, например) так,
 как это делается, если установить её "вручную", используя Панель управления -> Экран ->
 Рабочий стол -> Настройка рабочего стола... -> Веб -> Создать.
 Как это лучше сделать? Пробовал использовать интерфейс IActiveDesktop. Выглядело это так:
 
 (см. приложение)
 
 Создание MyDesk проходит нормально, проверено, но функция GetDesktopItem в случае успеха
 должна возвращать ноль, а у меня Er_Code равен -2147024809 (при любом значении
 ItemNumber). Такое впечатление, что в моём коде чего-то не хватает, или я использую функцию
 как-то неправильно. Как по-вашему, в чём может быть причина?
 Заранее благодарен. С уважением, Вячеслав Лымарь.
 Приложение:Переключить в обычный режим uses  ComObj, ShlObj; procedure TForm2.ToolButton3Click(Sender: TObject);var  CompItem: TShComponent;  MyDesk: IActiveDeskTop;  Er_Code, ItemNumber: Integer;begin  MyDesk:= CreateComObject(CLSID_ActiveDesktop) as   ActiveDesktop;  ItemNumber:= 0;	  Er_Code:= MyDesk.GetDesktopItem(ItemNumber,CompItem,0);  Label1.Caption:= InttoSTr(Er_Code);end;  
|  |   Вопрос задал: Lymar V.V. (статус: Посетитель)Вопрос отправлен: 23 февраля 2008, 01:22
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Drozdov D.V. Здравствуйте, Lymar V.V.!Отправляю вам пару примеров работы с IActiveDesktop, правда несовсем по теме.
 
 И простой пример вывода рисунка на рабочий стол он ниже.
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
 Picture: TPicture;
 Desktop: TCanvas;
 X, Y: Integer;
 begin
 
 Picture := TPicture.Create;
 Desktop := TCanvas.Create;
 // Изображение
 Picture.LoadFromFile('1.bmp');
 // Рабочий стол
 Desktop.Handle := GetWindowDC(0);
 // Координаты
 X := 100;
 Y := 100;
 Desktop.Draw(X, Y, Picture.Graphic);
 ReleaseDC(0, Desktop.Handle);
 // Освобождение
 Picture.Free;
 Desktop.Free;
 end;
 
 Удачи!
 Приложение:Переключить в обычный режим  function IsActiveDeskTopOn: Boolean; var h: hWnd; begin h := FindWindow('Progman', nil); h := FindWindowEx(h, 0,             'SHELLDLL_DefView', nil); h := FindWindowEx(h, 0,       'Internet Explorer_Server', nil); Result := h <> 0; end; ------------------------------------ usesComObj, ShlObj, ActiveX;procedure EnableActiveDesktop(bValue: Boolean);constCLSID_ActiveDesktop: TGUID = (D1: $75048700; D2: $EF1F; D3: $11D0;   D4: ($98, $88, $00, $60, $97, $DE, $AC, $F9));varMyObject: IUnknown;ActiveDesk: IActiveDesktop;twpoComponentOpt: TComponentsOpt;beginMyObject := CreateComObject(CLSID_ActiveDesktop);ActiveDesk := MyObject as IActiveDesktop;with twpoComponentOpt dobegin   ZeroMemory(@twpoComponentOpt, SizeOf(TComponentsOpt));   dwSize := SizeOf(twpoComponentOpt);   fEnableComponents := bValue;   // fActiveDesktop := True;end;ActiveDesk.SetDesktopItemOptions(twpoComponentOpt, 0);ActiveDesk.ApplyChanges(AD_APPLY_ALL);end;---------------------------------------------------------- var Wallpaper : string; beginWallpaper := 'C:windowsACD Wallpaper.bmp';SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)end; 
|  | Ответ отправил: Drozdov D.V. (статус: 4-ый класс)Время отправки: 24 февраля 2008, 19:29
 
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |