Created
November 15, 2012 11:07
-
-
Save fredrikw/4078034 to your computer and use it in GitHub Desktop.
Python script to control the mediakeys on OS X. Used to emulate the mediakey on a keyboard with no such keys. Easiest used in combination with a launcher/trigger software such as Quicksilver.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# CLI program to control the mediakeys on OS X. Used to emulate the mediakey on a keyboard with no such keys. | |
# Easiest used in combination with a launcher/trigger software such as Quicksilver. | |
# Main part taken from http://stackoverflow.com/questions/11045814/emulate-media-key-press-on-mac | |
# Glue to make it into cli program by Fredrik Wallner http://www.wallner.nu/fredrik/ | |
import Quartz | |
import sys | |
# NSEvent.h | |
NSSystemDefined = 14 | |
# hidsystem/ev_keymap.h | |
NX_KEYTYPE_SOUND_UP = 0 | |
NX_KEYTYPE_SOUND_DOWN = 1 | |
NX_KEYTYPE_PLAY = 16 | |
NX_KEYTYPE_NEXT = 17 | |
NX_KEYTYPE_PREVIOUS = 18 | |
NX_KEYTYPE_FAST = 19 | |
NX_KEYTYPE_REWIND = 20 | |
supportedcmds = {'playpause': NX_KEYTYPE_PLAY, 'next': NX_KEYTYPE_NEXT, 'prev': NX_KEYTYPE_PREVIOUS, 'volup': NX_KEYTYPE_SOUND_UP, 'voldown': NX_KEYTYPE_SOUND_DOWN} | |
def HIDPostAuxKey(key): | |
def doKey(down): | |
ev = Quartz.NSEvent.otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_( | |
NSSystemDefined, # type | |
(0,0), # location | |
0xa00 if down else 0xb00, # flags | |
0, # timestamp | |
0, # window | |
0, # ctx | |
8, # subtype | |
(key << 16) | ((0xa if down else 0xb) << 8), # data1 | |
-1 # data2 | |
) | |
cev = ev.CGEvent() | |
Quartz.CGEventPost(0, cev) | |
doKey(True) | |
doKey(False) | |
if __name__ == "__main__": | |
try: | |
command = sys.argv[1] | |
assert(command in supportedcmds) | |
HIDPostAuxKey(supportedcmds[command]) | |
except (IndexError, AssertionError): | |
print "Usage: %s command" % (sys.argv[0],) | |
print "\tSupported commands are %s" % supportedcmds.keys() |
And I want to ask you, where did you find Quartz documentation? I have seen the official Quartz documentation but have not found an explanation for it methods this framework.
I just copied the main thing from the StackOverflow answer that is linked in the top comment of the script. My only contribution was adding the CLI.
I've updated the script for python 3 and worked out the correct egg to install:
https://gist.github.com/aleksandersumowski/a296a910fd3c6722744a2c3b0a1b5bf5
the script assumes python 3 installed via homebrew on a M* computer
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I already installed quartz.However your code is working, despite the error.