Qt - 获取所有打开的Windows标题

时间:2011-10-31 07:57:24

标签: windows winapi qt

如何检查特定窗口是否打开。我只得到窗口名称的一部分。我想在QT控制台应用程序中使用EnumWindows(),但我得到一些错误,声明“main.obj:-1:错误:未解析的外部符号 imp__GetWindowTextW @ 12在函数中引用”int __stdcall EnumWindowsProc(struct HWND *,long)“(?EnumWindowsProc @@ YGHPAUHWND __ @@ J @ Z)”

以下是我的示例代码

BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
    char buff[255];

    if (IsWindowVisible(hWnd)) {
       GetWindowText(hWnd, (LPWSTR) buff, 254);
    }
    return TRUE;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    EnumWindows(EnumWindowsProc, 0);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

这是链接器错误而不是编译错误。

您已正确包含windows.h,但您还需要将导入库添加到链接器选项中。示例代码中的所有三个Win32函数都要求您链接user32.lib

答案 1 :(得分:0)

EnumWindowsProc不是来自Qt,它是一个Windows API函数,你需要包含windows.h

我没有使用Qt,代码可以通过complie,但输出似乎不对。无论如何,这是我的代码

#include <conio.h>
#include <iostream>
#include <windows.h>
using namespace std;
char buff[255];
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam)
{
    if (IsWindowVisible(hWnd))
    {
       GetWindowText(hWnd, (LPWSTR) buff, 254);
    }
    return TRUE;
}


int main()
{
    EnumWindows(EnumWindowsProc, 0);
    for(int i = 0; i != 254; ++i)
        cout << buff[i];
    getch();
    return 0;
}

答案 2 :(得分:0)

您可以使用:

Application.OpenForms["FormName"]

检查表格是否打开。