Как бы вы создали приложение для Windows, которое условно блокирует ввод?

StackOverflow https://stackoverflow.com/questions/1619784

  •  06-07-2019
  •  | 
  •  

Вопрос

Возможно, вы слышали о PawSense , утилите только для Windows, которая предотвращает ввод нажатий клавиш когда он полагает, что на клавиатуре есть кошка или другое животное, набирая бессмысленный ввод, например "zlxkkkkkkkk". Это кажется забавным проектом в свободное время, но мне было интересно узнать о некоторых деталях его реализации.

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

Вам нужно, чтобы ваше приложение наблюдало за вводом информации и представляло проблему, если вы обнаружили кошку. Сохраните ли вы буфер недавних нажатий клавиш и пропустите их только в том случае, если они не были напечатаны? Или, если бы происходило печатание кошки, вы бы пропустили небольшое число, прежде чем заблокировать ввод? Какую логику вы бы хотели использовать?

Что касается действительной механики блокировки ввода, скажем, в C #, на этом сайте есть и другие вопросы. Повторяю, у меня вопрос, какую логику вы бы использовали для обнаружения и блокировки печатания кошек.

Это было полезно?

Решение

Я бы подождал, пока на клавиатуре не появится кошка, а затем заблокировал бы ввод, так как буфер может быть проблематичным.

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

Держите это так просто, как это должно быть.

Другие советы

Вам нужно изучить введение общесистемной ловушки WIN32 . В этой статье MSDN рассматриваются основы этого (внимание в нем указаны оба приложения). или крючки уровня нити и общесистемные крючки).

Как только вы это поймете, вам нужно будет перехватить несколько сообщений, связанных с клавиатурой, наверняка WM_KEYUP, а также несколько других сообщений WM_KEYxxxx, в зависимости от ваших потребностей).

Затем вам нужно будет ввести логику, которая решает, являются ли нажатия клавиш действительными или бессмысленными, и либо передавать сообщения (чтобы они могли в конечном итоге перетекать в приложение, которое имеет фокус) или игнорировать их.

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

Так что, если вы можете просто нажимать клавиши времени, я думаю, это может сработать.

Размышление о нагрузке. Я бы начал с чего-то вроде следующего:

<Ол>
  • Подождите, пока пользователь не будет активен, как: 2 минуты.
  • Запустите свое приложение
  • Прослушивание хитов клавиатуры
  • Сопоставьте введенные ключи, если они есть в словаре
  • Заблокируйте клавиатуру после шести или семи.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top