может ли служба Windows перечислять окна верхнего уровня рабочего стола

Я пытаюсь перечислить окна верхнего уровня из службы, написанной на 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 возвращает ноль

тот же код работает в несервисной программе

Можно ли сделать это в службе, но я делаю что-то не так?
или я не могу этого достичь?

0

Решение

кажется, что окончательное решение создает вспомогательный процесс, который выведет список окон и найдет идентификатор требуемых окон для отправки его в службу через каналы или сокеты или другие методы связи.

0

Другие решения

нашел одну из проблем выше, это было право доступа
Я должен использовать этот доступ вместо:

auto desktop = OpenInputDesktop(0, 0, GENERIC_ALL); // GENERIC_READ also enough
EnumDesktopWindows(desktop, EnumProc, 0);

однако я получил только два окна: HPSISVC, IME по умолчанию
при запуске этого кода в обычной программе печатает все заголовки окон

-1

По вопросам рекламы [email protected]