关闭

MFC 窗口按钮的鼠标事件(对于中文和英文按钮的处理)问题

521人阅读 评论(0) 收藏 举报
分类:

对于英文的!!!:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1049859次
    • 积分:18309
    • 等级:
    • 排名:第521名
    • 原创:741篇
    • 转载:523篇
    • 译文:0篇
    • 评论:105条
    最新评论