我有一个启动另一个应用程序的系统服务。这个应用程序(用C#编写)在某些时候需要获取所有打开的窗口(应用程序)并列出它们的名称。
我使用了EnumWindow
(来自Win32),我使用Process.GetProcesses()
和process.MainWindowTitle
(来自C#)我得到的是:
处理:UI0Detect
窗口标题:交互式服务检测
如果我手动运行该应用程序,它会给我所有的窗口。但是当系统服务运行应用程序时,我得到的就是这一项服务。
如何让应用程序为我提供正确的活动窗口列表?
谢谢
答案 0 :(得分:1)
Windows服务不会在同一个"会话中运行"作为一个正常的程序,所以当您的服务启动时,第二个启动的程序也会在特殊会话中启动。您需要使用CreateProcessAsUser并在要监控的用户会话中创建第二个应用程序。
有关详细信息,请参阅编写交互式服务的this MSDN article。