首页
社区
课程
招聘
[求助]模拟按键的问题 大多给检测到的原因
发表于: 2015-9-19 20:29 8201

[求助]模拟按键的问题 大多给检测到的原因

2015-9-19 20:29
8201
HHOOK g_hook = NULL;
int NUM =0;
LRESULT CALLBACK GetMOUSEProcFunc(int code, WPARAM wParam, LPARAM lParam)// WH_MOUSE 钩子回调
{
        PMSG pMsg = (PMSG)lParam;
        LPMSG lpMsg = (LPMSG)lParam;
        PMOUSEHOOKSTRUCT  MouseInfo = (PMOUSEHOOKSTRUCT)lParam;
        if (code == HC_ACTION )
        {
                if( wParam == WM_RBUTTONDOWN)
                {
                        AfxMessageBox(L"右键点击OK");
                        NUM++;
                }
        }
        return CallNextHookEx(g_hook, code, wParam, lParam);
}

g_hook = SetWindowsHookEx(WH_MOUSE, GetMOUSEProcFunc, NULL, GetCurrentThreadId()); //WH_MOUSE钩子

假如安装一个WH_MOUSE钩子  怎么模拟真正的鼠标点击呢?
我自己在MFC 安装了一个WH_MOUSE类型钩子  然后点击MFC窗体右键会弹出消息
"右键点击OK" , 如何模拟真正的点击呢?

我测试了
        HWND hWnd = m_hWnd;
        int x = 104;
        int y = 197;
        LPARAM lp = (y << 16) + x;
        ::SendMessage((HWND)hWnd, WM_RBUTTONDOWN, 0, (LPARAM)lp);
        ::PostMessage((HWND)hWnd, WM_RBUTTONDOWN, 0, (LPARAM)lp);

以及大漠插件的点击 都不可以   

如果游戏过一段时间 检测  NUM++;  不变 就说明是外挂操作了吧 请问谁有办法模拟呢 别说NUM++。。我这只举例 人家有算法VM;

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
注册一个新的LL的hook,然后用CallNextHookEx对着自己的hookhandle发模拟消息~
2015-9-20 00:13
0
雪    币: 35
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大神来占楼了 太鸡冻了!

但您说的方法之前我就试了 也不行..........
大神说的LL是什么。。。太专业俗语 小屌丝看不懂。

大神你意思是不是 在建立个钩子 然后模拟发送;但这样怎么激活呢?
WH_MOUSE类型钩子 鼠标放到MFC界面才会执行回调。。主要怎么再后台窗口 怎么让他执行回调函数 我就是卡在后台让他执行回调上

LRESULT CALLBACK WH_GETMESSAGEProcFunc(int code, WPARAM wParam, LPARAM lParam)// WH_MOUSE 钩子
{
  //return CallNextHookEx(g_hookEx, code, wParam, lParam);

  MOUSEHOOKSTRUCT MouseInfo = { 0 };
  POINT point;
  point.x = 0x2A2;
  point.y = 0x1E7;
  ::GetCursorPos(&point);
  CWnd * hWnd = CWnd::WindowFromPoint(point);
  MouseInfo.pt = point;
  MouseInfo.hwnd = (HWND)hWnd;
  MouseInfo.dwExtraInfo = 0;
  MouseInfo.wHitTestCode = 1;
  return CallNextHookEx(g_hookEx, 0, 0x204, (LPARAM)&MouseInfo);
}
2015-9-20 03:52
0
雪    币: 35
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
后台回调 发消息。没效果 直接调用回调又出错。模拟调用 CallNextHookEx 也出错  就是没办法解决后台激活回调啊。。

void CMFCDlg::OnBnClickedButton3()
{
         
        POINT point;
         
        point.x = 0x2A2;
        point.y = 0x1E7;
        CWnd * PthWnd = CWnd::WindowFromPoint(point);
        MouseInfo.pt = point;
        MouseInfo.hwnd = (HWND)PthWnd;
        MouseInfo.dwExtraInfo = 0;
        MouseInfo.wHitTestCode = 1;
        //WH_GETMESSAGEProcFunc(0, 0x204, (LPARAM)&MouseInfo); 出错
        //CallNextHookEx(g_hookEx, 0, 0x204, (LPARAM)&MouseInfo); 出错
        HWND hWnd = m_hWnd;
        int x = 104;
        int y = 197;
        LPARAM lp = (y << 16) + x;
        ::SendMessage((HWND)g_hookEx, WM_MOUSEMOVE, 0, (LPARAM)&MouseInfo);
        ::SendMessage((HWND)g_hookEx, WM_RBUTTONDOWN, 0,   (LPARAM)&MouseInfo);
        ::PostMessage((HWND)g_hookEx, WM_RBUTTONDOWN, 0,  (LPARAM)&MouseInfo);

        ::SendMessage((HWND)hWnd , WM_MOUSEMOVE, 0, (LPARAM)&MouseInfo);
        ::SendMessage((HWND)hWnd , WM_RBUTTONDOWN, 0,   (LPARAM)&MouseInfo);
        ::PostMessage((HWND)hWnd , WM_RBUTTONDOWN, 0,  (LPARAM)&MouseInfo);
}
2015-9-20 04:02
0
雪    币: 144
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我帮楼主查查
2015-9-20 08:37
0
雪    币: 4
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
调用窗口过程就可以了
2015-9-20 11:01
0
雪    币: 35
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
终于懂V校 说的LL是什么了 WH_MOUSE_LL 原来让我注册全局钩子。。这方法也太不靠谱了 好多防全局钩子 和报毒的啊  V校还有什么号点的方法吗

直接执行回调 是可以 但出错CallNextHookEx这句。总不可能把这句改retn 1吧

而且全局钩子也需要人在鼠标 钩子才有信息吧.......还是需要人在电脑前
2015-9-20 12:25
0
雪    币: 70
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
如果是一些简单的往返操作,用单片机做一个按键工具,真正的去按动键盘和鼠标。
2015-9-21 14:40
0
雪    币: 35
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
今天有空 按照你方法测试了下! 全局LL 模拟CallNextHookEx 传递 局部钩子不响应的。

测试局部钩子 模拟消息 触发另个局部钩子 点击 是可以的  

全局鼠标钩子模拟触发一个局部钩子 是不可以的。 大神还有什么方法吗
2015-9-26 17:50
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
10
钩子消息想传递必须用同一个类型的钩子,且全局化,然后直接用CallNext就行了,不需要什么触发~
直接自己主动callnext
你只是往钩子的链条上扔消息而已~
2015-9-26 21:02
0
雪    币: 35
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
直接调用 CallNextHookEx  崩溃的啊.......  直接调用回调也崩溃的
2015-9-26 22:28
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
崩溃可以调试出真相。钩子链条投递消息是可以的。
2015-9-27 05:43
0
雪    币: 639
活跃值: (1192)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
13
顶上去。真好需要的知识
2015-10-17 10:04
0
游客
登录 | 注册 方可回帖
返回
//