对于 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("远程"));