是否可以查看系统的用户桌面?如何从另一个会话桌面的用户?

时间:2011-08-07 19:01:24

标签: session windows-7 windows-services desktop

我运行Windows 7。 我运行使用GUI运行程序的Windows服务。 我无法看到我的程序的GUI,因为它是由系统甚至我的用户从另一个会话启动的。

有没有办法让我看到我的节目? 将桌面切换到系统用户?

1 个答案:

答案 0 :(得分:3)

使用SetThreadDesktop()将服务中的线程上下文更改为用户的桌面。

  • SetThreadDesktop()获取桌面的句柄,因为它是第一个参数;要获得该句柄,请使用EnumDesktops()
  • EnumDesktops()获取窗口站的句柄,因为它是第一个参数;要获得该处理,请使用EnumWindowStations()

要了解Window Station和Desktops的用途,请尝试从MSDN阅读this overview

对这种技术要谨慎。与用户桌面交互的高权限进程(即服务)是shatter attacks的基础。您需要编写一个在用户上下文中运行的单独应用程序,并通过管道或类似方式与您的服务进行通信。