Вопрос по winapi, c, windows – Перечислите все дескрипторы окна на рабочем столе

2

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

Ваш Ответ

3   ответа
3

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

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

[DllImport("user32.dll")]
private static extern int EnumDesktopWindows(IntPtr hDesktop, EnumWindowsProc ewp, int lParam);
5

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

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

Error: User Rate Limit ExceededthatError: User Rate Limit Exceeded JustJeff
0

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

#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;
}

Похожие вопросы