Windows服务可以枚举桌面顶级窗口吗?

时间:2018-06-26 19:59:51

标签: c++ winapi windows-services enumerate

我正在尝试从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返回零

相同的代码在非服务程序中有效

是否可以在服务中执行此操作,但是我做错了什么? 还是我无法实现?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

发现上述问题之一,那就是访问权限 我应该改用此访问权限:

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

但是我只有两个窗口:HPSISVC,默认IME 在普通程序中运行此代码时,将打印所有窗口标题