Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 367

/ вопрос открыт /

Здравствуйте, уважаемые господа!
Столкнулся со следующей проблемой. Условиями задачи необходимо,
чтобы програма выводила на обои рабочего стола картинку (битмэп, например) так,
как это делается, если установить её "вручную", используя Панель управления -> Экран ->
Рабочий стол -> Настройка рабочего стола... -> Веб -> Создать.
Как это лучше сделать? Пробовал использовать интерфейс IActiveDesktop. Выглядело это так:

(см. приложение)

Создание MyDesk проходит нормально, проверено, но функция GetDesktopItem в случае успеха
должна возвращать ноль, а у меня Er_Code равен -2147024809 (при любом значении
ItemNumber). Такое впечатление, что в моём коде чего-то не хватает, или я использую функцию
как-то неправильно. Как по-вашему, в чём может быть причина?
Заранее благодарен. С уважением, Вячеслав Лымарь.

Приложение:
  1. uses
  2. ComObj, ShlObj;
  3.  
  4. procedure TForm2.ToolButton3Click(Sender: TObject);
  5. var
  6. CompItem: TShComponent;
  7. MyDesk: IActiveDeskTop;
  8. Er_Code, ItemNumber: Integer;
  9. begin
  10. MyDesk:= CreateComObject(CLSID_ActiveDesktop) as ActiveDesktop;
  11. ItemNumber:= 0;
  12. Er_Code:= MyDesk.GetDesktopItem(ItemNumber,CompItem,0);
  13. Label1.Caption:= InttoSTr(Er_Code);
  14. end;
  15.  
  16.  


Lymar V.V. Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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;

Удачи!

Приложение:
  1.  
  2. function IsActiveDeskTopOn: Boolean;
  3. var
  4. h: hWnd;
  5. begin
  6. h := FindWindow('Progman', nil);
  7. h := FindWindowEx(h, 0,
  8. 'SHELLDLL_DefView', nil);
  9. h := FindWindowEx(h, 0,
  10. 'Internet Explorer_Server', nil);
  11. Result := h <> 0;
  12. end;
  13. ------------------------------------
  14.  
  15. uses
  16. ComObj, ShlObj, ActiveX;
  17. procedure EnableActiveDesktop(bValue: Boolean);
  18. const
  19. CLSID_ActiveDesktop: TGUID = (D1: $75048700; D2: $EF1F; D3: $11D0;
  20. D4: ($98, $88, $00, $60, $97, $DE, $AC, $F9));
  21. var
  22. MyObject: IUnknown;
  23. ActiveDesk: IActiveDesktop;
  24. twpoComponentOpt: TComponentsOpt;
  25. begin
  26. MyObject := CreateComObject(CLSID_ActiveDesktop);
  27. ActiveDesk := MyObject as IActiveDesktop;
  28. with twpoComponentOpt do
  29. begin
  30. ZeroMemory(@twpoComponentOpt, SizeOf(TComponentsOpt));
  31. dwSize := SizeOf(twpoComponentOpt);
  32. fEnableComponents := bValue;
  33. // fActiveDesktop := True;
  34. end;
  35. ActiveDesk.SetDesktopItemOptions(twpoComponentOpt, 0);
  36. ActiveDesk.ApplyChanges(AD_APPLY_ALL);
  37. end;
  38. ----------------------------------------------------------
  39.  
  40. var Wallpaper : string;
  41.  
  42. begin
  43. Wallpaper := 'C:windowsACD Wallpaper.bmp';
  44. SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
  45. end;
  46.  


Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 24 февраля 2008, 19:29


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 октября 2017, 23:47
Выполнено за 0.03 сек.
Рейтинг@Mail.ru