對於 HWND FindWindow( LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
lpWindowName必須和查詢表單標題完全相等情況下才可正確返回表單控制代碼,比如若想查詢表單"無標題-記事本"
CString strTitle = _T("無標題-記")
FindWindow(NULL, (LPCTSTR)strTitle)則無法擷取到表單控制代碼
通過EnumWindows方法則可以實現表單模糊查詢
HWND hWndWindow;
CString global_strTitle;
#define MAX_TITLE_LENGTH 255
BOOL CALLBACK EnumWndProc(HWND hwnd,
LPARAM lParam)
{
BOOL bRet = TRUE;
if (IsWindowVisible(hwnd))
{
TCHAR szTitle[MAX_TITLE_LENGTH];
GetWindowText(hwnd,szTitle,MAX_TITLE_LENGTH);
CString strTitle = szTitle;
if (strTitle.Find((LPCTSTR)global_strTitle) != -1)
{
hWndWindow = hwnd;
bRet = FALSE;
}
}
return bRet;
}
...
HWND CRemote::GeneralSearchWindow(LPCTSTR lpWindowName )
{
global_strTitle = lpWindowName;
EnumWindows((WNDENUMPROC)EnumWndProc,0);
return hWndWindow;
}
...
//查詢代碼
CRemote objNotepad;
HWND hWndNotepad = objNotepad.GeneralSearchWindow(_T("遠程"));