VC++模拟鼠标点击

来源:互联网 发布:安卓按键软件 编辑:程序博客网 时间:2024/05/16 17:56

VC++模拟鼠标点击

flyfish

POINT m_mainPoint;//其他窗体 主窗体坐标

//该回调函数可以是全局或者类的静态成员函数

void Test(){    // TODO:  在此添加控件通知处理程序代码    CWnd *p = FindWindow(NULL, _T("测试"));    HWND h = p->GetSafeHwnd();    if (h)    {        WINDOWINFO wndInfo = { sizeof(WINDOWINFO) };        ::GetWindowInfo(h, &wndInfo);        m_mainPoint.x = wndInfo.rcWindow.left;        m_mainPoint.y = wndInfo.rcWindow.top;        EnumChildWindows(h, EnumChildWndProc, LPARAM(&m_mainPoint));    }}
BOOL CALLBACK EnumChildWndProc(HWND hWnd, LPARAM lParam){    if (NULL == hWnd)        return FALSE;    int id = ::GetDlgCtrlID(hWnd);    if (id == 0x42C) // 0x42C为spy++显示的控件ID, 也是其他程序resource.h 文件中定义的Button控件ID    {        ::SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)(_T("TEST")));        //模拟鼠标点击        POINT* pMainPoint = (POINT*)(lParam);//如果要传递主窗体坐标 可以这样传递        WINDOWINFO wndInfo = { sizeof(WINDOWINFO) };        ::GetWindowInfo(hWnd, &wndInfo);        int x =  wndInfo.rcWindow.left +2;        int y =  wndInfo.rcWindow.top + 2;        x = 65535 * x / ::GetSystemMetrics(SM_CXSCREEN);        y = 65535 * y / ::GetSystemMetrics(SM_CYSCREEN);        INPUT input;        input.type = INPUT_MOUSE;        input.mi.dx = x;        input.mi.dy = y;        input.mi.mouseData = 0;        input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;        input.mi.time = 0;        input.mi.dwExtraInfo = 0;        SendInput(1, &input, sizeof(INPUT));        return FALSE;    }    return TRUE;    //To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.}
0 0
原创粉丝点击