一个关于获得窗口标题的问题, 不过只是针对部分窗口出现错误, 望高手指教.
我使用方法1:
ZeroMemory(szWndTitle, sizeof(szWndTitle));
GetWindowText(hWnd, szWndTitle, sizeof(TCHAR)*MAX_PATH);
或SendMessage(hWnd, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)szWndTitle);
打开有些窗口后,再调用本函数发现会卡在此处GetWindowText(), 不直不会向下运行.
使用方法2:
ZeroMemory(szWndTitle, sizeof(szWndTitle));
LONG lWindowLong = GetWindowLong(hWnd,GWLP_WNDPROC);
CallWindowProc((WNDPROC)lWindowLong,hWnd,WM_GETTEXT,(WPARAM)sizeof(TCHAR)*MAX_PATH,(LPARAM)szWndTitle);
打开有些窗口后,再调用本函数CallWindowProc(), 发现会出现微软提供的BUG "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\wincore.cpp"第442行出现错误, 查看则是RemoveProp(hWnd, _afxOldWndProc); .
使用方法3(根据方法2微软提供的BUG进行修正):
WNDPROC oldWndProc = (WNDPROC)::GetProp(hWnd, _T("AfxOldWndProc423"));
CallWindowProc(oldWndProc, hWnd, WM_GETTEXT, (WPARAM)sizeof(TCHAR)*MAX_PATH,(LPARAM)szWndTitle);
SetWindowLong(hWnd, GWLP_WNDPROC, reinterpret_cast <INT_PTR>(oldWndProc));
RemoveProp(hWnd, _T("AfxOldWndProc423"));
GlobalDeleteAtom(GlobalFindAtom(_T("AfxOldWndProc423")));
//if(wcslen(szWndTitle) <= 0)
//{
// SetWindowLong(hWnd, GWLP_WNDPROC, reinterpret_cast <INT_PTR>(WindowLong));
// GetWindowText(hWnd, szWndTitle, sizeof(TCHAR)*MAX_PATH); //使用此段时会卡住. 不使用此段时不会获得窗口标题.
//}
我使用方法1:
ZeroMemory(szWndTitle, sizeof(szWndTitle));
GetWindowText(hWnd, szWndTitle, sizeof(TCHAR)*MAX_PATH);
或SendMessage(hWnd, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)szWndTitle);
打开有些窗口后,再调用本函数发现会卡在此处GetWindowText(), 不直不会向下运行.
使用方法2:
ZeroMemory(szWndTitle, sizeof(szWndTitle));
LONG lWindowLong = GetWindowLong(hWnd,GWLP_WNDPROC);
CallWindowProc((WNDPROC)lWindowLong,hWnd,WM_GETTEXT,(WPARAM)sizeof(TCHAR)*MAX_PATH,(LPARAM)szWndTitle);
打开有些窗口后,再调用本函数CallWindowProc(), 发现会出现微软提供的BUG "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\wincore.cpp"第442行出现错误, 查看则是RemoveProp(hWnd, _afxOldWndProc); .
使用方法3(根据方法2微软提供的BUG进行修正):
WNDPROC oldWndProc = (WNDPROC)::GetProp(hWnd, _T("AfxOldWndProc423"));
CallWindowProc(oldWndProc, hWnd, WM_GETTEXT, (WPARAM)sizeof(TCHAR)*MAX_PATH,(LPARAM)szWndTitle);
SetWindowLong(hWnd, GWLP_WNDPROC, reinterpret_cast <INT_PTR>(oldWndProc));
RemoveProp(hWnd, _T("AfxOldWndProc423"));
GlobalDeleteAtom(GlobalFindAtom(_T("AfxOldWndProc423")));
//if(wcslen(szWndTitle) <= 0)
//{
// SetWindowLong(hWnd, GWLP_WNDPROC, reinterpret_cast <INT_PTR>(WindowLong));
// GetWindowText(hWnd, szWndTitle, sizeof(TCHAR)*MAX_PATH); //使用此段时会卡住. 不使用此段时不会获得窗口标题.
//}