www.pudn.com > Kingsoft-Hook.rar > Mousehook.cpp
// Mousehook.cpp : Defines the initialization routines for the DLL. // #include "stdafx.h" #include#include "Mousehook.h" #include "windows.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /*********************************/ #pragma data_seg("mydata") HWND glhPrevTarWnd=NULL; HWND glhDisplayWnd=NULL; HHOOK glhHook=NULL; HINSTANCE glhInstance=NULL; #pragma data_seg() /************************************/ static AFX_EXTENSION_MODULE MousehookDLL = { NULL, NULL }; extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { // Remove this if you use lpReserved UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH) { TRACE0("MOUSEHOOK.DLL Initializing!\n"); // Extension DLL one-time initialization if (!AfxInitExtensionModule(MousehookDLL, hInstance)) return 0; // Insert this DLL into the resource chain // NOTE: If this Extension DLL is being implicitly linked to by // an MFC Regular DLL (such as an ActiveX Control) // instead of an MFC application, then you will want to // remove this line from DllMain and put it in a separate // function exported from this Extension DLL. The Regular DLL // that uses this Extension DLL should then explicitly call that // function to initialize this Extension DLL. Otherwise, // the CDynLinkLibrary object will not be attached to the // Regular DLL's resource chain, and serious problems will // result. new CDynLinkLibrary(MousehookDLL); glhInstance=hInstance; } else if (dwReason == DLL_PROCESS_DETACH) { TRACE0("MOUSEHOOK.DLL Terminating!\n"); // Terminate the library before destructors are called AfxTermExtensionModule(MousehookDLL); } return 1; // ok } Cmousehook::Cmousehook() { } Cmousehook::~Cmousehook() { stophook(); } LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam) { LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR*)lparam; if(nCode>=0) { HWND glhTargetWnd=pMouseHook->hwnd; HWND ParentWnd=glhTargetWnd; while (ParentWnd!=NULL) { glhTargetWnd=ParentWnd; ParentWnd=GetParent(glhTargetWnd); } if(glhTargetWnd!=glhPrevTarWnd) { char szCaption[100]; GetWindowText(glhTargetWnd,szCaption,100); if(IsWindow(glhDisplayWnd)) SendMessage(glhDisplayWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption); glhPrevTarWnd=glhTargetWnd; } } return CallNextHookEx(glhHook,nCode,wparam,lparam); } BOOL Cmousehook::starthook(HWND hWnd) { BOOL bResult=FALSE; glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0); if (glhHook!=NULL) { bResult=TRUE; } glhDisplayWnd=hWnd; return bResult; } BOOL Cmousehook::stophook() { BOOL bResult=FALSE; if (glhHook) { bResult=UnhookWindowsHookEx(glhHook); if(bResult) { glhPrevTarWnd=NULL; glhDisplayWnd=NULL; glhHook=NULL; } } return bResult; }