双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

qingdujun qingdujun 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先上代码,问题在下面~~~
这个是系统钩子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分,越详细越好啊!!!!
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
qingdujun
qingdujun 领域专家: C/C++技术领域 领域专家: C/C++技术领域
进程/线程/DLL 15,466 成员 49,169 内容