www.pudn.com > LastTray_Jpeg.rar > MouseP.cpp


// MouseP.cpp : Defines the initialization routines for the DLL. 
// 
 
#include "stdafx.h" 
#include  
#include "MouseP.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
#pragma data_seg("mydata") 
     HHOOK glhHook=NULL;         //安装的鼠标勾子句柄  
     HINSTANCE glhInstance=NULL; //DLL实例句柄  
	 UINT uAAA; 
     #pragma data_seg() 
 
static AFX_EXTENSION_MODULE MousePDLL = { 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("MOUSEP.DLL Initializing!\n"); 
		 
		// Extension DLL one-time initialization 
		if (!AfxInitExtensionModule(MousePDLL, 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(MousePDLL); 
		glhInstance=hInstance; 
		uAAA = RegisterWindowMessage("my-message"); 
	} 
	else if (dwReason == DLL_PROCESS_DETACH) 
	{ 
		TRACE0("MOUSEP.DLL Terminating!\n"); 
		// Terminate the library before destructors are called 
		AfxTermExtensionModule(MousePDLL); 
	} 
	return 1;   // ok 
} 
 
 
LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam) 
{ 
     LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *)lparam; 
     if (nCode>=0) 
     { 
       if(wparam==WM_MOUSEMOVE)  
	   { 
			  CPoint pCurrent1; 
			  GetCursorPos(&pCurrent1); 
			  ::SendMessage(HWND_BROADCAST, uAAA, 0, MAKELPARAM(pCurrent1.x, pCurrent1.y));  
 
 
	   } 
	   else if(wparam==WM_RBUTTONDOWN) 
	   {       
			  CPoint pCurrent2; 
			  GetCursorPos(&pCurrent2); 
              ::SendMessage(HWND_BROADCAST, uAAA, 1, MAKELPARAM(pCurrent2.x, pCurrent2.y)) ; 
	   } 
	   else if(wparam==WM_LBUTTONDBLCLK) 
	   { 
			  CPoint pCurrent3; 
			  GetCursorPos(&pCurrent3); 
              ::SendMessage(HWND_BROADCAST, uAAA, 2, MAKELPARAM(pCurrent3.x, pCurrent3.y)) ; 
	   } 
     } 
     return CallNextHookEx(glhHook,nCode,wparam,lparam); 
     //继续传递消息 
} 
 
CMouseHook::CMouseHook() 
{ 
} 
 
CMouseHook::~CMouseHook() 
{ 
	   if(glhHook) 
	    UnhookWindowsHookEx(glhHook); 
} 
 
BOOL CMouseHook::StartHook() 
{ 
       BOOL bResult=FALSE; 
	   glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0); 
	   if(glhHook!=NULL) 
		bResult=TRUE; 
	   return bResult; 
} 
 
BOOL CMouseHook::StopHook() 
{ 
    BOOL bResult=FALSE; 
	if(glhHook) 
	{ 
		bResult= UnhookWindowsHookEx(glhHook); 
		if(bResult) 
			glhHook=NULL; 
	} 
	return bResult; 
}