Главная » Win32API примеры работы
win32 api. Работа с окнами.
 Для начала определимся в некоторых необходимых функциях:

1)
 Код:
 function sendmessage( hwnd:hwnd; // описатель окна, которому мы отсылаем сообщение
 msg:cardinal; // код сообщения, которое должно быть послано окну
 wparam:wparam; // первый параметр сообщения
 lparam:lparam // второй параметр сообщения
 ):lresult;
 
 Функция отсылает окну с описателем hwnd сообщение, определённое uint. Результат функции зависит от сообщения и от того, что нам "ответят"
 
 2)
 Код:
 function findwindow( lpclassname:pchar; // указатель на имя класса
 lpwindowname:pchar // указатель на заголовок окна
 ):hwnd;
 
 Функция ищет окно класса lpclassname(0- для любого класса) с заголовком lpwindowname(0- с любым заголовком) в верхнем уровне. В результате успешного поиска возвращается описатель найденного окна, в противном случае 0.
 
 3)
 Код:
 function findwindowex( hwndparent:hwnd; // описатель родителя окна
 hwndchildafter:hwnd; // описатель дочернего окна после которого по z-order идет поиск
 lpszclass:pchar; // имя класса окна, которое мы хотим найти
 lpszwindow:pchar // имя окна
 ):hwnd;
 
 
 4) Код:
 function getwindow( wnd: hwnd; // исходное окно
 cmd: word // параметр для определения окна
 ):hwnd;
 
 Функция считывает окно с отношением, указанным в cmd, в окно, указанное в wnd. Возвращает идентификатоp окна или 0, если окно не найдено или в cmd невеpное значение.
 
 5) Код:
 function getwindowtext( wnd: hwnd; // идентификатоp окна или оpгана упpавления
 str: pchar; // буфеp, пpинимающий стpоку
 maxcount: integer // размеp буфеpа str
 ): integer;
 
 Функция копиpует в str заголовок окна или текст оpгана упpавления. В качестве результата возвращается фактическое число скопиpованных байт или 0, если текст отсутствует.
 
 
 Примеры работы с окнами по winapi
 
 Пример 1
 
 В данном примере мы находим все окна, открытые в системе
 Код:
 procedure getwindows(list:tstrings);
 var hnd:thandle;
 b:array[0..255]of char;
 s:string;
 begin
 hnd:=0;
 repeat
 zeromemory(@b,sizeof(b)); // чистим буфер
 getwindowtext(hnd,@b,255); // получаем текст окна
 s:=strpas(@b);
 if s='' then s:='notext';
 zeromemory(@b,sizeof(b));
 getclassname(hnd,@b,255); // получаем имя класса окна
 s:=s+' - ['+strpas(@b)+']';
 list.add(s); // добавляем в список
 hnd:=findwindowex(0,hnd,0,0); // определяем следующее окно
 until hnd=0;
 end;
 
 procedure tform1.button1click(sender: tobject);
 begin
 getwindows(listbox1.items); // заполняем список
 end;
 
 
 Пример 2
 
 Не знаю почему, но обычно для примеров по winapi используют кнопку "Пуск". Не будем выделяться
 Программа прячет кнопку на 5 сек, затем снова показывает и через секунду пишет на ней "Нажми меня".
 Код:
 procedure tform1.button1click(sender: 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); // прячем кнопку
 sendmessage(hnd,wm_paint,0,0); // вызываем перерисовку, так, на всякий случай smile
 sleep(5000); // отдыхаем 5 сек.
 showwindow(hnd,sw_show); // снова показываем кнопку
 sendmessage(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; Категория: Языки программирования | Просмотров: 146 Маленькие игры по гостевому byfly скачать бесплатно.