屏幕(虚拟)键盘在 Win10 中如何工作

How does on-screen (virtual) keyboard works in Win10

我在 Google 或任何 Microsoft 网站上都没有找到任何相关内容,所以我决定在这里提问。

大家都知道在Win-based OS中有一个virtual keyboard。我也知道基于 *nix 的 OS,也有。所以,问题是:

HOW DOES IT WORK INSIDE?

我的意思是,让我们举个例子,我在Windows中打开on screen keyboard 10。两者之间的实际区别是什么:

  1. 通过硬件键盘输入:当我使用它时,就像我按下 X 按钮
  2. ..并使用虚拟键盘,当我按下同一个按钮时

想象一下,我有 terminal/computer 的管理员权限,是否有 track/distinguish 的任何选项,我第二次按下按钮时不是在硬件键盘上,而是在屏幕上(通过鼠标单击) 的版本?

还有许多不同的软件,例如 AutoIt(yes, it's a language,但它与此示例相关)模拟 pressing the X button。它们如何在基于 Win 的 OS 中工作?它们 "in-common" 使用默认的屏幕键盘并使用相同的 driver/WinAPI 还是它们之间存在差异?

而第二种情况,介于:

  1. 默认屏幕键盘
  2. 编译的 AutoIt 脚本
  3. ..任何其他模拟 press X button
  4. 的软件

我想找出 "how exactly button was pressed" 的唯一方法是通过 taskmgr 检查当前进程列表并找出是否启动了任何东西。或者我在这里完全错了,遗漏了什么?

THE SCOPE

我写了一个 node.js 脚本来模拟 windows 应用程序中的按钮按下行为。

TL:DR business logic short => open notepad.exe and type `Hello world`

有人可以给我任何 advice/recommend 任何 powershell/bat 脚本( 或任何其他解决方案 )并演示 Get­Async­Key­State 检查行为吗?我可以用它轻松检查我自己的 node.js 脚本(不是通过它的功能,而是通过触发 press the X button 事件) 我在这里找到了 node.js 案例的答案:Detecting Key Presses Across Applications in Powershell

SendInput 是在软件中生成用户输入的首选方法。 Windows 屏幕键盘可能将它用于除 Ctrl+Alt+Delete 之外的所有操作,我认为它具有某种特殊处理方式。屏幕键盘只能在某些配置下生成 Ctrl+Alt+Delete。

软件生成的输入与内核中 RIT(原始输入线程)中的正常硬件输入合并。

A​​ low-level keyboard hook 可以检测软件生成的输入。