Skip to content

Instantly share code, notes, and snippets.

@planetceres
Last active June 22, 2020 21:45
Show Gist options
  • Save planetceres/4efa0241a601d0be5c87e5a4d521a274 to your computer and use it in GitHub Desktop.
Save planetceres/4efa0241a601d0be5c87e5a4d521a274 to your computer and use it in GitHub Desktop.
Capture Volume controls from python
#!/usr/env/bin python3
from pynput import keyboard
SHORTCUTS = [{keyboard.Key.cmd, keyboard.KeyCode(char='c')}]
pressed = set()
def on_press(key):
try:
print('alphanumeric key {0} pressed'.format(
key.char))
if any([key in combo for combo in SHORTCUTS]):
pressed.add(key)
if any(all(k in pressed for k in combo) for combo in SHORTCUTS):
print('pressed {}'.format(SHORTCUTS))
if str(key.vk) == '269025043':
print("Volume Up")
if str(key.vk) == '269025041':
print("Volume Down")
if str(key.vk) == '269025042':
print("Mute")
except AttributeError:
print('special key {0} pressed'.format(
key))
def on_release(key):
print('{0} released'.format(
key))
if any([key in combo for combo in SHORTCUTS]):
pressed.remove(key)
if key == keyboard.Key.esc:
# Stop listener
return False
# Collect events until released
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
{'__doc__': 'An enumeration.',
'__module__': 'pynput.keyboard._xorg',
'__new__': <function Enum.__new__ at 0x7fe93ba22ea0>,
'_generate_next_value_': <function Enum._generate_next_value_ at 0x7fe93ba22f28>,
'_member_map_': OrderedDict([('alt', <Key.alt: <65513>>),
('alt_l', <Key.alt: <65513>>),
('alt_r', <Key.alt_r: <65514>>),
('alt_gr', <Key.alt_gr: <65406>>),
('backspace',
<Key.backspace: <65288>>),
('caps_lock',
<Key.caps_lock: <65509>>),
('cmd', <Key.cmd: <65515>>),
('cmd_l', <Key.cmd: <65515>>),
('cmd_r', <Key.cmd_r: <65516>>),
('ctrl', <Key.ctrl: <65507>>),
('ctrl_l', <Key.ctrl: <65507>>),
('ctrl_r', <Key.ctrl_r: <65508>>),
('delete', <Key.delete: <65535>>),
('down', <Key.down: <65364>>),
('end', <Key.end: <65367>>),
('enter', <Key.enter: <65293>>),
('esc', <Key.esc: <65307>>),
('f1', <Key.f1: <65470>>),
('f2', <Key.f2: <65471>>),
('f3', <Key.f3: <65472>>),
('f4', <Key.f4: <65473>>),
('f5', <Key.f5: <65474>>),
('f6', <Key.f6: <65475>>),
('f7', <Key.f7: <65476>>),
('f8', <Key.f8: <65477>>),
('f9', <Key.f9: <65478>>),
('f10', <Key.f10: <65479>>),
('f11', <Key.f11: <65480>>),
('f12', <Key.f12: <65481>>),
('f13', <Key.f13: <65482>>),
('f14', <Key.f14: <65483>>),
('f15', <Key.f15: <65484>>),
('f16', <Key.f16: <65485>>),
('f17', <Key.f17: <65486>>),
('f18', <Key.f18: <65487>>),
('f19', <Key.f19: <65488>>),
('f20', <Key.f20: <65489>>),
('home', <Key.home: <65360>>),
('left', <Key.left: <65361>>),
('page_down',
<Key.page_down: <65366>>),
('page_up', <Key.page_up: <65365>>),
('right', <Key.right: <65363>>),
('shift', <Key.shift: <65505>>),
('shift_l', <Key.shift: <65505>>),
('shift_r', <Key.shift_r: <65506>>),
('space', <Key.space: ' '>),
('tab', <Key.tab: <65289>>),
('up', <Key.up: <65362>>),
('media_play_pause',
<Key.media_play_pause: <0>>),
('media_volume_mute',
<Key.media_play_pause: <0>>),
('media_volume_down',
<Key.media_play_pause: <0>>),
('media_volume_up',
<Key.media_play_pause: <0>>),
('media_previous',
<Key.media_play_pause: <0>>),
('media_next',
<Key.media_play_pause: <0>>),
('insert', <Key.insert: <65379>>),
('menu', <Key.menu: <65383>>),
('num_lock',
<Key.num_lock: <65407>>),
('pause', <Key.pause: <65299>>),
('print_screen',
<Key.print_screen: <65377>>),
('scroll_lock',
<Key.scroll_lock: <65300>>)]),
'_member_names_': ['alt',
'alt_r',
'alt_gr',
'backspace',
'caps_lock',
'cmd',
'cmd_r',
'ctrl',
'ctrl_r',
'delete',
'down',
'end',
'enter',
'esc',
'f1',
'f2',
'f3',
'f4',
'f5',
'f6',
'f7',
'f8',
'f9',
'f10',
'f11',
'f12',
'f13',
'f14',
'f15',
'f16',
'f17',
'f18',
'f19',
'f20',
'home',
'left',
'page_down',
'page_up',
'right',
'shift',
'shift_r',
'space',
'tab',
'up',
'media_play_pause',
'insert',
'menu',
'num_lock',
'pause',
'print_screen',
'scroll_lock'],
'_member_type_': <class 'object'>,
'_value2member_map_': {<65288>: <Key.backspace: <65288>>,
<65514>: <Key.alt_r: <65514>>,
<65406>: <Key.alt_gr: <65406>>,
<65471>: <Key.f2: <65471>>,
<65509>: <Key.caps_lock: <65509>>,
<65515>: <Key.cmd: <65515>>,
<65516>: <Key.cmd_r: <65516>>,
<65507>: <Key.ctrl: <65507>>,
<65508>: <Key.ctrl_r: <65508>>,
<65535>: <Key.delete: <65535>>,
<65364>: <Key.down: <65364>>,
<65367>: <Key.end: <65367>>,
<65293>: <Key.enter: <65293>>,
<65307>: <Key.esc: <65307>>,
<65470>: <Key.f1: <65470>>,
<65472>: <Key.f3: <65472>>,
<65473>: <Key.f4: <65473>>,
<65474>: <Key.f5: <65474>>,
<65475>: <Key.f6: <65475>>,
<65476>: <Key.f7: <65476>>,
<65477>: <Key.f8: <65477>>,
<65478>: <Key.f9: <65478>>,
<65479>: <Key.f10: <65479>>,
<0>: <Key.media_play_pause: <0>>,
<65480>: <Key.f11: <65480>>,
<65481>: <Key.f12: <65481>>,
<65482>: <Key.f13: <65482>>,
<65483>: <Key.f14: <65483>>,
<65484>: <Key.f15: <65484>>,
<65485>: <Key.f16: <65485>>,
<65486>: <Key.f17: <65486>>,
<65487>: <Key.f18: <65487>>,
<65488>: <Key.f19: <65488>>,
<65489>: <Key.f20: <65489>>,
<65360>: <Key.home: <65360>>,
<65361>: <Key.left: <65361>>,
<65366>: <Key.page_down: <65366>>,
<65365>: <Key.page_up: <65365>>,
<65363>: <Key.right: <65363>>,
<65505>: <Key.shift: <65505>>,
<65506>: <Key.shift_r: <65506>>,
' ': <Key.space: ' '>,
<65289>: <Key.tab: <65289>>,
<65362>: <Key.up: <65362>>,
<65379>: <Key.insert: <65379>>,
<65383>: <Key.menu: <65383>>,
<65407>: <Key.num_lock: <65407>>,
<65299>: <Key.pause: <65299>>,
<65377>: <Key.print_screen: <65377>>,
<65300>: <Key.scroll_lock: <65300>>,
<65513>: <Key.alt: <65513>>},
'alt': <Key.alt: <65513>>,
'alt_gr': <Key.alt_gr: <65406>>,
'alt_l': <Key.alt: <65513>>,
'alt_r': <Key.alt_r: <65514>>,
'backspace': <Key.backspace: <65288>>,
'caps_lock': <Key.caps_lock: <65509>>,
'cmd': <Key.cmd: <65515>>,
'cmd_l': <Key.cmd: <65515>>,
'cmd_r': <Key.cmd_r: <65516>>,
'ctrl': <Key.ctrl: <65507>>,
'ctrl_l': <Key.ctrl: <65507>>,
'ctrl_r': <Key.ctrl_r: <65508>>,
'delete': <Key.delete: <65535>>,
'down': <Key.down: <65364>>,
'end': <Key.end: <65367>>,
'enter': <Key.enter: <65293>>,
'esc': <Key.esc: <65307>>,
'f1': <Key.f1: <65470>>,
'f10': <Key.f10: <65479>>,
'f11': <Key.f11: <65480>>,
'f12': <Key.f12: <65481>>,
'f13': <Key.f13: <65482>>,
'f14': <Key.f14: <65483>>,
'f15': <Key.f15: <65484>>,
'f16': <Key.f16: <65485>>,
'f17': <Key.f17: <65486>>,
'f18': <Key.f18: <65487>>,
'f19': <Key.f19: <65488>>,
'f2': <Key.f2: <65471>>,
'f20': <Key.f20: <65489>>,
'f3': <Key.f3: <65472>>,
'f4': <Key.f4: <65473>>,
'f5': <Key.f5: <65474>>,
'f6': <Key.f6: <65475>>,
'f7': <Key.f7: <65476>>,
'f8': <Key.f8: <65477>>,
'f9': <Key.f9: <65478>>,
'home': <Key.home: <65360>>,
'insert': <Key.insert: <65379>>,
'left': <Key.left: <65361>>,
'media_next': <Key.media_play_pause: <0>>,
'media_play_pause': <Key.media_play_pause: <0>>,
'media_previous': <Key.media_play_pause: <0>>,
'media_volume_down': <Key.media_play_pause: <0>>,
'media_volume_mute': <Key.media_play_pause: <0>>,
'media_volume_up': <Key.media_play_pause: <0>>,
'menu': <Key.menu: <65383>>,
'num_lock': <Key.num_lock: <65407>>,
'page_down': <Key.page_down: <65366>>,
'page_up': <Key.page_up: <65365>>,
'pause': <Key.pause: <65299>>,
'print_screen': <Key.print_screen: <65377>>,
'right': <Key.right: <65363>>,
'scroll_lock': <Key.scroll_lock: <65300>>,
'shift': <Key.shift: <65505>>,
'shift_l': <Key.shift: <65505>>,
'shift_r': <Key.shift_r: <65506>>,
'space': <Key.space: ' '>,
'tab': <Key.tab: <65289>>,
'up': <Key.up: <65362>>}

Capture Volume controls from python

pip install pynput

Key object:

Volume Down

{'_symbol': None,
 'char': None,
 'combining': None,
 'is_dead': False,
 'vk': 269025041}

Volume Up

{'_symbol': None,
 'char': None,
 'combining': None,
 'is_dead': False,
 'vk': 269025043}

Docs:

https://pypi.org/project/pynput/

Reference

https://stackoverflow.com/a/54239261/3450793

Use this code for find the which key pressed

from pynput import keyboard

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

def on_release(key):
    print('{0} released'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment