【问题标题】:EnumWindows does not detect windowsEnumWindows 不检测窗口
【发布时间】:2018-10-02 05:33:42
【问题描述】:

我正在尝试使用 EnumWindows 打印出所有可见窗口的标题。

起初它是有效的,EnumWindows 每次调用 EnumWindows 都会多次调用回调函数 createWindow()。但如果没有添加任何有意义的代码,它就会停止工作,现在只使用不可见窗口的句柄调用一次 createWindow()。

这是我的代码:

int main()
{
    int row = 2;
    int col = 2;

    vector<Window> detectedWindows((row * col) + 4);

    EnumWindows(&createWindow, (LPARAM)&detectedWindows);
}

BOOL CALLBACK createWindow(HWND input, LPARAM storage)
{
    if (IsWindowVisible(input))
    {
        TCHAR titleTchar[30];

        GetWindowText(input, titleTchar, 30);

        wcout << titleTchar << endl;

        CString titleCstr = titleTchar;
        CT2CA converting(titleCstr);
        string title(converting);

        cout << title << endl;
    }
    return 0;
}

没有记录的错误消息。 GetLastError 返回 0。

【问题讨论】:

    标签: c++ windows winapi window


    【解决方案1】:

    您的回调返回FALSE,因此EnumWindows() 停止枚举窗口。让它返回TRUE

    【讨论】:

    • 谢谢,我还以为返回值什么都不用呢。
    • @ColdZer0 这就是你没有阅读documentation 得到的结果:"EnumWindows 一直持续到枚举最后一个顶级窗口或回调函数返回 FALSE.” 而EnumWindowsProc callback documentation 也说:“要继续枚举,回调函数必须返回 TRUE;要停止枚举,它必须返回 FALSE "
    猜你喜欢
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2012-09-19
    相关资源
    最近更新 更多