|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
WindowSearch.h
Abstract:
Author:
Hakki T. Bostanci (hakkib) 06-Apr-2000
Revision History:
--*/
#ifndef _WINDOWSEARCH_H_
#define _WINDOWSEARCH_H_
//////////////////////////////////////////////////////////////////////////
//
//
//
class CWindowSearch { public: CWindowSearch() { m_nMatches = -1; //m_hWnd = 0;
}
friend HWND FindChildWindow(HWND hWnd, CWindowSearch &rWindowSearch) { rWindowSearch.m_nMatches = 0;
EnumChildWindows(hWnd, EnumProc, (LPARAM) &rWindowSearch);
return rWindowSearch.Result(); }
friend HWND WaitForChildWindow(HWND hWnd, CWindowSearch &rWindowSearch, HANDLE hBreak) { rWindowSearch.m_nMatches = 0;
do { EnumChildWindows(hWnd, EnumProc, (LPARAM) &rWindowSearch); } while (rWindowSearch.m_nMatches == 0 && WaitForSingleObject(hBreak, 250) == WAIT_TIMEOUT);
return rWindowSearch.Result(); }
friend HWND FindThreadWindow(DWORD dwThreadId, CWindowSearch &rWindowSearch) { rWindowSearch.m_nMatches = 0;
EnumThreadWindows(dwThreadId, EnumProc, (LPARAM) &rWindowSearch); return rWindowSearch.Result(); }
friend HWND WaitForThreadWindow(DWORD dwThreadId, CWindowSearch &rWindowSearch, HANDLE hBreak) { rWindowSearch.m_nMatches = 0;
do { EnumThreadWindows(dwThreadId, EnumProc, (LPARAM) &rWindowSearch); } while (rWindowSearch.m_nMatches == 0 && WaitForSingleObject(hBreak, 250) == WAIT_TIMEOUT);
return rWindowSearch.Result(); }
HWND Result() const { switch (m_nMatches) { case -1: SetLastError(ERROR_NOT_FOUND);//ERROR_NOT_STARTED);
return 0;
case 0: SetLastError(ERROR_NOT_FOUND); return 0;
case 1: return m_hWnd;
default: SetLastError(ERROR_NOT_FOUND);//ERROR_MULTIPLE_FOUND);
return 0; } }
private: virtual BOOL TestWindow(HWND hWnd) = 0;
static BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam) { return ((CWindowSearch *)lParam)->TestWindow(hWnd); }
protected: int m_nMatches; HWND m_hWnd; };
//////////////////////////////////////////////////////////////////////////
//
//
//
class CWindowSearchByText : public CWindowSearch { public: explicit CWindowSearchByText(PCTSTR pszText) { m_pszText = pszText; }
virtual BOOL TestWindow(HWND hWnd) { if (_tcscmp(CWindowText(hWnd), m_pszText) == 0) { ++m_nMatches; m_hWnd = hWnd; }
return TRUE; }
private: PCTSTR m_pszText; };
//////////////////////////////////////////////////////////////////////////
//
//
//
class CWindowSearchByClass : public CWindowSearch { public: explicit CWindowSearchByClass(PCTSTR pszClass) { m_pszClass = pszClass; }
virtual BOOL TestWindow(HWND hWnd) { if (_tcscmp(CClassName(hWnd), m_pszClass) == 0) { ++m_nMatches; m_hWnd = hWnd; }
return TRUE; }
private: PCTSTR m_pszClass; };
//////////////////////////////////////////////////////////////////////////
//
//
//
class CWindowSearchById : public CWindowSearch { public: explicit CWindowSearchById(int nId) { m_nId = nId; }
virtual BOOL TestWindow(HWND hWnd) { if (GetDlgCtrlID(hWnd) == m_nId) { ++m_nMatches; m_hWnd = hWnd; }
return TRUE; }
private: int m_nId; };
//////////////////////////////////////////////////////////////////////////
//
//
//
inline BOOL PushButton(HWND hWnd) { return PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0) && PostMessage(hWnd, WM_LBUTTONUP, 0, 0); }
//////////////////////////////////////////////////////////////////////////
//
//
//
inline BOOL SetText(HWND hWnd, PCTSTR pText) { return SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM) pText); }
#endif //_WINDOWSEARCH_H_
|