Este projeto está atualmente sem manutenção. Funciona em muitos casos e gostaria de retomá-lo no futuro, mas você pode encontrar alguns atritos e recursos limitados ao usá-lo.
Assuma o controle total do seu teclado com esta pequena biblioteca Python. Conecte eventos globais, registre teclas de atalho, simule o pressionamento de teclas e muito mais.
ctrl+shift+m, ctrl+space
) com tempo limite controlável.Ctrl+ç
).pip install mouse
). Instale o pacote PyPI:
pip install keyboard
ou clonar o repositório (não é necessária instalação, os arquivos de origem são suficientes):
git clone https://github.com/boppreh/keyboard
ou baixe e extraia o zip para a pasta do seu projeto.
Em seguida, verifique a documentação da API abaixo para ver quais recursos estão disponíveis.
Use como biblioteca:
import keyboard
keyboard . press_and_release ( 'shift+s, space' )
keyboard . write ( 'The quick brown fox jumps over the lazy dog.' )
keyboard . add_hotkey ( 'ctrl+shift+a' , print , args = ( 'triggered' , 'hotkey' ))
# Press PAGE UP then PAGE DOWN to type "foobar".
keyboard . add_hotkey ( 'page up, page down' , lambda : keyboard . write ( 'foobar' ))
# Blocks until you press esc.
keyboard . wait ( 'esc' )
# Record events until 'esc' is pressed.
recorded = keyboard . record ( until = 'esc' )
# Then replay back at three times the speed.
keyboard . play ( recorded , speed_factor = 3 )
# Type @@ then press space to replace with abbreviation.
keyboard . add_abbreviation ( '@@' , '[email protected]' )
# Block forever, like `while True`.
keyboard . wait ()
Use como módulo independente:
# Save JSON events to a file until interrupted:
python -m keyboard > events.txt
cat events.txt
# {"event_type": "down", "scan_code": 25, "name": "p", "time": 1622447562.2994788, "is_keypad": false}
# {"event_type": "up", "scan_code": 25, "name": "p", "time": 1622447562.431007, "is_keypad": false}
# ...
# Replay events
python -m keyboard < events.txt
event.device == None
). #21/dev/input/input*
), mas isso requer root.keyboard
não poderá reportar eventos.keyboard
via SSH, o servidor não detectará seus principais eventos. import keyboard
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed!' ))
# If the program finishes, the hotkey is not in effect anymore.
# Don't do this! This will use 100% of your CPU.
#while True: pass
# Use this instead
keyboard . wait ()
# or this
import time
while True :
time . sleep ( 1000000 )
import keyboard
# Don't do this! This will use 100% of your CPU until you press the key.
#
#while not keyboard.is_pressed('space'):
# continue
#print('space was pressed, continuing...')
# Do this instead
keyboard . wait ( 'space' )
print ( 'space was pressed, continuing...' )
import keyboard
# Don't do this!
#
#while True:
# if keyboard.is_pressed('space'):
# print('space was pressed!')
#
# This will use 100% of your CPU and print the message many times.
# Do this instead
while True :
keyboard . wait ( 'space' )
print ( 'space was pressed! Waiting on it again...' )
# or this
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed!' ))
keyboard . wait ()
import keyboard
# Don't do this! This will call `print('space')` immediately then fail when the key is actually pressed.
#keyboard.add_hotkey('space', print('space was pressed'))
# Do this instead
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed' ))
# or this
def on_space ():
print ( 'space was pressed' )
keyboard . add_hotkey ( 'space' , on_space )
# or this
while True :
# Wait for the next event.
event = keyboard . read_event ()
if event . event_type == keyboard . KEY_DOWN and event . name == 'space' :
print ( 'space was pressed' )
# Don't do this! The `keyboard` module is meant for global events, even when your program is not in focus.
#import keyboard
#print('Press any key to continue...')
#keyboard.get_event()
# Do this instead
input ( 'Press enter to continue...' )
# Or one of the suggestions from here
# https://stackoverflow.com/questions/983354/how-to-make-a-script-wait-for-a-pressed-key
press_and_release
)unblock_key
, unhook_key
, unremap_key
)register_hotkey
)clear_hotkey
, unregister_hotkey
, unremap_hotkey
)clear_all_hotkeys
, remove_all_hotkeys
, unregister_all_hotkeys
)replay
)register_word_listener
)remove_abbreviation
)register_abbreviation
) = 'down'
= 'up'
[fonte]
= { 'alt' , 'alt gr' , 'ctrl' , 'left alt' , 'left ctrl' , 'left shift' , 'left windows' , 'right alt' , 'right ctrl' , 'right shift' , 'right windows' , 'shift' , 'windows' }
= { 'alt' , 'ctrl' , 'shift' , 'windows' }
= '0.13.5'
[fonte]
Retorna True se key
for um código de varredura ou nome de uma chave modificadora.
[fonte]
Retorna uma lista de códigos de varredura associados a esta chave (nome ou código de varredura).
[fonte]
Analisa uma tecla de atalho fornecida pelo usuário em tuplas aninhadas que representam a estrutura analisada, sendo os valores inferiores listas de códigos de varredura. Também aceita códigos de varredura brutos, que são então agrupados no número necessário de aninhamentos.
Exemplo:
parse_hotkey ( "alt+shift+a, alt+b, c" )
# Keys: ^~^ ^~~~^ ^ ^~^ ^ ^
# Steps: ^~~~~~~~~~^ ^~~~^ ^
# ((alt_codes, shift_codes, a_codes), (alt_codes, b_codes), (c_codes,))
[fonte]
Envia eventos do sistema operacional que executam a tecla de atalho fornecida.
hotkey
pode ser um código de varredura (por exemplo, 57 para espaço), uma tecla única (por exemplo, 'espaço') ou uma tecla de atalho com múltiplas teclas e etapas (por exemplo, 'alt+F4, enter').do_press
se for verdadeiro, os eventos de imprensa serão enviados. O padrão é Verdadeiro.do_release
se for verdadeiro, os eventos de lançamento serão enviados. O padrão é Verdadeiro. send ( 57 )
send ( 'ctrl+alt+del' )
send ( 'alt+F4, enter' )
send ( 'shift+s' )
Nota: as teclas são liberadas na ordem inversa em que foram pressionadas.
[fonte]
Pressiona e mantém pressionada uma tecla de atalho (consulte send
).
[fonte]
Libera uma tecla de atalho (veja send
).
[fonte]
Retorna True se a tecla for pressionada.
is_pressed ( 57 ) #-> True
is_pressed ( 'space' ) #-> True
is_pressed ( 'ctrl+space' ) #-> True
[fonte]
Chama a função fornecida em um novo thread depois de esperar algum tempo. Útil para dar ao sistema algum tempo para processar um evento, sem bloquear o fluxo de execução atual.
[fonte]
Instala um ouvinte global em todos os teclados disponíveis, invocando callback
sempre que uma tecla é pressionada ou liberada.
O evento passado para o callback é do tipo keyboard.KeyboardEvent
, com os seguintes atributos:
name
: uma representação Unicode do caractere (por exemplo, "&") ou descrição (por exemplo, "espaço"). O nome é sempre minúsculo.scan_code
: número que representa a chave física, por exemplo, 55.time
: timestamp da hora em que o evento ocorreu, com a mesma precisão fornecida pelo SO.Retorna o retorno de chamada fornecido para facilitar o desenvolvimento.
[fonte]
Invoca callback
para cada evento KEY_DOWN. Para obter detalhes, consulte hook
.
[fonte]
Invoca callback
para cada evento KEY_UP. Para obter detalhes, consulte hook
.
[fonte]
Conecta eventos de ativação e desativação de teclas para uma única chave. Retorna o manipulador de eventos criado. Para remover uma chave com gancho, use unhook_key(key)
ou unhook_key(handler)
.
Nota: esta função compartilha estado com teclas de atalho, então clear_all_hotkeys
também a afeta.
[fonte]
Invoca callback
para o evento KEY_DOWN relacionado à chave fornecida. Para obter detalhes, consulte hook
.
[fonte]
Invoca callback
para o evento KEY_UP relacionado à chave fornecida. Para obter detalhes, consulte hook
.
[fonte]
Remove um gancho adicionado anteriormente, seja por retorno de chamada ou pelo valor de retorno de hook
.
[fonte]
Remove todos os ganchos do teclado em uso, incluindo teclas de atalho, abreviações, ouvintes de palavras, record
e wait
.
[fonte]
Suprime todos os eventos principais de uma determinada tecla, independentemente dos modificadores.
[fonte]
Sempre que a tecla src
for pressionada ou liberada, independentemente dos modificadores, pressione ou solte a tecla de atalho dst
.
[fonte]
Analisa uma tecla de atalho fornecida pelo usuário. Diferentemente de parse_hotkey
, em vez de cada etapa ser uma lista dos diferentes códigos de varredura para cada chave, cada etapa é uma lista de todas as combinações possíveis desses códigos de varredura.
[fonte]
Invoca um retorno de chamada sempre que uma tecla de atalho é pressionada. A tecla de atalho deve estar no formato ctrl+shift+a, s
. Isso seria acionado quando o usuário segurasse ctrl, shift e "a" ao mesmo tempo, soltasse e pressionasse "s". Para representar vírgulas, sinais de adição e espaços literais, use seus nomes ('vírgula', 'mais', 'espaço').
args
é uma lista opcional de argumentos a serem passados ao retorno de chamada durante cada invocação.suppress
define se os gatilhos bem-sucedidos devem impedir que as chaves sejam enviadas para outros programas.timeout
é a quantidade de segundos permitidos entre os pressionamentos de teclas.trigger_on_release
se for verdadeiro, o retorno de chamada será invocado ao liberar a tecla em vez de pressionar a tecla. A função do manipulador de eventos é retornada. Para remover uma tecla de atalho, chame remove_hotkey(hotkey)
ou remove_hotkey(handler)
. antes que o estado da tecla de atalho seja redefinido.
Nota: as teclas de atalho são ativadas quando a última tecla é pressionada e não liberada. Nota: o retorno de chamada é executado em um thread separado, de forma assíncrona. Para obter um exemplo de como usar um retorno de chamada de forma síncrona, consulte wait
.
Exemplos:
# Different but equivalent ways to listen for a spacebar key press.
add_hotkey ( ' ' , print , args = [ 'space was pressed' ])
add_hotkey ( 'space' , print , args = [ 'space was pressed' ])
add_hotkey ( 'Space' , print , args = [ 'space was pressed' ])
# Here 57 represents the keyboard code for spacebar; so you will be
# pressing 'spacebar', not '57' to activate the print function.
add_hotkey ( 57 , print , args = [ 'space was pressed' ])
add_hotkey ( 'ctrl+q' , quit )
add_hotkey ( 'ctrl+alt+enter, space' , some_callback )
[fonte]
Remove uma tecla de atalho previamente conectada. Deve ser chamado com o valor retornado por add_hotkey
.
[fonte]
Remove todas as teclas de atalho do teclado em uso, incluindo abreviações, ouvintes de palavras, record
e wait
.
[fonte]
Sempre que a tecla de atalho src
for pressionada, suprima-a e envie dst
.
Exemplo:
remap ( 'alt+w' , 'ctrl+up' )
[fonte]
Constrói uma lista de todos os códigos de varredura pressionados no momento, libera-os e retorna a lista. Combina bem com restore_state
e restore_modifiers
.
[fonte]
Dada uma lista de scan_codes garante que essas teclas, e somente essas teclas, sejam pressionadas. Combina bem com stash_state
, alternativa a restore_modifiers
.
[fonte]
Como restore_state
, mas restaura apenas chaves modificadoras.
[fonte]
Envia eventos artificiais de teclado para o SO, simulando a digitação de um determinado texto. Os caracteres não disponíveis no teclado são digitados como caracteres unicode explícitos usando funcionalidades específicas do sistema operacional, como alt+codepoint.
Para garantir a integridade do texto, todas as teclas atualmente pressionadas são liberadas antes de o texto ser digitado e os modificadores são restaurados posteriormente.
delay
é o número de segundos de espera entre os pressionamentos de tecla; o padrão é nenhum atraso.restore_state_after
pode ser usado para restaurar o estado das teclas pressionadas após o texto ser digitado, ou seja, pressionar as teclas que foram liberadas no início. O padrão é Verdadeiro.exact
digitando todos os caracteres como unicode explícito (por exemplo, alt+codepoint ou eventos especiais). Se Nenhum, usa o valor sugerido específico da plataforma. [fonte]
Bloqueia a execução do programa até que a tecla de atalho especificada seja pressionada ou, se não for fornecido nenhum parâmetro, bloqueia para sempre.
[fonte]
Retorna uma representação em string da tecla de atalho dos nomes de teclas fornecidos ou das teclas atualmente pressionadas, se não forem fornecidas. Esta função:
Exemplo:
get_hotkey_name ([ '+' , 'left ctrl' , 'shift' ])
# "ctrl+shift+plus"
[fonte]
Bloqueia até que um evento de teclado aconteça e depois retorna esse evento.
[fonte]
Bloqueia até que um evento de teclado aconteça e, em seguida, retorna o nome desse evento ou, se estiver faltando, seu código de verificação.
[fonte]
Semelhante a read_key()
, mas bloqueia até que o usuário pressione e solte uma tecla de atalho (ou tecla única) e, em seguida, retorna uma string representando a tecla de atalho pressionada.
Exemplo:
read_hotkey ()
# "ctrl+shift+p"
[fonte]
Dada uma sequência de eventos, tenta deduzir quais strings foram digitadas. As strings são separadas quando uma tecla não textual é pressionada (como tab ou enter). Os caracteres são convertidos para letras maiúsculas de acordo com o status de shift e capslock. Se allow_backspace
for True, os retrocessos removem o último caractere digitado.
Esta função é um gerador, então você pode passar um fluxo infinito de eventos e convertê-los em strings em tempo real.
Observe que esta função é apenas uma heurística. O Windows, por exemplo, mantém o estado do teclado por processo, como o layout do teclado, e essas informações não estão disponíveis para nossos ganchos.
get_type_strings ( record ()) #-> ['This is what', 'I recorded', '']
[fonte]
Começa a gravar todos os eventos do teclado em uma variável global ou na fila fornecida, se houver. Retorna a fila de eventos e a função hooked.
Use stop_recording()
ou unhook(hooked_function)
para parar.
[fonte]
Interrompe a gravação global de eventos e retorna uma lista dos eventos capturados.
[fonte]
Registra todos os eventos de teclado de todos os teclados até que o usuário pressione a tecla de atalho fornecida. Em seguida, retorna a lista de eventos registrados, do tipo keyboard.KeyboardEvent
. Combina bem com play(events)
.
Nota: esta é uma função de bloqueio. Nota: para obter mais detalhes sobre o gancho do teclado e eventos, consulte hook
.
[fonte]
Reproduz uma sequência de eventos gravados, mantendo os intervalos de tempo relativos. Se speed_factor for <= 0, as ações serão repetidas tão rápido quanto o sistema operacional permitir. Combina bem com record()
.
Nota: o estado atual do teclado é apagado no início e restaurado no final da função.
[fonte]
Invoca um retorno de chamada toda vez que uma sequência de caracteres é digitada (por exemplo, 'pet') e seguida por uma tecla de disparo (por exemplo, espaço). Modificadores (por exemplo, alt, ctrl, shift) são ignorados.
word
o texto digitado a ser correspondido. Por exemplo, 'animal de estimação'.callback
é uma função sem argumentos a ser invocada cada vez que a palavra é digitada.triggers
é a lista de chaves que farão com que uma correspondência seja verificada. Caso o usuário pressione alguma tecla que não seja um caractere (len>1) e não esteja em triggers, os caracteres até então serão descartados. Por padrão, o gatilho é apenas space
.match_suffix
define se os finais das palavras também devem ser verificados em vez de apenas palavras inteiras. Por exemplo, se for verdade, digitar 'carpet'+space irá acionar o ouvinte para 'pet'. O padrão é falso, apenas palavras inteiras são verificadas.timeout
é o número máximo de segundos entre caracteres digitados antes que a palavra atual seja descartada. O padrão é 2 segundos. Retorna o manipulador de eventos criado. Para remover um ouvinte de palavras, use remove_word_listener(word)
ou remove_word_listener(handler)
.
Nota: todas as ações são executadas com a tecla pressionada. Os eventos de ativação são ignorados. Observação: as correspondências de palavras diferenciam maiúsculas de minúsculas .
[fonte]
Remove um ouvinte de palavras registrado anteriormente. Aceita a palavra usada durante o registro (string exata) ou o manipulador de eventos retornado pelas funções add_word_listener
ou add_abbreviation
.
[fonte]
Registra uma tecla de atalho que substitui um texto digitado por outro. Por exemplo
add_abbreviation ( 'tm' , u'™' )
Substitui cada "tm" seguido de um espaço por um símbolo ™ (e sem espaço). A substituição é feita enviando eventos backspace.
match_suffix
define se os finais das palavras também devem ser verificados em vez de apenas palavras inteiras. Por exemplo, se for verdade, digitar 'carpet'+space irá acionar o ouvinte para 'pet'. O padrão é falso, apenas palavras inteiras são verificadas.timeout
é o número máximo de segundos entre caracteres digitados antes que a palavra atual seja descartada. O padrão é 2 segundos. Para obter mais detalhes, consulte add_word_listener
.
[fonte]
Dado um nome de chave (por exemplo, "LEFT CONTROL"), limpe a string e converta para a representação canônica (por exemplo, "left ctrl") se alguma for conhecida.