Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизПроблема с HOOK N2.Как перехватить? Найти похожие ветки
← →
sucer (2003-04-22 10:09) [0]нужно чтобы:
"Нажимаю на форме минимизировать HOOK пишет "Нажато минимизировать" и форма не минимизируется"
Когда нажмимаю на форме(в моем примере "SPO") крестик(закрыть),минимизировать,изменить размер и также
когда форма становится активной нужно чтобы HOOK ловил эти сообщения и не давал отправить их программе.
Я уже написал HOOK который ловит эти сообщения.HOOK ставлю на конкретнкю программу "SPO".Но как сделать чтобы
он их недал передать в программу?
И как сделать чтобы ловил "Минимизировать"?
Вот код моего HOOK:
library hook_dll1;
uses
Windows,
Messages,
Forms;
const
MMFName: PChar = "MyMMF";
type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: HWND;
end;
var
GlobalData: PGlobalDLLData;
MMFHandle: THandle;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var a:CWPSTRUCT;
begin
{if CWPSTRUCT(Pointer(lParam)^).message=WM_ACTIVATE then
begin
MessageBox(0, "ACTIVATE", "Message", 0);
end;}
if CWPSTRUCT(Pointer(lParam)^).message = WM_CLOSE then
MessageBox(0, "CLOSE", "Message", 0);
if CWPSTRUCT(Pointer(lParam)^).message= WM_SIZE then
MessageBox(0, "SIZE", "Message", 0);
if CWPSTRUCT(Pointer(lParam)^).message= WM_SYSCOMmAND then
BEGIN
if CWPSTRUCT(Pointer(lParam)^).wparam=SC_MINIMIZE then
MessageBox(0, "Minimized", "Message", 0);
end;
{-------------------------------------}
if code = HC_ACTION then
begin
if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then
MessageBox(0, "HOOK1 working !", "Message from Exampel2/Process1", 0);
end;
Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
end;
procedure hook(switch : Boolean) export; stdcall;
var hh:hWnd;
dwProcessId:LongInt;
begin
if switch=true then
begin
hh:=FindWindow("TFrmMain","SPO");
if hh=0 then
begin
MessageBox(0, "No Window", "Error:", 0);
Exit;
end;
dwProcessId:=GetWindowThreadProcessId(hh, nil);
GlobalData^.SysHook := SetWindowsHookEx(WH_CALLWNDPROC{WH_GETMESSAGE}, @SysMsgProc, HInstance,dwProcessId);
if GlobalData^.SysHook <> 0 then
MessageBox(0, "HOOK1 install !", "Message", 0)
else
MessageBox(0, "HOOK1 cannot install !", "Message", 0);
end
else
begin
if UnhookWindowsHookEx(GlobalData^.SysHook) then
MessageBox(0, "HOOK1 disable !", "Message from Exampel2/Process1", 0)
else
MessageBox(0, "HOOK1 cannot disable !", "Message from Exampel2/Process1", 0);
end;
end;
procedure OpenGlobalData();
begin
MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
if MMFHandle = 0 then
MessageBox(0, "Can""t create FileMapping", "Message from Exampel2/Process1", 0);
GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
if GlobalData = nil then
begin
CloseHandle(MMFHandle);
MessageBox(0, "Can""t make MapViewOfFile", "Message from Exampel2/Process1", 0);
end;
end;
procedure CloseGlobalData();
begin
UnmapViewOfFile(GlobalData);
CloseHandle(MMFHandle);
end;
procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;
exports hook;
begin
DLLProc:= @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
← →
Cobalt (2003-04-22 14:28) [1]Изменяй WParam и LParam. Вот так, кажись, точно не уверен, глянь в справке.
← →
Nikolai (2003-04-22 16:12) [2]Случай с WH_CALLWNDPROC вообще тебе не подходит (там только мониторинг разрешен, все изменения игнорируются), а через WH_GETMESSAGE ты не все отловишь
Для твоего случая надо, на мой взгляд, использовать WH_CBT. Соответствующие изменения:
GlobalData^.SysHook := SetWindowsHookEx(WH_CBT, @SysCBTProc, HInstance, dwProcessId);
function SysCBTProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
if code in [HCBT_MOVESIZE, HCBT_ACTIVATE, HCBT_MINMAX] then Result := 1
else Result := 0;
end;
← →
sucer (2003-04-23 08:31) [3]Спасибо!Работает!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c