Я пытаюсь имитировать клавиатуру с помощью python, и я не знаю, как бороться с несколькими нажатиями кнопки клавиатуры. Код ниже отлично работает с 1 или 2 нажатых одновременно («Ctrl + C» Fe):Есть ли способ создать/изменить функцию «на лету» в python
if '+' in current_arg:
current_arg = current_arg.split('+')
current_arg[0] = current_arg[0].strip()
current_arg[1] = current_arg[1].strip()
SendInput(Keyboard(globals()["VK_%s" % current_arg[0].upper()]),
Keyboard(globals()["VK_%s" % current_arg[1].upper()]))
time.sleep(input_time_down())
if len(last_arg) > 1 and type(last_arg) == list:
SendInput(Keyboard(globals()["VK_%s" % last_arg[0].upper()], KEYEVENTF_KEYUP),
Keyboard(globals()["VK_%s" % last_arg[1].upper()], KEYEVENTF_KEYUP))
time.sleep(input_time_down())
else:
SendInput(Keyboard(globals()["VK_%s" % last_arg.upper()], KEYEVENTF_KEYUP))
time.sleep(input_time_down())
Но что, если есть 3 или более кнопок нажата в то же время? Каков самый элегантный способ сделать это? Я мог бы просто добавить, если «+» count == 2, если «+» count == 3 и т. Д., Но должен быть лучший способ сделать это. Я хотел бы, чтобы моя функция настраивалась на количество аргументов.
Например:
keyboard_sim ('Ctrl + Shift + Esc'):
if '+' in current_arg:
current_arg = current_arg.split('+')
current_arg[0] = current_arg[0].strip()
### function adds another current_arg for each argument
current_arg[1] = current_arg[1].strip()
current_arg[2] = current_arg[2].strip()
SendInput(Keyboard(globals()["VK_%s" % current_arg[0].upper()]),
### function adds another Keyboard for each argument
Keyboard(globals()["VK_%s" % current_arg[1].upper()]))
Keyboard(globals()["VK_%s" % current_arg[2].upper()]))
time.sleep(input_time_down())
if len(last_arg) > 1 and type(last_arg) == list:
### function adds another Keyboard KEYEVENTF for each argument
SendInput(Keyboard(globals()["VK_%s" % last_arg[0].upper()], KEYEVENTF_KEYUP),
Keyboard(globals()["VK_%s" % last_arg[1].upper()], KEYEVENTF_KEYUP))
Keyboard(globals()["VK_%s" % last_arg[2].upper()], KEYEVENTF_KEYUP))
time.sleep(input_time_down())
else:
### this is added so I won't get error if there is single key pressed
SendInput(Keyboard(globals()["VK_%s" % last_arg.upper()], KEYEVENTF_KEYUP))
time.sleep(input_time_down())
Это [это] (http://stackoverflow.com/questions/3394835/args-and-kwargs), что вам нужно? – JETM
Нет. Я уже использую args. Я хочу, чтобы функция менялась в зависимости от количества аргументов в списке после split. Если я хочу нажимать кнопки одновременно, я должен использовать их в одном выражении SendInput (Keyboard(), как вы видите выше. Этот оператор if уже находится в функции. – Gunnm