Files
Work/pop/HOLD/HOOKPROC.CPP
2024-08-07 09:16:27 -04:00

276 lines
11 KiB
C++

#include <pop/hookproc.hpp>
#include <common/dde.hpp>
#include <common/mmsystem.hpp>
WinHookProc::WinHookProc(void)
: mPrevHook(0), mhHookWnd(0)
{
}
WinHookProc::~WinHookProc()
{
}
BOOL WinHookProc::hookWin(HWND hWnd)
{
unhookWin();
mhHookWnd=hWnd;
::SetProp(hWnd,(LPSTR)"INSTANCEDATA@@NEARPTR",(HANDLE)((void*)this));
mPrevHook=(WNDPROC)::SetWindowLong(mhHookWnd,winID(),(DWORD)hookProc);
return TRUE;
}
BOOL WinHookProc::unhookWin(void)
{
if(!isOkay()||!mPrevHook)return FALSE;
::SetWindowLong(mhHookWnd,winID(),(DWORD)mPrevHook);
::RemoveProp(mhHookWnd,(LPSTR)"INSTANCEDATA@@NEARPTR");
mPrevHook=0;
mhHookWnd=0;
return TRUE;
}
DWORD WinHookProc::winID(void)const
{
return GWL_WNDPROC;
}
BOOL WinHookProc::isOkay(void)const
{
return (mhHookWnd?TRUE:FALSE);
}
LRESULT WinHookProc::hookProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
WinHookProc *pWinHookProc=(WinHookProc*)::GetProp(hWnd,"INSTANCEDATA@@NEARPTR");
if(!pWinHookProc)return ::DefWindowProc(hWnd,msg,wParam,lParam);
pWinHookProc->windowProcedure(hWnd,msg,wParam,lParam);
return ::CallWindowProc(pWinHookProc->mPrevHook,hWnd,msg,wParam,lParam);
}
void WinHookProc::windowProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_NCCREATE :
if(!installedHandlers(VectorHandler::NCCreateHandler))break;
callHandlers(VectorHandler::NCCreateHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CREATE :
if(!installedHandlers(VectorHandler::CreateHandler))break;
callHandlers(VectorHandler::CreateHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_PAINT :
if(!installedHandlers(VectorHandler::PaintHandler))break;
callHandlers(VectorHandler::PaintHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DRAWITEM :
if(!installedHandlers(VectorHandler::DrawItemHandler))break;
callHandlers(VectorHandler::DrawItemHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_TIMER :
if(!installedHandlers(VectorHandler::TimerHandler))break;
callHandlers(VectorHandler::TimerHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CHAR :
if(!installedHandlers(VectorHandler::CharHandler))break;
callHandlers(VectorHandler::CharHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_COMMAND :
if(!installedHandlers(VectorHandler::CommandHandler))break;
callHandlers(VectorHandler::CommandHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_COMPACTING :
if(!installedHandlers(VectorHandler::CompactingHandler))break;
callHandlers(VectorHandler::CompactingHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_WININICHANGE :
if(!installedHandlers(VectorHandler::WinIniChangeHandler))break;
callHandlers(VectorHandler::WinIniChangeHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_SYSCOLORCHANGE :
if(!installedHandlers(VectorHandler::SysColorChangeHandler))break;
callHandlers(VectorHandler::SysColorChangeHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLOR :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLORMSGBOX :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLOREDIT :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLORLISTBOX :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLORBTN :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLORDLG :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLORSCROLLBAR :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_CTLCOLORSTATIC :
if(!installedHandlers(VectorHandler::ControlColorHandler))break;
callHandlers(VectorHandler::ControlColorHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DDE_INITIATE :
if(!installedHandlers(VectorHandler::DDEInitiateHandler))break;
callHandlers(VectorHandler::DDEInitiateHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DDE_ACK :
if(!installedHandlers(VectorHandler::DDEAckHandler))break;
callHandlers(VectorHandler::DDEAckHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DDE_REQUEST :
if(!installedHandlers(VectorHandler::DDERequestHandler))break;
callHandlers(VectorHandler::DDERequestHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DDE_TERMINATE :
if(!installedHandlers(VectorHandler::DDETerminateHandler))break;
callHandlers(VectorHandler::DDETerminateHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DDE_DATA :
if(!installedHandlers(VectorHandler::DDEDataHandler))break;
callHandlers(VectorHandler::DDEDataHandler,CallbackData(wParam,lParam,hWnd));
break;
case MM_WOM_OPEN :
if(!installedHandlers(VectorHandler::MMOpenHandler))break;
callHandlers(VectorHandler::MMOpenHandler,CallbackData(wParam,lParam,hWnd));
break;
case MM_WOM_CLOSE :
if(!installedHandlers(VectorHandler::MMCloseHandler))break;
callHandlers(VectorHandler::MMCloseHandler,CallbackData(wParam,lParam,hWnd));
break;
case MM_WOM_DONE :
if(!installedHandlers(VectorHandler::MMDoneHandler))break;
callHandlers(VectorHandler::MMDoneHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_LBUTTONDBLCLK :
if(!installedHandlers(VectorHandler::LeftButtonDoubleHandler))break;
callHandlers(VectorHandler::LeftButtonDoubleHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_LBUTTONDOWN :
if(!installedHandlers(VectorHandler::LeftButtonDownHandler))break;
callHandlers(VectorHandler::LeftButtonDownHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_LBUTTONUP :
if(!installedHandlers(VectorHandler::LeftButtonUpHandler))break;
callHandlers(VectorHandler::LeftButtonUpHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_RBUTTONDBLCLK :
if(!installedHandlers(VectorHandler::RightButtonDoubleHandler))break;
callHandlers(VectorHandler::RightButtonDoubleHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_RBUTTONDOWN :
::OutputDebugString("WM_RBUTTONDOWN\n");
if(!installedHandlers(VectorHandler::RightButtonDownHandler))break;
callHandlers(VectorHandler::RightButtonDownHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_RBUTTONUP :
::OutputDebugString("WM_RBUTTONUP\n");
if(!installedHandlers(VectorHandler::RightButtonUpHandler))break;
callHandlers(VectorHandler::RightButtonUpHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_NCLBUTTONUP :
if(!installedHandlers(VectorHandler::NCLeftButtonUpHandler))break;
callHandlers(VectorHandler::NCLeftButtonUpHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_NCLBUTTONDOWN :
if(!installedHandlers(VectorHandler::NCLeftButtonDownHandler))break;
callHandlers(VectorHandler::NCLeftButtonDownHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_NCRBUTTONUP :
if(!installedHandlers(VectorHandler::NCRightButtonUpHandler))break;
callHandlers(VectorHandler::NCRightButtonUpHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_NCRBUTTONDOWN :
if(!installedHandlers(VectorHandler::NCRightButtonDownHandler))break;
callHandlers(VectorHandler::NCRightButtonDownHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_MOUSEMOVE :
if(!installedHandlers(VectorHandler::MouseMoveHandler))break;
callHandlers(VectorHandler::MouseMoveHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_SETFOCUS :
if(!installedHandlers(VectorHandler::SetFocusHandler))break;
callHandlers(VectorHandler::SetFocusHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_SETFONT :
if(!installedHandlers(VectorHandler::SetFontHandler))break;
callHandlers(VectorHandler::SetFontHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_KILLFOCUS :
if(!installedHandlers(VectorHandler::KillFocusHandler))break;
callHandlers(VectorHandler::KillFocusHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_KEYUP :
if(!installedHandlers(VectorHandler::KeyUpHandler))break;
callHandlers(VectorHandler::KeyUpHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_KEYDOWN :
if(!installedHandlers(VectorHandler::KeyDownHandler))break;
callHandlers(VectorHandler::KeyDownHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_GETMINMAXINFO :
if(!installedHandlers(VectorHandler::MinMaxHandler))break;
callHandlers(VectorHandler::MinMaxHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_ENTERIDLE :
if(!installedHandlers(VectorHandler::EnterIdleHandler))break;
callHandlers(VectorHandler::EnterIdleHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_MENUSELECT :
if(!installedHandlers(VectorHandler::MenuSelectHandler))break;
callHandlers(VectorHandler::MenuSelectHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_GETDLGCODE :
if(!installedHandlers(VectorHandler::DialogCodeHandler))break;
callHandlers(VectorHandler::DialogCodeHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_MEASUREITEM :
if(!installedHandlers(VectorHandler::MeasureItemHandler))break;
callHandlers(VectorHandler::MeasureItemHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_VSCROLL :
if(!installedHandlers(VectorHandler::VerticalScrollHandler))break;
callHandlers(VectorHandler::VerticalScrollHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_HSCROLL :
if(!installedHandlers(VectorHandler::HorizontalScrollHandler))break;
callHandlers(VectorHandler::HorizontalScrollHandler,CallbackData(wParam,lParam,hWnd));
break;
#if defined(__FLAT__)
case WM_NOTIFY :
if(!installedHandlers(VectorHandler::NotifyHandler))break;
callHandlers(VectorHandler::NotifyHandler,CallbackData(wParam,lParam,hWnd));
break;
#endif
case WM_SIZE :
if(!installedHandlers(VectorHandler::SizeHandler))break;
callHandlers(VectorHandler::SizeHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DROPFILES :
if(!installedHandlers(VectorHandler::DropFilesHandler))break;
callHandlers(VectorHandler::DropFilesHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_DESTROY :
if(!installedHandlers(VectorHandler::SizeHandler))break;
callHandlers(VectorHandler::DestroyHandler,CallbackData(wParam,lParam,hWnd));
break;
case WM_NCDESTROY :
default :
break;
}
}