这段代码有什么问题?
这是一个全局键盘钩子的dll实现
为了方便,将所有无关代码都删掉了
KeyBoardProc好像不能执行
大侠看看有什么问题
// keyHook.cpp
#include "stdafx.h"
#include <afxdllx.h>
#include "KeyHook.h"
#define DLLEXPORT _declspec(dllexport)
//共享数据段
#pragma data_seg("mydata")
HHOOK glhHook=NULL;//安装的键盘钩子句柄
#pragma data_seg()
HINSTANCE glhInstance=NULL;//钩子实例句柄
static AFX_EXTENSION_MODULE KeyHookDLL = { NULL, NULL };
//DLLMain为MFC生成代码,内部有效语句为将hInstance参数传递给glhInstance
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
……
glhInstance=hInstance;
……
CKeyHook::CKeyHook()
{
TRACE0("CKeyHook construction\n");
}
CKeyHook::~CKeyHook()
{
TRACE0("CKeyHook unconstruction\n");
stophook();
}
//安装钩子
BOOL CKeyHook::starthook()
{
BOOL bResult=FALSE;
glhHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);
if(glhHook!=NULL)
bResult=TRUE;
TACE0("Hook started.\n");
return bResult;
}
// 对 钩子
BOOL CKeyHook::stophook()
{
BOOL bResult=FALSE;
if(glhHook)
{
bResult= UnhookWindowsHookEx(glhHook);
if(bResult)
{
glhHook=NULL;
}
}
TRACE0("Hook stoped.\n");
return bResult;
}
//钩子函数实现
extern "C" DLLEXPORT LRESULT CALLBACK WINAPI KeyboardProc(int nCode,WPARAM
wParam,LPARAM lParam)
{
TCHAR ch;
TRACE0("This is in the CALLBACK function\n");
HWND hWndTarget = FindWindow("SpyServer",NULL);
if (nCode>0&&IsWindow(hWndTarget))
{
ch=(TCHAR)wParam;
//如果按键为有效字符,给目标窗口发WM_CHAR消息
if((0x30<ch&&ch<0x39)||(0x41<ch&&ch<0x5A))
{
PostMessage(hWndTarget, WM_CHAR, wParam,lParam);
TRACE0("PostMessage!\n");
}
}
return CallNextHookEx(glhHook, nCode, wParam,lParam);
}