Я пытаюсь перечислить окна верхнего уровня из службы, написанной на C ++
Я хочу найти конкретную программу, в которой запущено несколько экземпляров, но мне нужна конкретная программа, в заголовке окна которой есть несколько уникальных слов
поэтому я использую этот код:
auto desktop = OpenInputDesktop( 0, FALSE, DESKTOP_READOBJECTS);
if (!desktop) log_file << "[*] OpenDesktopA failed with error : " << GetLastError() << endl;
BOOL rs = EnumDesktopWindows(desktop, EnumProc, 0);
if (!rs) log_file << "[*] EnumDesktopWindows failed with error : " << GetLastError() << endl;
EnumDesktopWindows завершается ошибкой без вызова EnumProc, поэтому GetLastError возвращает ноль
тот же код работает в несервисной программе
Можно ли сделать это в службе, но я делаю что-то не так?
или я не могу этого достичь?
кажется, что окончательное решение создает вспомогательный процесс, который выведет список окон и найдет идентификатор требуемых окон для отправки его в службу через каналы или сокеты или другие методы связи.
нашел одну из проблем выше, это было право доступа
Я должен использовать этот доступ вместо:
auto desktop = OpenInputDesktop(0, 0, GENERIC_ALL); // GENERIC_READ also enough
EnumDesktopWindows(desktop, EnumProc, 0);
однако я получил только два окна: HPSISVC, IME по умолчанию
при запуске этого кода в обычной программе печатает все заголовки окон