Como você faria um aplicativo do Windows que bloqueia condicionalmente entrada?
-
06-07-2019 - |
Pergunta
Você pode ter ouvido de PawSense , um Windows-only utilitário que impede que as teclas digitadas sejam introduzidos quando se acredita que há um gato ou outro animal na entrada absurdo digitação do teclado, como "zlxkkkkkkkk;". Parece um projeto divertido de fazer no meu tempo livre, mas eu estava pensando sobre alguns detalhes de implementação.
Eu acho que eu poderia fazer a parte de reconhecimento de padrões do mesmo, ou com heurísticas codificadas ou usando algum tipo de algoritmo de reconhecimento de padrões (que eu tenho sido exposto a antes e se sentir confortável com). Minha pergunta é sobre os sistemas lado das coisas e a lógica de programação de como você iria bloquear a entrada.
Você precisa ter o seu pedido de observar dados e apresentar um desafio se você detectar digitação gato. Você manter um buffer de teclas recentes e só deixá-los passar se fosse digitação não-gato? Ou se não estava ocorrendo digitação gato, você só permitem um número pequeno através antes de bloquear a entrada? Qual seria a lógica real que você gostaria de usar?
Como para a mecânica de bloqueio de entrada, digamos, C #, há outras perguntas sobre este site. A minha pergunta, para reiterar, é o que a lógica que você usaria para detectar e digitação bloco de gato.
Solução
Eu esperaria até que eu acho que há um gato no teclado, em seguida, bloquear a entrada, como um buffer pode ser problemático.
Por exemplo, se eu estou escrevendo, e janelas de comutação rápida, digitando, como você determinar onde as combinações de teclas deve ser?
Mantenha-o tão simples como ele precisa ser.
Outras dicas
Você precisa olhar para a introdução de um Win32 gancho systemwide . Este artigo MSDN aborda os conceitos básicos deste (atenção que especifica tanto aplicação ou segmento de nível de ganchos e ganchos de todo o sistema).
Depois de entender isso, você precisa pegar várias mensagens relacionados com o teclado, WM_KEYUP com certeza, algumas mensagens outros WM_KEYxxxx, bem como, dependendo de suas necessidades).
Em seguida, você precisa introduzir a lógica que decide se as teclas digitadas são válidas ou rabiscos, e quer passar-nos mensagens (para que eles possam, eventualmente, escorrem para a aplicação que tem foco) ou ignorá-los.
Sem saber nada sobre isso, eu iria começar baseando-se em como chaves longa são pressionados e não no que as chaves são realmente pressionado, pensar que um animal não vai simplesmente pressione uma tecla e liberá-lo muito rapidamente, depois outro , etc., mas é mais provável para fazer uma pausa em um conjunto de chaves.
Então, se você pode simplesmente keypresses tempo, eu acho que o trabalho poder.
Pensando carga. Gostaria de começar com algo como a seguir:
- Aguarde nenhuma atividade do usuário para, como:. 2 minutos de tempo
- Inicie seu aplicativo
- Ouça a acertos de teclado
- Combinar as teclas digitadas, se existir no dicionário
- Bloquear o teclado após seis ou sete.