Есть ли способ отправить / нажать клавиши NUMPAD в Python? - PullRequest
0 голосов
/ 08 января 2019

До сих пор я пытался отправить их через pyautogui, но это не работает. Я надеялся, потому что в исходном коде это показывает это:

'num multiply': '*',
'num divide': '/',
'num add': '+',
'num plus': '+',
'num minus': '-',
'num sub': '-',
'num enter': 'enter',
'num 0': '0',
'num 1': '1',
'num 2': '2',
'num 3': '3',
'num 4': '4',
'num 5': '5',
'num 6': '6',
'num 7': '7',
'num 8': '8',
'num 9': '9',

но это не сделало ничего, кроме того, что вы могли ожидать. Он будет делать обычные числа, а не числа, специфичные для numpad.

pyautogui.press("num 3")

например, вообще не работает, а

pyautogui.press("3")

просто отправляет 3

Я также попробовал SendKeys в win32api, но там вообще нет перечисленных чисел, и, просматривая исходный код, похоже, они включены (https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes), но не поддерживаются) в реализации Python ... так что это не работает:

>>> import win32api
>>> import win32com.client
>>> shell = win32com.client.Dispatch("WScript.Shell")
>>> shell.SendKeys("{NUMPAD7}")

, который возвращает

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024809), None)

Мне нужно иметь возможность использовать клавиши с цифровыми клавишами, потому что у меня есть установка, использующая эмулированную мышь, которую мне нужно программно контролировать с помощью этих клавиш. Я нашел обходной путь, отключив и повторно включив эмуляцию (я использую NeatMouse) с помощью комбинации клавиш, которая работает (и может быть отправлена ​​с помощью SendKeys), потому что вы редко печатаете и используете мышь одновременно, но Мне все еще очень любопытно, возможно ли то, что я хочу сделать, напрямую.

Повторюсь, я хочу напрямую нажимать клавиши NUMPAD через python.

Спасибо!

1 Ответ

0 голосов
/ 08 января 2019

На основании официальной документации: PyAutoGUI - Функции управления клавиатурой похоже, единственная проблема с неработающим кодом - это пробел между "num" и "3". Если документация верна, вы должны изменить только:

pyautogui.press("num 3")

до:

pyautogui.press("num3")
...