2012-07-20 71 views
1

我有一个系统服务启动另一个应用程序。这个应用程序(用C#编写)在某些时候需要获取所有打开的窗口(应用程序)并列出它们的名称。C# - 获取打开的窗口不工作,因为它应该

我用EnumWindow(Win32中),我用Process.GetProcesses()process.MainWindowTitle(从C#)我得到的是这样的:

过程:UI0Detect

窗口标题:交互式服务检测

如果我手工运行该应用程序,它会给我所有的窗户,因为它应该。但是当系统服务运行应用程序时,我所得到的只是这一项服务。

我该如何让应用程序获得正确的活动窗口列表?

谢谢

+1

系统服务在哪个帐户下运行?它是否具有机器上的管理级别权限? – mellamokb 2012-07-20 13:43:39

+0

是的。我从我的帐户(也带有管理权限)安装它并从管理员运行 – 2012-07-20 13:45:45

+3

您是否使用Windows Seven?如果是这样,我不确定服务可以访问这些信息。 – Marco 2012-07-20 13:46:46

回答

1

Windows服务无法在相同的“会话”作为一个正常的程序运行,所以第二启动的程序也开始在特别会议上,当你的服务启动它。您将需要使用CreateProcessAsUser并在您要监控的用户会话中创建第二个应用。

有关编写交互式服务的更多信息,请参阅this MSDN article

+0

uuuuuu你真聪明!谢谢!这真的帮助我。它现在有效。 – 2012-07-20 14:01:38