首页 > 解决方案 > windows服务可以枚举桌面顶级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 返回零

相同的代码适用于非服务程序

是否可以在服务中执行此操作但我做错了什么?或者我无法做到这一点?

标签: c++winapiwindows-servicesenumerate

解决方案


最终的解决方案似乎是创建一个辅助进程,它将列出窗口并找到所需窗口的 id,然后通过管道或套接字或其他通信技术将其发送到服务


推荐阅读