|
Вопрос # 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;
- ------------------------------------
-
- uses
- ComObj, ShlObj, ActiveX;
- procedure EnableActiveDesktop(bValue: Boolean);
- const
- CLSID_ActiveDesktop: TGUID = (D1: $75048700; D2: $EF1F; D3: $11D0;
- D4: ($98, $88, $00, $60, $97, $DE, $AC, $F9));
- var
- MyObject: IUnknown;
- ActiveDesk: IActiveDesktop;
- twpoComponentOpt: TComponentsOpt;
- begin
- MyObject := CreateComObject(CLSID_ActiveDesktop);
- ActiveDesk := MyObject as IActiveDesktop;
- with twpoComponentOpt do
- begin
- 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;
-
- begin
- Wallpaper := 'C:windowsACD Wallpaper.bmp';
- SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
- end;
-
 |
Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 24 февраля 2008, 19:29
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|