首页
社区
课程
招聘
鼠标模拟和真实点击的区别
发表于: 2012-3-1 23:44 5665

鼠标模拟和真实点击的区别

2012-3-1 23:44
5665
第一次往游戏中模拟点击,它“点”了,可是第二次就不行了   一定要先真实点击一下其它窗口,然后才会点到游戏里 用SetForegroundWindow激活其它窗口也不行 下面是我的代码 请帮我想想问题在哪
    RECT rect;
    ::GetWindowRect(hwn,&rect);
    POINT Point;
    ::GetCursorPos(&Point);
    ::SetCursorPos((rect.left+422),(rect.top+445));  
    mouse_event(MOUSEEVENTF_LEFTDOWN,rect.left+422,rect.top+445,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,rect.left+422,rect.top+445,0,0);   
    Sleep(1000);
    ::SetCursorPos(Point.x,Point.y);
    mouse_event(MOUSEEVENTF_LEFTUP,Point.x,Point.y,0,0);
    mouse_event(MOUSEEVENTF_LEFTDOWN,Point.x,Point.y,0,0);
    ::SetForegroundWindow(m_hWnd);
这是OnTimer里的循环代码 模拟点击 点一下游戏中,然后点一下自己

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
首先你有没有获取游戏窗口句柄呢?
        Gameh=::FindWindow(NULL,"XX游戏");//获取游戏窗口句柄
        if (Gameh==NULL)
        {
                MessageBox("请先打开游戏!");
                return;       
        }

然后是你OnTimer函数里你说是用循环的,但是代码中没看到有循环的代码
OnTimer里干嘛用循环呢?
你想让这个函数独占CPU吗? 这好像不行的吧
你用sleep(1000),是想用定时的操作吗,
我觉得用定时器更好啊,你的Ontimer本来就是响应定时器的函数

void CMy2Dlg::OnButton1()
{       
        SetTimer(1,1000,NULL);         //每秒发送一次请求给OnTimer函数
}
2012-3-2 10:57
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用 setwindowpos
2012-3-2 11:12
0
雪    币: 32
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我把上下的顺序弄乱了。。。
2012-3-2 12:52
0
雪    币: 615
活跃值: (187)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
::SetCursorPos( 0, 0 );
    mouse_event( MOUSEEVENTF_LEFTDOWN, Point.x, Point.y, 0, 0 );
      mouse_event( MOUSEEVENTF_LEFTUP, Point.x, Point.y, 0, 0 );

或者

    mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
      mouse_event( MOUSEEVENTF_LEFTDOWN, Point.x, Point.y, 0, 0 );
      mouse_event( MOUSEEVENTF_LEFTUP, Point.x, Point.y, 0, 0 );

你也可以先获得点击子控件的窗口句柄hwnd,然后

::PostMessage( hwnd ,WM_LBUTTONDOWN,NULL ,NULL); // 用来获取焦点
::PostMessage( hwnd ,WM_LBUTTONDOWN,NULL ,NULL);  // 下
::PostMessage( hwnd ,WM_LBUTTONUP,NULL ,NULL); // 上

或:

::SendMessage( hwnd, BM_CLICK, 0, 0 );

或:
::PostMessage( ::GetParent( hwndChild ),  WM_COMMAND,  (WPARAM)::GetWindowLong( hwndChild, GWL_ID ),  ( LPARAM ) ( hwndChild ) );

获取子控件窗口句柄用::FindWindowEx
2012-3-2 14:03
0
游客
登录 | 注册 方可回帖
返回
//