Как бы вы создали приложение для Windows, которое условно блокирует ввод? - PullRequest
0 голосов
/ 25 октября 2009

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 25 октября 2009

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

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

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

2 голосов
/ 25 октября 2009

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

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

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

1 голос
/ 25 октября 2009

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

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

0 голосов
/ 25 октября 2009

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

  1. Ожидание отсутствия активности пользователя в течение 2 минут.
  2. Запустите ваше приложение
  3. Слушать хиты клавиатуры
  4. Соответствует набранным клавишам, если они существуют в словаре
  5. Блокировка клавиатуры после шести или семи.
...