对于英文的!!!:
ClickButton( WINDOW_TITLE_REGISTRATION,_T("Continue") );
对于中文的按钮!!!:
ClickButton( WINDOW_TITLE_REGISTRATION,_T("确定 or 取消") )
BOOL CWndHandleThread::ClickButton(CString windowTitle, CStringbutton)
{
HWND hWnd = ::FindWindow(NULL,windowTitle);
if( hWnd )
{
HWND hButton =::FindWindowEx(hWnd, NULL,NULL,button);
if( !hButton )
{
returnfalse;
}
Sleep(2000);
//将该窗口置顶
HWND hForeWnd =NULL;
DWORDdwForeID;
DWORDdwCurID;
hForeWnd =::GetForegroundWindow(); //返回用户当前工作的窗口,前台窗口的句柄
dwCurID = ::GetCurrentThreadId(); //获取最近运行的线程的ID
dwForeID =::GetWindowThreadProcessId( hForeWnd,NULL ); //找出创建前台窗口的线程
::AttachThreadInput( dwCurID,dwForeID, TRUE);//成功返回的话,连接了线程后,输入焦点、窗口激活、鼠标捕获、键盘状态以及输入队列状态都会进入共享状态
BOOL bIsMinimized =::IsIconic(hWnd); //该函数确定给定窗口是否是最小化
//如果该窗口最小化了,则恢复原状;
if (bIsMinimized)
{
::ShowWindow(hWnd,SW_RESTORE); //激活并显示窗口(置顶前提)
Sleep(500);
}
//将该窗口置顶
::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); //重新设置窗口的参数
Sleep(100);
RECT rectMain;
::GetClientRect(hButton,&rectMain);//客户区
POINT pt={0};
pt.x = rectMain.left+(rectMain.right-rectMain.left)/2 ;
pt.y = rectMain.top+(rectMain.bottom-rectMain.top)/2;
::ClientToScreen(hButton,&pt);//将用户指定的坐标或者点转换为屏幕坐标
SetCursorPos(pt.x, pt.y);//移动光标到指定位置
mouse_event(MOUSEEVENTF_LEFTDOWN,0, 0, 0,0); //鼠标事件的完成
mouse_event(MOUSEEVENTF_LEFTUP,0, 0, 0,0);
Sleep(100);
::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//确认是否已经置顶窗口
::AttachThreadInput(dwCurID,dwForeID,FALSE); //撤消连接非共享输入队列
return true;
}
return false;
}