以下在ATL下实现:

  1. .h头文件中添加

    #include <vector>

    #define WND_TITLE_LEN  256
    typedef struct
    {
        HWND hwnd;
        char wndTitle[WND_TITLE_LEN];
    }WINDOW_INFO;

    typedef std::vector <WINDOW_INFO> WNDLISTTYPE;

    private:
            WNDLISTTYPE m_vector_winList;
            static BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lp);
    public:
        HWND FindStrInTitle(CString str);

  2. CPP文件实现功能:EnumWindows遍历窗口

    1. BOOL CALLBACK CAddressBookDlg::MyEnumWindowsProc(HWND hwnd, LPARAM lp){
          WNDLISTTYPE *wndList;
          wndList = (WNDLISTTYPE*)lp;
          char buffer[WND_TITLE_LEN];
          WINDOW_INFO wndInfo;
          ::GetWindowText(hwnd, buffer, WND_TITLE_LEN);
          wndInfo.hwnd = hwnd;
          strcpy(wndInfo.wndTitle, buffer);
          wndList->push_back(wndInfo);
          return true;
      }

      HWND CAddressBookDlg::FindStrInTitle(CString str)
      {
          WINDOW_INFO wndInfo;
          CString csTmp;

          m_vector_winList.clear();
          EnumWindows(MyEnumWindowsProc, (LPARAM)&m_vector_winList);
          for (unsigned int i = 0; i<m_vector_winList.size(); i++)
          {
              wndInfo = m_vector_winList[i];
              csTmp = wndInfo.wndTitle;
              if (csTmp.Find(str) >= 0)
              {
                  return wndInfo.hwnd;
              }
          }
          return NULL;
      }

调用:

CAddressBookDlg findWnd;        
        HWND hwndForward = findWnd.FindStrInTitle("转发:");
        if (hwndForward){

        AfxMessageBox("转发窗口已打开");

        }else{

        AfxMessageBox("转发窗口未打开");

        }