Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.05;
Скачать: CL | DM;

Вниз

Странный глюк   Найти похожие ветки 

 
}{enon ©   (2003-03-05 16:23) [0]

Есть DLL, которая ловит сообщения и, если это WM_PAINT, посылает моей проге WM_PAINTHOOK (Собственное сообщение). Всё работает (программа получает сообщения и реагирует на них), но глючит таскбар - не вызывается меню "пуск" и контексные менюшки, а свёрнутые окна не восстанавливаются. Кто-нибудь знает, в чём дело?


 
DVM ©   (2003-03-05 16:28) [1]

так ты отделяй свои сообщения от чужих, свои лови, чужие дальше передавай.


 
Игорь Шевченко ©   (2003-03-05 16:32) [2]

Дело в 17-ой строке


 
}{enon ©   (2003-03-05 19:14) [3]

2 DVM
Я так и делаю (вроде бы)

2 Игорь Шевченко
И как она должна выглядеть? Сорри, не дал исходник - инет рухнул вслед за таскбаром :(

Сделал на основе примера с этого сайта:
library Hooks;

uses
SysUtils,
Windows,
Messages,
Forms;

const
MMFName: PChar = "MyMMF";

type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: HWND;
MyAppWnd: HWND;
end;

var
GlobalData: PGlobalDLLData;
MMFHandle: THandle;
WM_PAINTHOOK: Cardinal;

function PaintProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
AppWnd: HWND;
f: textfile;
m: tagMSG;
begin
if code < 0 then
begin
Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Exit;
end;
PeekMessage(m,0,0,0,PM_REMOVE);
if m.message=WM_PAINT then
SendMessage(GlobalData^.MyAppWnd, WM_PAINTHOOK, m.hwnd, 0);
CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Result:= 0;
end;

procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch=true then
begin
GlobalData^.SysHook := SetWindowsHookEx(WH_GETMESSAGE, @PaintProc, HInstance, 0);
GlobalData^.MyAppWnd:= hMainProg;
end
else
UnhookWindowsHookEx(GlobalData^.SysHook)
end;

procedure OpenGlobalData();
begin
WM_PAINTHOOK:= RegisterWindowMessage("WM_PAINTHOOK");
MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
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.



Страницы: 1 вся ветка

Текущий архив: 2003.05.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
14-12936
slaj
2003-04-18 12:17
2003.05.05
Проблема закрытия доступа на ПК отдельного юзера в Win2000 при вк


3-12624
paulsin
2003-04-15 15:29
2003.05.05
SQL


8-12841
reticon
2003-01-28 23:12
2003.05.05
кучу файлов в один


6-12847
AlexRush
2003-03-10 17:12
2003.05.05
Сетевой адаптер - отправка данных в сеть


11-12679
Alexei Dragoner
2002-07-26 18:32
2003.05.05
Еще раз о Form.HasBorder (Form.Handle умер :)