lishengmin_ 2021-06-08 17:52 采纳率: 60%
浏览 17
已采纳

sendmessage()

想用sendmessage()来模拟按下已经创建好了的一个按钮,请问四个参数分别应该怎么设置啊

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-06-08 18:15
    关注

    参考这个文章(http://www.360doc.com/content/15/0719/17/15242507_486015983.shtml

    用SPY++获得了QQ连连看的 开始按钮坐标!
    利用坐标写了如下代码:
            m_hGame = FindWindow(NULL, "QQ游戏 - 连连看角色版");
            int lparam;
            lparam = ((562)<<16) + 664;
            lparam = ((562)<<16)+(664);
            SendMessage(m_hGame, WM_LBUTTONDOWN, 0, lparam);
            SendMessage(m_hGame, WM_LBUTTONUP, 0, lparam);
            SendMessage(m_hGame, WM_LBUTTONDOWN, 0, lparam);
            SendMessage(m_hGame, WM_LBUTTONUP, 0, lparam);上述代码不能实现开始按钮的点击这是怎么回事???

    上述代码应该是属于软件模拟,所以我尝试了使用硬件模拟:
                //获取游戏窗口句柄
                HWND gameh;
                gameh=::FindWindow(NULL,"QQ游戏 - 连连看角色版");
                CRect r1;
                ::GetWindowRect(gameh,&r1);
                
                //保存当前鼠标指针
                   //取得当前鼠标位置
                CPoint p;
                GetCursorPos(&p);
                //设置鼠标指针位置  取开局所在坐标:x=655;y=577 //lparam 0x0241028f
                SetCursorPos(655+r1.left,577+r1.top);
                //模拟鼠标的 单击(鼠标按下/鼠标抬起)
                //MOUSEEVENTF_LEFTDOWN Specifies that the left button is down.
                   //MOUSEEVENTF_LEFTUP
                //鼠标在当前位置按下
                mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
                mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
                //鼠标在当前位置抬起
                mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
                //还原鼠标位置
                Sleep(200);//过一段时间 再执行后边的代码
                SetCursorPos(p.x,p.y);
    利用这段代码就正确实现了开始按钮的点击!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?