我可以在 C# 控制台应用程序中打印击键或鼠标单击的完整路径吗?



我正在使用RPA软件UIPath。 UIPath 模拟击键和鼠标单击。 我想做的是区分何时打开记事本并以用户身份手动键入击键,以及何时运行 UIPath 机器人并将机器人键入记事本。

原因是我试图过滤掉用户手动键入和 UIPath 机器人键入之间的区别。 我需要为另一个正在运行的软件执行此操作,该软件正在监视击键和鼠标单击。 我希望该软件不记录来自机器人的击键和鼠标单击,并希望能够找到 UIPath 机器人的执行路径,以便我可以设置过滤器。

我的解决方案是我想运行一些 C# 代码,并让控制台记录我在键盘中手动键入之间的不同执行路径,然后将其与 UIPath 机器人键入进行比较。 我不确定该怎么做,我所能做的就是在控制台中记录"a"、"b"、"7"等......已键入,但不完全是要键入的"a"、"b"、"7"等所采用的路径。 有关如何解决此问题的任何帮助或其他建议将不胜感激。

以下是您可以编码以检测是否模拟键盘或鼠标输入的步骤:

  1. 您需要使用SetWindowsHookEx()捕获低级键盘和鼠标事件,即WH_KEYBOARD_LLWH_MOUSE_LL
  2. WH_KEYBOARD_LL的钩子过程将接收KBDLLHOOKSTRUCT结构,WH_MOUSE_LL钩过程将MSLLHOOKSTRUCT结构。
  3. KBDLLHOOKSTRUCT有标志字段。如果为此字段设置了LLKHF_INJECTED,则表示此键盘输入已注入。驱动程序生成的键盘事件未设置此标志。
  4. 同样MSLLHOOKSTRUCT也有标志字段。如果为此字段设置了LLKHF_INJECTED,则表示此鼠标输入已注入。驱动程序生成的鼠标事件未设置此标志。

这些标志是在Windows内核级别设置的,无法使用winapi更改它们。我在《实用视频游戏机器人》一书中读到过反作弊系统在游戏中使用这种技术。请注意,如果使用 C# 库(如全局鼠标键钩(,则此数据在传递给回调函数的MouseEventExtArgs/KeyboardEventArgsEx中可能不可用。请检查您可能正在使用的任何第三方库以获取此数据的可用性。

最新更新