.:: Управление
чужими окнами ::.
|
Как я уже писал это будет цикл статей про Управление чужими
окнами, а пока месть самая простая вещь смена заголовка
чужого окна
Для начала какие функции и процедуры нам будут нужны:
Функция FindWindow
Синтаксис:
function FindWindow(ClassName, WindowName: PChar): HWnd;
Описание:
Находит родительское окно верхнего уровня с совпадающими
ClassName и WindowName. Не осуществляет поиск дочерних окон.
Параметры:
::-ClassName: Имя класса окна
(заканчивающееся пустым символом, 0
- если все классы).
::-WindowName: Текстовый заголовок
окна или 0, если все окна.
Возвращает хэндл окна, если нет такого окна то 0.
Функция GetNextWindow
Синтаксис:
function GetNextWindow(Wnd:HWnd,Flag:Word):HWnd;
Описание:
Находит следующее (предыдущее) окно и возвращает его хэндл.
Параметры:
::- Wnd: Хэндл окна.
::- Flag: флаг-какое окно искать
следующее или предыдущее
::- gw_HWndNext следующее окно
::- gw_HWndPrev предыдущее
окно
Возвращает хэндл окна, если нет такого окна то 0.
Функция SetWindowText
Синтаксис:
function SetWindowText(Wnd:HWnd,Str:PChar):Integer;
Описание:
Меняет заголовок окна на Str.
Параметры:
::-Wnd: Хэндл окна.
::-Str: Новый заголовок окна.
Возвращает ненулевое значение если успешно, и если неудача
то 0.
Так ну давайте мы сделаем следующее:
Добавим 1 Edit и 1 Button

В OnClick кнопки Button1
напишем:
Вначале опишем переменную var h:HWnd;
И после begin'a пишем:
h:=FindWindow(0,0);
//то есть заносим в переменную h хэндл найденного окна с
любым //именем класса и любым заголовком окна.
while (h<>0) do begin //пока h не равно 0 делай следующее
if h<>form1.Handle then //если (хэндл)h не равно хэндлу
нашей //программы то
setwindowtext(h,pchar(edit1.Text));//присваиваем найденному
нами //окну имя из edit'a
Application.ProcessMessages;//не жадничаем ресурсы компа.
h:=getnextwindow(h,gw_HWndNext)//заносим в переменную h
хэндл следующего найденного окна.
End; // закрываем цикл.
Приведу полностью листинг программы:
----------------------------Листинг-------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f,h:HWND;
begin
h:=findwindow(0,0);
while (h<>0) do begin
if h<>form1.Handle then
{SendMessage(H,WM_SYSCOMMAND,SC_closE,0);}
setwindowtext(h,pchar(edit1.Text));
Application.ProcessMessages;
h:=getnextwindow(h,gw_HWndNext)
end;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key:
Word;
Shift: TShiftState);
begin
if key=vk_return then form1.Button1Click(sender);
if key=vk_escape then close;
end;
end.
|