创建WH_MOUE全局钩子,可以正常的生成DLL
在程序中加载,启动程序却没有任何响应,为什么呢?
各位帮忙啊!
dll中代码如下:
//Mousehook.h
#ifndef _MOUSEHOOK_H
#define _MOUSEHOOK_H
class AFX_EXT_CLASS CMouseHook: public CObject
{
public:
CMouseHook();
~CMouseHook();
//Install Hook
BOOL StartHook(HWND hWnd);
//Release Hook
BOOL StopHook();
protected:
private:
};
#endif
// MouseHook.cpp : Defines the initialization routines for the DLL.
//#include "stdafx.h"
#include <afxdllx.h>
#include "Mousehook.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif#pragma data_seg("Share")
HWND glhPrevTarWnd = NULL;
HWND glhDisplayWnd = NULL;
HHOOK glhHook = NULL;
HINSTANCE glhInstance = NULL;
#pragma data_seg() #pragma comment(linker, "/SECTION:Share,RWS") 
static AFX_EXTENSION_MODULE MouseHookDLL = { NULL, NULL };
LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam); 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();
}BOOL CMouseHook::StartHook(HWND hWnd)
{
BOOL bResult = FALSE;
glhDisplayWnd = hWnd;
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)
{
glhHook = NULL;
glhPrevTarWnd = NULL;
glhDisplayWnd = NULL;
}
}
return bResult;
}LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam)
{
LPMOUSEHOOKSTRUCT lpMouseHook = (LPMOUSEHOOKSTRUCT)lParam;
if(code >= 0)
{
HWND glhTargetWnd = lpMouseHook->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, code, wParam, lParam);
}