MFC 窗口按钮的鼠标事件(对于中文和英文按钮的处理)问题
2013-12-02 14:37
447 查看
对于英文的!!!:
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;
}
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;
}
相关文章推荐
- MFC 通过发送消息完成按钮操作模拟鼠标单击事件的发生的问题
- CEGUI OGRE ISO中文显示输入整合,鼠标独占问题,窗口创建
- Java基础之处理事件——选项按钮的鼠标监听器(Lottery 2 with mouse listener)
- Win7 英文专业版安装中文包汉化后部分软件中文乱码问题处理
- mfc 如何捕获应用程序窗口以外的鼠标事件
- Win7 英文专业版安装中文包汉化后部分软件中文乱码问题处理
- 【Ubuntu下 ftp应用】【窗口没有最大化最小化】【调整关闭按钮到菜单栏右侧】【Movie Player和Gnome MPlayer 中文字幕问题】【修改Ubuntu启动项】
- 【框架-MFC】MFC 在捕获控件外(窗口外)鼠标事件
- MFC 窗体按钮的按键的实现和字符串的相关处理函数的问题
- vs2013版MFC按钮点击无反应,执行不到相应的事件处理程序
- LabVIEW中利用事件结构演示用鼠标单击前面板窗口时,发生鼠标按下事件并处理鼠标按下事件
- 鼠标滚动事件onscroll在firefox/chrome/Ie中执行次数的问题处理
- asp.net 按钮单击事件问题(自动弹出新窗口)
- Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例
- MFC禁止窗口最大化按钮和禁止鼠标改变窗口大小的操作
- 鼠标滚动事件onscroll在firefox/chrome/Ie中执行次数的问题处理
- 《android按钮点击事件的频繁点击问题处理》
- 在winform中处理IE的新开窗口事件的问题
- Silverlight3学习笔记2(对于Slider事件问题的处理)
- MFC点击属性页确定按钮后,屏蔽窗口自动刷新问题。