1

Тема: Як отримати WNDCLASSEXA/WNDCLASSEXW (WinAPI)?

Для того, щоб його отримати, треба викликати функцію GetClassInfoExA()/GetClassInfoExW()
Які приймають HINSTANCE - ідентифікатор модуля, що створив вікно (якщо правильно розумію).
А також ім'я класу, яке легше добути:

#include <windows.h>
#include <stdio.h>

int main() {
    Sleep(1000);
    HWND hWnd = GetForegroundWindow();
    char className[256];
    int length = GetClassNameA(hWnd, className, sizeof(className));

    printf("%s", className);

    return 0;
}

2

Re: Як отримати WNDCLASSEXA/WNDCLASSEXW (WinAPI)?

На stackoverflow пишуть, що інформація про класи є специфічною для кожного процесу. Є кілька системних класів, які доступні усім, але це виключення з правил. Що ви можете зробити:

  • дістати інформацію через GetClassLong

  • підкинути в цільовий процес свою dll-ку за допомогою SetWindowsHookEx, і потім якимось чином обмінюватись з нею інформацією

  • взаємодіяти з чужою юайкою через UI Automation

Подякували: leofun011

3

Re: Як отримати WNDCLASSEXA/WNDCLASSEXW (WinAPI)?

Якийсь конкретний код є?

4

Re: Як отримати WNDCLASSEXA/WNDCLASSEXW (WinAPI)?

Будь ласка, напишіть повністю, що саме вам треба, щоб не було проблеми XY.

5

Re: Як отримати WNDCLASSEXA/WNDCLASSEXW (WinAPI)?

Мені треба записувати активність користувача час від часу і збирати максимальну кількість даних (скільки дозволить WinAPI) про вказаний HWND, отриманий через GetForegroundWindow(). Це заголовок - GetWindowText(), розміщення вікна - WINDOWPLACEMENT та стилі вікна, розміщення і стан вікна - WINDOWINFO.
WNDCLASSEX містить рядок lpszMenuName, через який можна щось дізнатися про меню (напевно)
І рядок HBRUSH hbrBackground, через який можна визначити фон вікна.

6

Re: Як отримати WNDCLASSEXA/WNDCLASSEXW (WinAPI)?

А, з якою метою ви хочете збирати такі дані з користувача?