鼠标钩子响应的奇怪问题!!!

qingdujun
博客专家认证
2014-05-15 03:26:56
先上代码,问题在下面~~~
这个是系统钩子dll:
#define _WIN32_WINNT 0x0500   // PKBDLLHOOKSTRUCT
#include <windows.h>

//设置g_hWnd共享,禁止dll拷贝g_hWnd
#pragma data_seg("MyHook")
HWND g_hWnd = NULL; //窗口句柄
#pragma data_seg()
#pragma comment(linker,"/section:MyHook,RWS")

HHOOK g_hlowKeyHook = NULL; //低级键盘钩子句柄
HHOOK g_hMouse = NULL; //鼠标钩子句柄
HHOOK g_hKeyboard = NULL; //键盘钩子句柄

//屏蔽所有鼠标消息
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return 1;
}

//屏蔽所有键盘消息(不包括功能键)
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (wParam == VK_F8) // 后门
{
SendMessage(g_hWnd, WM_CLOSE, 0, 0); //发送关闭主窗体消息
//::MessageBox(NULL,"触发钩子后门程序,正在卸载钩子~~关闭程序","提示",MB_OK);
UnhookWindowsHookEx(g_hlowKeyHook); //卸载低级键盘钩子
UnhookWindowsHookEx(g_hMouse); //卸载鼠标钩子
UnhookWindowsHookEx(g_hKeyboard); //卸载键盘钩子
}
else
return 1;
}

//低级键盘钩子
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
bool isClick = false;
PKBDLLHOOKSTRUCT LowKey = NULL; //该结构体包含底层键盘输入事件的信息

if (nCode == HC_ACTION) //HC_ACTION 表示有消息
{
LowKey = (PKBDLLHOOKSTRUCT)lParam;
switch (wParam)
{
case WM_KEYDOWN: isClick = 0; break;
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
{ // 屏蔽Win
isClick = (LowKey->vkCode == VK_LWIN) || (LowKey->vkCode == VK_RWIN) ||
//屏蔽Alt+F4
((LowKey->vkCode == VK_F4) && ((LowKey->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Alt+Tab
((LowKey->vkCode == VK_TAB) && ((LowKey->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Alt+Esc
((LowKey->vkCode == VK_ESCAPE) && ((LowKey->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Ctrl+Esc
((LowKey->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));
break;
}
default:
break;
}
}
if (isClick)
return 1;
else
CallNextHookEx(g_hlowKeyHook,nCode,wParam,lParam); //传给下一个钩子
}

//安装钩子
void SetHook(HWND hWnd)
{
g_hWnd = hWnd; //越后安装的钩子,越先获得控制权
//安装低级键盘钩子 优先级3
g_hlowKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle("GHookDll"),0);
//安装键盘钩子 优先级2
g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("GHookDll"),0);
//安装鼠标钩子 优先级1
g_hMouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("GHookDll"),0);
}

这是编写dll时写的.def:
LIBRARY GHookDll
EXPORTS
SetHook @2

客户端调用程序:
BOOL CGlobalHookDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.
HINSTANCE hInst;
hInst = LoadLibrary("GHookDLL.dll"); //动态加载dll
typedef void (*SetHookProc)(HWND hWnd);
SetHookProc SetHook = (SetHookProc)GetProcAddress(hInst,"SetHook");
SetHook(m_hWnd);
// IDM_ABOUTBOX must be in the system command range.
//...................省略

return TRUE; // return TRUE unless you set the focus to a control
}


问题:当程序运行之后,发现F8(后门)响应不了,这是何解?
然后,我就将鼠标钩子注释掉,只留下键盘钩子和低级键盘钩子,这时候F8又可以了~~~
接着,我将低级键盘钩子注释掉,只留下鼠标钩子,键盘钩子~~F8又出问题了。

麻烦大牛给看看啦~~~最好运行一下咯。
小弟谢谢了。
悬赏100分,越详细越好啊!!!!
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingdujun 2014-05-18
  • 打赏
  • 举报
回复
引用 3 楼 FightForProgrammer 的回复:
帮你顶。。。
兄弟 100分就给你了~~~~
FightForProgrammer 2014-05-15
  • 打赏
  • 举报
回复
帮你顶。。。
qingdujun 2014-05-15
  • 打赏
  • 举报
回复
求大牛帮忙看看~~~
qingdujun 2014-05-15
  • 打赏
  • 举报
回复

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧