Полностью согласен с vadimiron'ом
А теперь по делу (если уже,правда,не поздно).
megad
А почему бы тебе не использовать hook следующим образом:
Код:
var
SysHook : HHook;
Wnd : HWND;
function MyHookProc(Code : Integer; wParam : WORD; lParam : LongInt) : LongInt; stdcall; // Основная функция обработки ловушки
begin
CallNextHookEx(SysHook, Code, wParam, lParam); // Передаём сообщение другим ловушкам в системе
{ Начинаем поверку поступившего сообщения }
if Code = WM_CONTEXTMENU then
begin
Wnd := TMsg(Pointer(lParam)^).hwnd;
{ Тут мы получаем идентификатор окна,сгенерировавшего сообщение - что тебе походу и надо,а дальше
могут следовать определённые проверки,и в конце-концов мы должны быть в состоянии изменять окно... }
SendMessage(Wnd, msg, wParam, lParam);
InvalidateRect(Wnd, nil, True); // ну, и перерисовать окно
end;
end; // MyHookProc
begin
{ Устанавливаем ловушку }
SysHook := SetWindowsHookEx(WH_GETMESSAGE, // ловим все сообщения
@MyHookProc, // указатель на нашу функцию-обработчик
HInstance, // Указатель на приложение
0 // Идентификатор потока (тут используется текущий)
);
end;
...в общем я предложил,а ты сам смотри - подходит это тебе или нет.