枚举窗口,关闭弹框,模拟点击按钮

1、EnumWindows(EnumWindowsProc, (LPARAM)NULL);

该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。 

2、

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
  TCHAR szBuffer[256]= {0};
  GetWindowText(hwnd, szBuffer, sizeof(szBuffer));//窗口名称

  //GetClassName(hwnd, szBuffer, sizeof(szBuffer) / sizeof(TCHAR)); // 窗口类名
  CString sztmp = szBuffer;
  if (sztmp.Find(L"http://cvs.ehire.51job.com/?num=") == 0)
  {
     ::ShowWindow(hwnd, SW_HIDE);   //隐藏窗口
  }
  else if (sztmp.Find(L"安全警告") >= 0 || sztmp.Find(L"安全警报") >= 0)//IE 8 Adobe Flash Player弹窗
  {
    //#32770 (Dialog)
    int nCtrlId = 0x7;
    HWND hWndCtrl = GetDlgItem(hwnd, nCtrlId);
    if (hWndCtrl)
    {
      LOG_INFO(_T("安全警告-GetDlgItem-Btn成功"));
    }
    else
    {
      nCtrlId = IDOK;
      hWndCtrl = GetDlgItem(hwnd, nCtrlId);
      if(!hWndCtrl)
      {
        LOG_INFO(_T("安全警告-GetDlgItem-Btn失败"));
      }
    }
    ::PostMessage( hwnd, WM_COMMAND, MAKELONG(nCtrlId, BN_CLICKED), (LPARAM)hWndCtrl);  //模拟点击按钮
  }
  else if (sztmp.Find(_T("51job_")) == 0)
  {
    LOG_INFO(_T("szBuffer:%s"), szBuffer);
    PostMessage(hwnd, WM_CLOSE, 0 ,0);  //关闭窗口
  }

  return TRUE ;
}

3、

void AutoClickThreadProc(LPVOID param)
{
  HWND hwnd = NULL;
  hwnd = FindWindow(NULL, _T("文件下载"));  //窗口句柄
  if (hwnd)
  {
    LOG_INFO(_T("FindWindow:%x"), hwnd);
    PostMessage(hwnd, WM_NCACTIVATE, TRUE, NULL);  //激活窗口

    int nCtrlId = 0x114A; //"打开"控件ID 0x114A
    HWND HwndCtrl = GetDlgItem(hwnd, nCtrlId); //控件句柄
    if (HwndCtrl)
    {
      LOG_INFO(_T("Send WM_COMMAND"));
      ::PostMessage(hwnd, WM_COMMAND, MAKELONG(nCtrlId, BN_CLICKED), (LPARAM)HwndCtrl);  // 模拟点击“打开”按钮
    }
  }
}

原文地址:https://www.cnblogs.com/pjl1119/p/7364111.html