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

对于英文的!!!:

 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值