Как передать в EnumWindowsProc указатель на локальную переменную

Я пытаюсь сделать статический класс-помощник для поиска нужного мне окна. В EnumWindows мне нужно как-то передать указатель на локальную переменную из getWindow, чтобы enumWindowsProc записал результат в эту переменную и функция getWindow её вернула. Но у меня не получается сделать это правильно. Класс обязательно полностью должен быть статическим.

Minecraft.h

#include <windows.h>
#include <iostream>

class Minecraft
{
public:
    static HWND getWindow(DWORD processId);

private:
    static BOOL CALLBACK enumWindowsProc(HWND hwnd, LPARAM lParam);
};

Minecraft.cpp

#include "Minecraft.h"

HWND Minecraft::getWindow(DWORD processId)
{
    HWND window;
    EnumWindows(&enumWindowsProc, (LPARAM)&window);

    return window;
}

BOOL CALLBACK Minecraft::enumWindowsProc(HWND hwnd, LPARAM lParam)
{
    if (IsWindowVisible(hwnd))
    {
        lParam = (LPARAM)hwnd;
        return FALSE;
    }

    return TRUE;
}

Программа успешно компилируется но в локальную переменную windows ничего не записывается.


Ответы (1 шт):

Автор решения: August Vishnevsky
#include "Minecraft.h"

HWND Minecraft::getWindow()
{
    HWND window = 0;
    EnumWindows(&enumWindowsProc, reinterpret_cast<LPARAM>(&window));

    return window;
}

BOOL CALLBACK Minecraft::enumWindowsProc(HWND hwnd, LPARAM lParam)
{
    HWND* window = reinterpret_cast<HWND*>(lParam);

    if (IsWindowVisible(hwnd))
    {
        *window = hwnd;
        return FALSE;
    }

    return TRUE;
}
→ Ссылка