c++ - 如何将 Windows 服务连接到控制台 session

标签 c++ windows service remote-desktop

我一直在开发一个作为 Windows 服务运行的远程桌面应用程序,我想知道如何将应用程序连接到特定 session ,并允许它以位图形式检索用户桌面,设置光标位置,将鼠标点击和键盘输入发送到控制台 session 。

最佳答案

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

  • SetThreadDesktop() 将桌面句柄作为第一个参数;要获取该句柄,请使用 EnumDesktops() .
  • EnumDesktops() 将窗口站的句柄作为第一个参数;要获取该句柄,请使用 EnumWindowStations()

要了解 Window Stations 和 Desktops 发生了什么,请尝试阅读 this overview来自MSDN。

最后,请谨慎使用此技术。与用户桌面交互的更高权限进程(即服务)是 shatter attacks 的基础.

关于c++ - 如何将 Windows 服务连接到控制台 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359436/

相关文章:

c++ - 在 Linux 上使用 mingw-w64 交叉编译时声明冲突

c++ - 警告 : treating 'c-header' input as 'c++-header' when in C++ mode, 此行为已弃用

windows - 命令行有效 - .Bat 脚本无效

windows - 如何在Windows 7中更改音频输出设备的默认共享模式采样率?

linux - "unable to resolve host MongoDB"尝试启动 "sudo service mongod start"

c++ - 我们为什么可以这样做:Base * base = new Derived;而我们不能做推导*派生=新基数?

c++ - 您能否将特定线程 ID 分组到 OpenMP 中的唯一任务组中?

c# - 如何通过开发人员命令提示符添加引用

objective-c - 如何在 OSX 中调试 XPC 服务和客户端应用程序之间的通信

android - 启动和停止notificationlistener服务