.:: NAVIGATION::.

:: Главная

:: Статьи

:: FAQ

:: Ссылки

:: Форум
:: Мой E-mail
Site Design By: rOOse

 

 

 

 

.::.:.::...:::Статьи :::...::.:.::.
         
.:: Управление чужими окнами ::.

Как я уже писал это будет цикл статей про Управление чужими окнами, а пока месть самая простая вещь смена заголовка чужого окна

Для начала какие функции и процедуры нам будут нужны:

Функция 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.

   

 

 

 

Hosted by uCoz