2016-10-03 10 views
0

Я хочу, чтобы иметь возможность использовать пакет msvcrt в python, чтобы поймать нажатия клавиш с помощью метода msvcrt.getch(), но, похоже, окно терминала должно быть в фокусе для него работать. Есть ли способ обойти это?Улавливание нажатия клавиш на Windows с помощью Python с использованием MSVCRT, когда окно терминала не находится в фокусе

+0

Поскольку вход только когда-либо выходит на передний план окно, процесс вызова 'getch', очевидно, должен быть на переднем плане процесс. Вы не можете изменять правила. Однако вы не спрашивали о реальной проблеме, которую пытаетесь решить. Что это? – IInspectable

+0

Ну, у меня есть Python, отправляющий сообщения на мой arduino, управляющий светодиодной полосой, когда я нажимаю клавиши на клавиатуре, поэтому я хочу иметь возможность обнаруживать нажатия клавиш, даже когда окно терминала не находится в фокусе. Есть ли способ сделать окно постоянным в фоновом режиме? –

+0

* «Есть ли способ сделать окно стойким в фоновом режиме?» * - Uhm ... нет, но даже если бы это было, это не принесло бы окно на передний план (что вам нужно для 'getch() 'делать что-либо значимое). Если вы хотите контролировать вход без процесса переднего плана, вам понадобится что-то вроде [Raw Input] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536.aspx) или установите [низкоуровневый клавиатурный крючок] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985.aspx). – IInspectable

ответ

0

Я нашел оболочку python для Ctypes, предложенную @IInpectable. Он обматывает крючки с клавиатурой low_level с хорошим классом монитора.

https://github.com/ethanhs/pyhooked

+0

Вы прочитали примечание к документации [https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985.aspx] документации? Здесь это: * «[...] В большинстве случаев, когда приложение должно использовать крючки низкого уровня, ** он должен контролировать исходный ввод вместо **. Это потому, что сырой ввод может асинхронно отслеживать сообщения мыши и клавиатуры, которые нацелены для других потоков более эффективно, чем крючки низкого уровня. Дополнительную информацию о необработанном вводе см. в разделе [Сырой вход] (https://msdn.microsoft.com/en-us/library/ms645536 (vs.85) .aspx). "* – IInspectable

+0

Я подсвечиваю светодиод здесь. Не точно вычисляет ответ на вселенную. Моя реализация кажется достаточно быстрой. –

+0

Рекомендация не относится только к вашему приложению. Низкоуровневые клавиатурные крючки влияют на производительность всей системы. Для каждого ввода с клавиатуры вы получаете два дополнительных переключателя контекста, а также время, необходимое для обработки вашего события. И поскольку Stack Overflow - это сайт Q & A, кто-то может найти ваш вопрос, и они ** ** вычисляют ответ на вселенную. – IInspectable

 Смежные вопросы

  • Нет связанных вопросов^_^