Могу ли я напечатать полный путь нажатия клавиши или мыши в консольном приложении C # - PullRequest
0 голосов
/ 04 октября 2018

Я работаю с программным обеспечением RPA UIPath.UIPath имитирует нажатия клавиш и щелчки мыши.То, что я хочу сделать, это провести различие между тем, когда я открываю блокнот и вручную нажимаю клавишу от имени пользователя, и когда я запускаю своего робота UIPath и выводю тип бота в блокнот.

Причина в том, что я пытаюсь отфильтроватьразница между пользовательским вводом вручную и типом бота UIPath.Мне нужно сделать это для другого работающего программного обеспечения, которое отслеживает нажатия клавиш и щелчки мыши.Я хочу, чтобы программное обеспечение не записывало нажатия клавиш и щелчки мышью от бота, и хотел бы иметь возможность найти путь выполнения бота UIPath, чтобы я мог установить фильтр.

Мои решения - это то, что я хотел бычтобы запустить некоторый код C # и заставить консоль протоколировать различные пути выполнения между мной, набирающим вручную на клавиатуре, а затем сравнивать его с типом бота UIPath.Я не уверен, как это сделать, и все, что я могу сделать, это просто записать в консоли, если набрано «a», «b», «7» и т. Д., Но не точно путь, который был выбран для «a».',' b ',' 7 'и т. д. для ввода.Любая помощь или другие предложения о том, как решить эту проблему, будет очень признателен.

1 Ответ

0 голосов
/ 08 октября 2018

Ниже приведены шаги, которые вы можете кодировать, чтобы определить, имитируется ли ввод с клавиатуры или мыши:

  1. Вам необходимо захватить события клавиатуры и мыши низкого уровня, используя SetWindowsHookEx() т.е. WH_KEYBOARD_LL и WH_MOUSE_LL
  2. Процедура подключения для WH_KEYBOARD_LL получит структуру KBDLLHOOKSTRUCT, а для WH_MOUSE_LL будет MSLLHOOKSTRUCT структура.
  3. KBDLLHOOKSTRUCT имеет поле флагов.Если для этого поля установлено значение LLKHF_INJECTED, это будет означать, что ввод с клавиатуры был введен.Для событий клавиатуры, генерируемых драйвером, этот флаг не установлен.
  4. Аналогично MSLLHOOKSTRUCT имеет поле флагов.Если для этого поля установлено значение LLKHF_INJECTED, это будет означать, что этот ввод мыши был введен.Для событий мыши, создаваемых драйвером, этот флаг не установлен.

Эти флаги установлены на уровне ядра Windows, и их невозможно изменить с помощью winapi.Я читал об этой технике, используемой античит-системой для игр, в книге Практические боты для видеоигр .Обратите внимание, что если вы используете библиотеку C #, например globalmousekeyhook , эти данные могут быть недоступны в MouseEventExtArgs/KeyboardEventArgsEx, который передается функции обратного вызова.Проверьте наличие сторонних библиотек на наличие этих данных.

...