从 Windows 8 中的 windows 服务(会话 0)发送输入或类似信息到登录屏幕

SendInput or similar from windows service (session 0) in Windows 8 to login screen

据我了解,当我们启动 windows 时,它会启动不连接任何 GUI 等的会话 0,并且 运行 是所有 windows 服务。所以我的任务是,在启动 windows 之后,模拟 windows 输入以选择用户并登录到会话。我知道要从服务发送输入,我应该 运行 桌面应用程序并通过它发送输入、显示 GUI 等等,但是我该如何在任何用户会话开始之前执行此操作? (例如我看到 TeamViewer 可以做到)

WTSGetActiveConsoleSessionId() 会告诉您哪个会话附加到物理控制台。

然后您可以使用 DuplicateTokenEx(), change the new token's session with SetTokenInformation() and the TokenSessionId option, and launch a process with CreateProcessAsUser() 复制您的安全令牌。

新进程应该 运行 在正确的会话中,但它可能还需要将自己附加到正确的桌面才能与登录界面交互。您可以使用EnumDesktops()列出可用的桌面,并通过反复试验来确定登录界面运行在哪个桌面。(请注意,这在Windows的不同版本中可能会有所不同。)