Как передать в 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;
}