![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие минимизации другого окна. [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]Хук на сообщение того окна.