我正在编写一个开源远程桌面工具,类似于 VNC 和 TeamViewer。我注意到 TeamViewer 继续在切换用户或工作站锁定屏幕上捕获屏幕 - 并允许远程用户输入密码并解锁工作站。我也想这样做。
我读了:
https://stackoverflow.com/questions/9485530/capturing-image-during-windows-logon-invalid-password
在 Windows XP 中使用 C# 在登录屏幕上显示窗口
从这些帖子中,我收集到在隔离会话中模拟输入绝对不是对 SendInput() 的简单调用。但是是否可以使用驱动程序(我相信它专门是一个键盘过滤器驱动程序,但我不确定)?如果是这样,我正在考虑用 C# 编写一个服务(以便它在用户会话之外运行),它与拦截驱动程序交互以模拟按键。
作为回应:“你为什么不试试呢?”,目前还没有用于 Interception 的 .NET 包装器让我测试这样的服务,所以如果普遍认为这是不可能的,我不想花时间编写那个 .NET 包装器。
我找到了一个名为 Interception 的键盘驱动程序(将来会开源发布)。您可以直接在此处找到源代码(源代码只是围绕实际内核驱动程序的 C 通信 API 包装器)。
我有另一个问题......我对什么文件构成驱动程序感到困惑。他用 C 语言编写的 Interception DLL 库编译为 .DLL。但是,不是某些 .sys 扩展名的驱动程序——你如何将拦截 DLL 编译成实际的驱动程序——然后你将如何安装它?
编辑: .NET 包装器确实存在。当我按下“x”键时,我修改了示例控制台应用程序以输入我的整个密码,并且它成功运行 - 不仅在工作站锁定屏幕上,而且在 Windows 登录屏幕上。所以它有效。
编辑: 此键盘驱动程序的 C# 包装库在这里。