boppreh / keyboard

Hook and simulate global keyboard events on Windows and Linux.
MIT License
3.8k stars 433 forks source link

add_hotkey remove hook() where set_index(0) #515

Closed prim closed 2 years ago

prim commented 2 years ago

fix this:

import keyboard

def hk(*args):
    print "hk", args
r = keyboard.add_hotkey("q, q", hk, suppress=True)

# press q, q somewhere

# type something then remove hotkey
raw_input()
keyboard.remove_hotkey(r)

# keep this script running
raw_input()

# press q somewhere
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\keyboard\_winkeyboard.py", line 544, in low_level_keyboard_handler
    should_continue = process_key(event_type, vk, scan_code, is_extended)
  File "C:\Python27\lib\site-packages\keyboard\_winkeyboard.py", line 530, in process_key
    return callback(KeyboardEvent(event_type=event_type, scan_code=scan_code or -vk, name=name, is_keypad=is_keypad))
  File "C:\Python27\lib\site-packages\keyboard\__init__.py", line 236, in direct_callback
    if not all(hook(event) for hook in self.blocking_hooks):
  File "C:\Python27\lib\site-packages\keyboard\__init__.py", line 236, in <genexpr>
    if not all(hook(event) for hook in self.blocking_hooks):
  File "C:\Python27\lib\site-packages\keyboard\__init__.py", line 690, in catch_misses
    state.remove_last_step()
  File "C:\Python27\lib\site-packages\keyboard\__init__.py", line 605, in remove
    container[scan_codes].remove(handler)
ValueError: list.remove(x): x not in list
boppreh commented 2 years ago

Thank you for your contribution, merged!