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.
}