Перечислите все дескрипторы окна на рабочем столе - PullRequest
2 голосов
/ 23 июня 2009

Есть ли способ Win32 API для получения перечисления всех открытых окон? Похоже, должно быть, просто не уверен, с чего начать.

Ответы [ 3 ]

5 голосов
/ 23 июня 2009

EnumWindows () для этого. Вы звоните и предоставляете обратный звонок. Он вызывает обратный вызов для каждого найденного окна и передает дескриптор этому окну.

Затем вы можете использовать дескриптор, чтобы запросить параметры окна и решить, представляет ли он интерес для вас или выполнить какое-либо действие с ним.

3 голосов
/ 23 июня 2009

Вы захотите использовать функцию EnumDesktopWindows в user32.dll.

Вот код C #, чтобы вы указали на правильные вызовы API. Я не уверен, как это будет выглядеть в Си, но вы поняли.

[DllImport("user32.dll")]
private static extern int EnumDesktopWindows(IntPtr hDesktop, EnumWindowsProc ewp, int lParam);
0 голосов
/ 09 февраля 2016

Я подумал, что пример может пролить больше света на процесс

#include <windows.h>

BOOL CALLBACK printVisibleWindows(HWND wnd, LPARAM lParam)
{
    if(!IsWindowVisible(wnd))return 1;
    int length = GetWindowTextLength(wnd);
    if(!length)return 1;
    length++;
    TCHAR *buffer = (TCHAR*)malloc(length);
    GetWindowText(wnd, buffer, length);
    printf("%p %s\n", wnd, buffer);
    free(buffer);
    return 1;
}

int main()
{
    DWORD dwThreadId = GetCurrentThreadId();
    HDESK hDesktop = GetThreadDesktop(dwThreadId);
    EnumDesktopWindows(hDesktop, printVisibleWindows, 0);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...