VC++模拟鼠标点击

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.
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值