SetCursorPos只能是前台的,有没后台操作的办法?

解决方案 »

  1.   

    用 Windows 消息模拟,因为真实的鼠标无论怎么动,也就是向指定的窗口
    发送Windows消息而已,如果你想真实的鼠标不动,又能让指定窗口相应你
    所谓“后台”的鼠标运动效果,只能模拟鼠标发消息给那个窗口。
      

  2.   

    1 PostMessage(hWnd2,WM_MOUSEMOVE, MK_LBUTTON, MAKELONG(648,416)); 2 PostMessage(hWnd2, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(648,416));3 PostMessage(hWnd2, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(648,416)); 1 好像没移动mouse,模拟mouse定位不到 648,416...这步好像没反应
      

  3.   

    楼主可以使用SendInput()这个API函数模拟鼠标动作,给一个示例:
    void MouseMove (int x, int y )
    {  
      double fScreenWidth    = ::GetSystemMetrics( SM_CXSCREEN )-1; 
      double fScreenHeight  = ::GetSystemMetrics( SM_CYSCREEN )-1; 
      double fx = x*(65535.0f/fScreenWidth);
      double fy = y*(65535.0f/fScreenHeight);
      INPUT  Input={0};
      Input.type      = INPUT_MOUSE;
      Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
      Input.mi.dx = fx;
      Input.mi.dy = fy;
      ::SendInput(1,&Input,sizeof(INPUT));
    }可以象这样调用:MouseMove(100,100);
      

  4.   

    我想要后台模拟,SendInput会影响当前的mouse操作