Qt - получить заголовок всех открытых окон - PullRequest
0 голосов
/ 31 октября 2011

как я могу проверить, открыто ли конкретное окно или нет.Я получил только часть названия окна.я думаю об использовании EnumWindows () в консольном приложении QT, но получаю несколько ошибок, в которых говорится «main.obj: -1: ошибка: неразрешенный внешний символ imp__GetWindowTextW @ 12, на который ссылается функция« int __stdcall EnumWindowsProc (struct HWND *, длинный) "(? 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 ]

2 голосов
/ 31 октября 2011

Это ошибка компоновщика, а не ошибка компиляции.

Вы правильно включили windows.h, но вам также необходимо добавить библиотеки импорта в параметры компоновщика.Все три функции Win32 в вашем примере кода требуют ссылки user32.lib.

0 голосов
/ 31 октября 2011

Вы можете использовать:

Application.OpenForms["FormName"]

Чтобы проверить, открыта ли форма или нет.

0 голосов
/ 31 октября 2011

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...