使用驱动程序在Windows登录屏幕中模拟输入

本文关键字:屏幕 模拟输入 登录 Windows 驱动程序 | 更新日期: 2023-09-27 18:27:19

我正在编写一个开源的远程桌面工具,类似于VNC和TeamViewer。我注意到TeamViewer继续在"切换用户"或"工作站锁定"屏幕上捕获屏幕,并允许远程用户输入密码并解锁工作站。我也想这么做。

我读过:

更新:在windows登录屏幕上与用户交互

https://stackoverflow.com/questions/9485530/capturing-image-during-windows-logon-invalid-password

将命令按钮添加到Windows登录屏幕

从windows登录屏幕挂起热键

https://stackoverflow.com/questions/7183241/launch-windows-on-screen-keyboard-at-logon-screen-on-win7

模拟键盘的驱动程序

通过服务删除Windows登录屏幕

如何在Windows7登录屏幕中获取密钥?

在Windows XP 中使用C#在登录屏幕上显示窗口

从这些文章中,我了解到在隔离会话中模拟输入绝对不是对SendInput()的简单调用。但是有可能使用驱动程序吗(我相信它是专门的键盘过滤器驱动程序,但我不确定)?如果是这样的话,我想用C#编写一个服务(这样它就可以在用户的会话之外运行),它可以与Interception驱动程序交互以模拟按键。

作为对"你为什么不试试呢?"的回应,我还没有一个用于Interception的.NET包装器来测试这样的服务,因此,如果普遍认为这是不可能的,我不想花时间编写.NET包装器。

我发现了一个名为Interception的键盘驱动程序(将来会开源发布)。您可以在这里直接找到源(源只是围绕实际内核驱动程序的C通信API包装器)。

我还有一个问题。。。我对驱动程序由哪些文件组成感到困惑。他用C语言编程的Interception DLL库编译成了.DLL。但不是一些.sys扩展的驱动程序吗?你会如何将Interception DLL编译成一个实际的驱动程序?然后你会如何安装它?

编辑:确实存在.NET包装。当我按下"x"键时,我修改了示例控制台应用程序以键入我的整个密码,它成功地工作了——不仅在工作站锁定屏幕上,而且在Windows登录屏幕上。所以它是有效的。

编辑:这个键盘驱动程序的C#包装库在这里。

使用驱动程序在Windows登录屏幕中模拟输入

目前,实际的驱动程序不是开源的。驱动程序安装程序安装它们(keyboard.sys和mouse.sys),开源的只是与它们通信的API。在开源之前,我正在计划对内核组件进行重写。

对于其他感兴趣的人来说,答案是肯定的。

使用.NET包装器来安装位于的侦听键盘驱动程序https://github.com/candera/kchordr,并四处玩耍。即使在Windows登录屏幕上,它也会替换密钥。