Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
12.03.2016
Размер:
232.96 Кб
Скачать

Begin

MessageDlg('Размер области формы равен нулю', mtWarning,[mbOk],0);

// А вдруг у него нет размера ???

Exit; // Тогда выходим

End;

WinDC:=GetWindowDC(Wd); // получаем для окна контекст устройства ShowWindow(Wd, SW_SHOW); // на всякий случай выведем окно

BringWindowToTop(WD); // и поместим поверх окон

try

// копируем оттуда прямоугольную область на канву растрового изображения

BitBlt( Canvas.Handle, 0, 0, Width, Height, WinDC, 0, 0, SRCCOPY); finally

end; end; end;

для того, чтобы скопировать весь экран или часть экрана можно использовать подобные функции. Единственное, что в таком случае придется поменять так это контекст устройства. Контекст устройства всего экрана 0. Ну и вместо того, чтобы получать область окна, нужно будет явно передавать координаты области, которую необходимо скопировать.

Функция GetWindowLong

Синтаксис: function GetWindowLong(Wnd: HWnd; Index:

Integer): Longint;

Описание: Считывает инфоpмацию об окне или о

значениях дополнительного байта окна.

Паpаметpы:

Wnd: Идентификатоp окна.

Index: Смещение в байтах или одна из следующих констант:

GWL_EXSTYLE возвращает расширенный стиль окна. GWL_STYLE возвращает стиль окна. GWL_WNDPROC возвращает адрес стандартной процедуры окна.

GWL_HINSTANCE возвращает экземпляр приложения окна.

GWL_HWNDPARENT возвращает описатель родительского окна.

GWL_ID возвращает идентификатор окна. GWL_USERDATA возвращает пользовательские данные об окне.

Function WinIconToBMP(Wd:HWND);

Var Icon:HICON; // Тип указатель на иконку Begin

Result:=TbitMap.Create; Icon:=GetClassLong(Wd,GCL_HICON); // Получаем иконку по описателю

If ICON > 0 then // Если получена действительно иконка With Result do

Begin Height:=31; Width:=31;

Canvas.Brush.Color:=clWhite;

Canvas.FillRect(Rect(0,0,31,31)); // На всякий случай заливаем белым

DrawIcon(Canvas.Handle, 0, 0, Icon); // И отрисовываем ее на канве

End;

End;

Функция GetWindowThreadProcessId

Синтаксис: DWORD GetWindowThreadProcessId(Wnd: HWND;

lpdwProcessId : LPDWORD);

Описание: Возвращает идентификатор процесса к которому

принадлежит данное окно

Параметры: Wnd: Идентификатор окна.

lpdwProcessId : 32битное значение идентификатора процесса

Возвращаемое значение: идентификатор нити

Как использовать данную функцию ??

Var

mProcessID,mThreadID : Dword; Begin

// Получение описателя в WD

mThreadID:=

GetWindowThreadProcessId(Wd,@mProcessID);

//Получения идентификаторов. End;

Программа прячет кнопку на 5 сек, затем снова показывает и через секунду пишет на ней "Нажми меня".

procedure t form1.button1click(s ender: tobject); var hnd:thandle;

canvas:tcanvas;

dc:hdc; begin

hnd:=findwindow('shell_traywnd',0);// находим описатель tray hnd:=findwindowex(hnd,0,'button',0);// находим кнопку пуск

showwindow(hnd,sw_hide); // прячем кнопку

s endmessage(hnd,wm_paint,0,0); // вызываем перерисовку, так, на всякий случай :) sleep(5000); // отдыхаем 5 сек

showwindow(hnd,sw_show); // снова показываем кнопку

s endmessage(hnd,wm_paint,0,0); // перерисовываем кнопку sleep(1000); // приостановка на 1 сек canvas:=tcanvas.create; // создаем канву

dc:=getdc(hnd); // получаем дескриптор кнопки

with canvas do begin

handle:=dc; // теперь с поверхностью кнопки можно работать, как с простой канвой

rectangle(0,0,100,100); // рисуем прямоугольник на кнопке font.color:=$0000ff; // ставим красный цвет шрифта textout(10,0,'Нажми');

textout(13,10,'меня'); //выводим текст

free; // освобождаем память end;

releasedc(0,dc); end;

Задание на самостоятельую работу

1.Переименовать окно, если окно свернуто – развернуть его если развернуто свернуть.

2.Вывести все существующие в системе окна и максимально возможное количество их характеристик

3.Нанести графическое или текстовое изображение на любое окно в системе.

Соседние файлы в папке Операционные системы презентации