LINUX.ORG.RU

Эмуляция печати с помощью модуля keyboard в Python

 ,


0

1

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

#!/usr/bin/python

import keyboard
keyboard.write("''", delay=0.04)

Работает он неплохо, правда задержка как-то не радует. Вы, наверное, спросите, зачем я сделал два раза cимвол ’ — дело в том, что с одним этот код не работает. Он ничего не печатает. Только при добавлении второй ’, и указании задержки в 0.04 - печатается один (!!) символ ’. Всё это выяснил случайно, эмпирическим методом (регулировал задержку сначала, а потом добавил ещё один символ ’ - а вдруг сработает? и сработало! но не так, как хотелось бы).

Вопрос в следующем: что в моём коде не так и почему этот модуль работает так неочевидно, хотя казалось бы, запросы довольно просты, я не делаю какую-то сверхзадачу. И да, если не напечатать два раза ’ ’, никакое значение задержки не решит задачу. Будет печататься пустота. То есть, дело не совсем в задержке … а в чём?

★★★★★

Последнее исправление: Desmond_Hume (всего исправлений: 3)
Ответ на: комментарий от mord0d
keyboard.write("\'", delay=0.04) #1
keyboard.write("'\'", delay=0.04) #2
keyboard.write("\'\'", delay=0.04) #3

2 вариант работает через раз, нестабильно. 3 вариант хоть и работает, но только в латинской раскладке. При кириллице печатает «э». Кстати, все варианты при разной раскладке ведут себя одинаково - или ’, или э печатают. Несмотря на то, что в коде явное указание на знак ’

Desmond_Hume ★★★★★
() автор топика

This project is currently unmaintained… you might encounter some friction and limited features using it.

Мне с дивана кажется с вашим кодом всё в порядке и надо смотреть исходники модуля, слава опенсурсу они доступны для изучения!

mydibyje ★★★★
()

Ковыряю тут модуль keyboard, в надежде создать какой-нибудь хеллоуворлдный доступный для понимания новичку скрипт, который бы печатал символ одинарных кавычек, чтобы потом его повесить на горячую клавишу

Может я тупой, но я не понял смысл программули. А сразу кавычку нельзя напечатать? Ну в смысле принтом?

FishHook
()
Ответ на: комментарий от FishHook

Да, такой код работает отлично:

#!/usr/bin/python

print("'")

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

Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от FishHook

Да, уже понял. Терминал в фокусе. А как сделать в фокусе любое окно, где мигает курсор для ввода, пока не понимаю. Причём любое. В какой-то определённый файл - есть решения в сети, а вот так, чтобы в произвольное окно, которое активно, непонятно как.

Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от Desmond_Hume

Эта задача далеко выходит за рамки хелло-ворда. Кроме того, решение будет очень не кроссплатформенное, и думаю, это больше решается средствами операционной системы, а не питоньими либами. Хотя, где-то я такую тулзу видел. В общем, для того чтобы потыкать в питона, вы не ту задачу себе придумали

FishHook
()
Ответ на: комментарий от Desmond_Hume

При кириллице печатает «э».

Потому что оно эмулирует клавиатуру, и дереференсит символ в сканкод, который в разнах раскладках печатает разный символ, что логично.

mord0d ★★★★★
()
Ответ на: комментарий от Sahas

Крутая штука, взял на заметку, спасибо, но с кириллицей не работает, к сожалению. Клавишу [’,",э] воспринимает как «apostrophe» — и в кириллице, и в латинице, при переназначении клавиш.

Desmond_Hume ★★★★★
() автор топика
Последнее исправление: Desmond_Hume (всего исправлений: 2)

Есть еще модуль pynput. В нем нужно задавать отдельно события нажатия и отпускания клавиш.

#!/usr/bin/python3                                                                                    
                                                                                                      
from pynput.keyboard import Key, Controller                                                           
import time                                                                                           
                                                                                                      
keyboard = Controller()                                                                               
                                                                                                      
keyboard.press(Key.space)                                                                             
keyboard.release(Key.space)                                                                           
                                                                                                      
keyboard.press('a')                                                                                   
keyboard.release('a')                      
Rupricht ★★
()