Я пытаюсь использовать функцию EnumWindows
, которая принимает WNDENUMPROC
в качестве обратного вызова с лямбдой для доступа к локальным переменным.К сожалению, если я попытаюсь использовать [&]
, компилятор скажет мне, что типы не совпадают.То, что я пытаюсь:
HWND get_wallpaper_window()
{
HWND progman = FindWindow(L"ProgMan", NULL);
SendMessageTimeout(progman, 0x052C, 0, 0, SMTO_NORMAL, 1000, nullptr);
HWND wallpaper_hwnd;
EnumWindows(
// Error here
[&](HWND hwnd, LPARAM lParam) -> BOOL CALLBACK
{
HWND p = FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL);
if (p) { wallpaper_hwnd = FindWindowEx(NULL, hwnd, L"WorkerW", NULL); }
}
, NULL);
return wallpaper_hwnd;
}
Единственное решение, которое я мог бы придумать, - это сделать wallpaper_hwnd глобальным и определить лямбду с помощью []
, но так как это необходимо только тогда, когда оно возвращается из этой функции и не требуется глобальноя бы предпочел этого избегать.
Я люблю использовать глобальные переменные больше, чем советуют люди, но я делаю это только тогда, когда глобальная переменная взаимодействует со всей программой, а это не так.
Какое лучшее решение мне не хватает?