首页 > 解决方案 > 我可以在 C# 控制台应用程序中打印击键或鼠标单击的完整路径吗

问题描述

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

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

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

标签: c#inputrpauipath

解决方案


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

  1. 您需要使用SetWindowsHookEx()ie WH_KEYBOARD_LLWH_MOUSE_LL
  2. WH_KEYBOARD_LL 的钩子程序将接收KBDLLHOOKSTRUCT结构,并且WH_MOUSE_LL它将是MSLLHOOKSTRUCT结构。
  3. KBDLLHOOKSTRUCT有标志字段。如果LLKHF_INJECTED为这个字段设置了,这意味着这个键盘输入被注入了。驱动程序产生的键盘事件没有设置此标志。
  4. 同样MSLLHOOKSTRUCT有标志字段。如果LLKHF_INJECTED为该字段设置,则表示该鼠标输入已被注入。驱动程序产生的鼠标事件没有设置这个标志。

这些标志是在 Windows 内核级别设置的,无法使用 winapi 更改它们。我在Practical Video Game Bots一书中读到了反作弊系统在游戏中使用的这种技术。请注意,如果您使用诸如globalmousekeyhook 之MouseEventExtArgs/KeyboardEventArgsEx类的 C# 库 ,则传递给回调函数的数据可能不可用。请检查您可能使用的任何第三方库以了解此数据的可用性。


推荐阅读