Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие минимизации другого окна. [D7, WinXP]


demonyator ©   (2003-05-25 15:57:00) 

Как отлавливать оконные события для чужих окон. Например: наблюдать за окном Delphi 7 и когда оно будет свёрнуто пользователем - развернуть его опять....


demonyator   (2003-05-26 18:40:00) [1]

спасибо всем - буду еб***ся :)


Song   (2003-05-25 22:36:00) [2]

>>а если необходимо отлавливать все видимые окна системы?
Логично. Хук на сообщения всех окон.


Jack-of-shadow   (2003-05-25 21:46:00) [3]

Вот небольщой пример dll, исключив специфику, получишь то, что надо:

library HookLib;

uses
Windows;

var
Handle: THandle = 0;
Hook: Cardinal = 0;
ThreadControl: boolean;

function RemHook: boolean; forward;

function CBTProc(nCode: Integer; WParam,LParam: Cardinal): LongInt; stdcall;
var Prevent: boolean;
P: TPoint;
begin
Prevent := False;
if (nCode = HCBT_SYSCOMMAND) then
begin
GetCursorPos(P);
if (WindowFromPoint(P) = Handle) or ThreadControl then
{а вот проверка: то ли это окно, которое надо ловить. Убрать её - и будет для всей системы работать. Однако, пристрелил бы того, кто б меня заставил работать на компе с такими хуками для всей системы..)}
case WParam of
SC_MAXIMIZE: Prevent := True;
SC_MINIMIZE: Prevent := True;
end;
end;
if Prevent then Result := 1 else
Result := CallNextHookEx(Hook,nCode,WParam,LParam);
end;

function SetHook(WndHandle: THandle; ThreadCtrl: boolean; PHookId: PCardinal = nil): boolean;
begin
ThreadControl := ThreadCtrl;
if Hook = 0 then
begin
Handle := WndHandle;
Hook := SetWindowsHookEx(WH_CBT,@CBTProc,HInstance,GetWindowThreadProcessId(WndHandle));
if PHookId <> nil then PHookId^ := Hook;
end;
Result := Hook <> 0;
if Result then SetWindowText(Handle,"Hook activated")
end;

function RemHook: boolean;
begin
if Hook <> 0 then
begin
UnhookWindowsHookEx(Hook);
Hook := 0;
end;
Result := Hook = 0;
if Result then SetWindowText(Handle,"Hook deactivated")
end;

exports CBTProc, SetHook, RemHook;

begin
end.


demonyator   (2003-05-25 20:14:00) [4]


> Song

а если необходимо отлавливать все видимые окна системы?


Song   (2003-05-25 16:10:00) [5]

Хук на сообщение того окна.


Наверх

Титульная страница Поиск, карта сайта Написать письмо