pequeno resumo:
Estou tentando criar um programa que enviará eventos de teclado ao computador que, para todos os efeitos, os eventos simulados devem ser tratados como pressionamentos de tecla reais no teclado.
postagem original:
Estou procurando uma maneira de gerar eventos de teclado usando python.
Suponha que a função receba uma tecla que deve simular o pressionamento, assim:
keyboardevent('a') #lower case 'a'
keyboardevent('B') #upper case 'B'
keyboardevent('->') # right arrow key
def keyboardevent(key):
#code that simulated 'key' being pressed on keyboard
Os exemplos acima são obviamente exemplos, mas o que estou procurando é uma biblioteca, módulo ou qualquer outra coisa, que possa usar para simular eventos de teclado.
observação : isso é diferente de enviar caracteres para blocos de notas ou inserir texto em campos ou algo semelhante. Quero que o script python simule um evento de teclado real, o computador pensará que realmente existe um evento de teclado.
Nota extra:
Não quero enviar pressionamentos de tecla para a janela ativa - quero que o sistema acredite que as teclas do teclado estão sendo pressionadas, diferença sutil, pois algumas janelas ativas não aceitam certas combinações de teclas, ou se eu queria usar atalhos de teclado para processos em segundo plano por meio do meu script, eles não precisam passar pela janela ativa
Até agora eu olhei para estas coisas:
Gerar eventos de teclado para o aplicativo mais avançado
Como gerar eventos de pressionamento de tecla do teclado por meio do Python?
Que eram sobre maçã e não ajudavam em nada.
E isto:
Qual é a maneira mais fácil de simular teclado e mouse em Python?
O que parece ser o que eu preciso, mas não consigo encontrar a biblioteca ou qualquer documentação.
Também procurei mais lugares, mas ainda não encontrei uma solução.
fonte
X
plataformas existe,xdotool
mas geralmente não é instalado por padrão. Acredito que ler a documentação paraX
ele não deve ser difícil escrever um módulo mínimo em C que faz o que você quer (acredito que houve umxsendkeys
programa há algum tempo).Respostas:
Isso pode ser feito usando ctypes:
hexKeyCode
é o mapeamento do teclado virtual conforme definido pela API do Windows. A lista de códigos está disponível no MSDN: Virtual-Key Codes (Windows)fonte
Para python3 e python2, você pode usar
pyautogui
(pip install pyautogui
)Também é multiplataforma com Windows, OSX e Ubuntu LTS.
fonte
press
também funciona com teclas de mídia. Eu o uso para silenciar meu computador compress('volumemute')
A ideia do user648852, pelo menos para mim, funciona muito bem no OS X, aqui está o código para fazê-lo:
fonte
Tentei teclado lib e funciona bem no Windows. A linha abaixo me ajuda a alternar as guias no navegador:
fonte
Eu tive o mesmo problema e fiz minha própria biblioteca para ele que usa ctypes:
fonte
Cada plataforma terá uma abordagem diferente para ser capaz de gerar eventos de teclado. Isso ocorre porque cada um deles precisa fazer uso de bibliotecas do sistema (e extensões do sistema). Para uma solução de plataforma cruzada, você precisaria pegar cada uma dessas soluções e envolvê-la em uma verificação de plataforma para executar a abordagem adequada.
Para Windows, você pode usar a extensão pywin32 . win32api.keybd_event
Você precisará investigar o pywin32 para saber como usá-lo corretamente, pois nunca o usei.
fonte
Apenas Windows: você pode usar o Ironpython ou uma biblioteca que permite que o cPython acesse os frameworks .NET no Windows. Em seguida, use a classe sendkeys do .NET ou a mais geral send para simular um pressionamento de tecla.
Apenas OS X: Use PyObjC e use a
CGEventCreateKeyboardEvent
chamada.Divulgação completa: Eu só fiz isso no OS X com Python, mas usei .NET sendkeys (com C #) e funciona muito bem.
fonte
python for .net
. uma solução, como eu usaria osendkeys
. você poderia dar um exemplo disso?Mac OS
Aqui está a versão mais completa da resposta de @Phylliida em forma de classe com exemplo de código:
Aqui está o código de demonstração usando a classe acima:
que simulará a digitação de
Hello World!
texto na janela atual.Você pode executar o código acima como um script de shell. Verifique o link para o
keyboard.py
arquivo .fonte
Para Python2.7 (windows32), instalei apenas o pywin32-223 . E eu escrevi um código simples em python:
Pode ser verificado se você executa o código e vai imediatamente para a janela do bloco de notas (onde o texto já existe) e coloca o cursor na linha superior.
fonte