我有一个应用程序,可以列出当前会话打开的窗口.它使用user32.dll中的EnumWindows方法.
我想从Windows服务运行此代码,但由于该服务未附加到用户会话,因此它显然不返回任何内容.
所以问题是,我如何枚举另一个用户会话的打开窗口(例如,使用特定的登录用户)?
与EnumWindows类似,我也想获得用户会话的前台窗口(比如GetForegroundWindow适用于当前用户).
据我所知,你不能从另一个会话的窗口访问.值得注意的是,实际上没有"当前会话" - 可能有多个用户通过终端服务登录,或XP的快速用户切换.
一种方法是向每个用户的配置文件添加一个程序,而没有只与您的服务通信的UI.但是,您仍然需要应对可能存在多个活动会话的事实.
根据此文档,您可以使用CreateProcessAsUser在其他用户的登录会话中创建一个进程,并可以枚举那里的窗口.您仍然需要一些IPC机制来与服务进行通信.