我正在尝试从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)
最终的解决方案似乎是创建一个帮助程序,该程序将列出窗口并找到所需窗口的ID,然后通过管道或套接字或其他通信技术将其发送到服务。
答案 1 :(得分:-1)
发现上述问题之一,那就是访问权限 我应该改用此访问权限:
auto desktop = OpenInputDesktop(0, 0, GENERIC_ALL); // GENERIC_READ also enough
EnumDesktopWindows(desktop, EnumProc, 0);
但是我只有两个窗口:HPSISVC,默认IME 在普通程序中运行此代码时,将打印所有窗口标题