枚举窗口
typedef struct HwndandTitle {
HWND hwnd;
wchar_t* szTitle;
// 其他 TODO ......
}HwndTitle;
// 通过标题字符串查找窗口
void FindWindowByTitle(HWND hWnd, wchar_t* szTitle)
{
HwndTitle* strHwndTitle = new HwndTitle;
strHwndTitle -> hwnd = hWnd;
strHwndTitle -> szTitle = new wchar_t[wcslen(szTitle)];
strHwndTitle -> szTitle = szTitle;
EnumWindows(EnumWindowsProc, (LPARAM)strHwndTitle);
// strHwndTitle 结构中包含了 目标窗口的信息,TODO......
}
// 查找窗口的回调函数
INT_PTR CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
int iTitleLen = GetWindowTextLength(hWnd);
wchar_t* szWndTitle = new wchar_t[iTitleLen + 1];
if (iTitleLen > 0)
{
GetWindowText(hWnd, szWndTitle, iTitleLen + 1);
if (wcsstr(szWndTitle, ( ((HwndTitle *)lParam)->szTitle ) )!= NULL)
{
((HwndTitle*)lParam) ->hwnd = hWnd;
((HwndTitle*)lParam)->szTitle = szWndTitle;
return false;
}
}
return TRUE;
}
================================================================================
// 查找窗口的回调函数 获取可见的,有标题的窗口
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
std::vector<std::pair<HWND, std::wstring>>* windowList = reinterpret_cast<std::vector<std::pair<HWND, std::wstring>>*>(lParam);
// 过滤掉不可见的窗口
if (!IsWindowVisible(hWnd))
return TRUE; // 继续枚举
// 获取窗口标题
wchar_t title[256];
GetWindowText(hWnd, title, 256);
// 过滤掉没有标题的窗口
if (wcslen(title) > 0)
windowList->push_back(std::make_pair(hWnd, title));
return TRUE; // 继续枚举
}
// 获取可见的,有标题的窗口
std::vector<std::pair<HWND, std::wstring>>* isVisualTitleWindows( ) {
std::vector<std::pair<HWND, std::wstring>>* windowList = new std::vector<std::pair<HWND, std::wstring>>;
// 枚举所有顶层窗口
EnumWindows(EnumWindowsProc, reinterpret_cast<LPARAM>(windowList));
return windowList;
}

浙公网安备 33010602011771号