Подскажите, как я могу перехватить сообщение wm_close, посланное окну чужого приложения. Сейчас делаю так (может вместо wh_cbt надо использовать что-то ещё?):
function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var msg: PEVENTMSG;
begin
form1.label2.caption:=inttostr(code);
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
form1.label1.caption:=inttostr(msg.message);
if msg.message=wm_close then form1.caption='есть';
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fnd:=findwindow(nil,'Калькулятор');
//showmessage(inttostr(fnd));
gwd:=GetWindowThreadProcessId(fnd,nil);
//showmessage(inttostr(gwd));
HookHandle := SetWindowsHookEx(wh_cbt, @HookProc, HInstance, gwd);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle);
end;
function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var msg: PEVENTMSG;
begin
form1.label2.caption:=inttostr(code);
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
form1.label1.caption:=inttostr(msg.message);
if msg.message=wm_close then form1.caption='есть';
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fnd:=findwindow(nil,'Калькулятор');
//showmessage(inttostr(fnd));
gwd:=GetWindowThreadProcessId(fnd,nil);
//showmessage(inttostr(gwd));
HookHandle := SetWindowsHookEx(wh_cbt, @HookProc, HInstance, gwd);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle);
end;