4
A
回答
9
這需要花費一些時間和許多竅門(嘗試使用ctypes,IOKit本機接口,Quartz和/或Cocoa)。這似乎是目前一個簡單的解決方案:
#!/usr/bin/python
import Quartz
# 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
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)
for _ in range(10):
HIDPostAuxKey(NX_KEYTYPE_SOUND_UP)
HIDPostAuxKey(NX_KEYTYPE_PLAY)
(雖然我需要這在Python現在,我的問題沒有得到真正的Python相關的,當然你可以很容易地轉換,爲任何其他語言,尤其ObjC。)
5
謝謝Albert!我對你的腳本進行了一些擴展,使其成爲一個可執行文件,可以由Quicksilver或另一個啓動器/觸發器處理程序調用。
#!/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()
相關問題
- 1. 如何模擬多媒體按鍵(C)?
- 2. 模擬在Mac上按下「Command」鍵
- 3. 如何在Mac OS上模擬C++中的鍵入/按鍵?
- 4. 可可:模擬的Macbook上鍵和多媒體鍵
- 5. 模擬流媒體數據
- 6. 模擬按鍵
- 7. 在Windows上模擬與Haskell的按鍵
- 8. ExtJs在ENTER按鍵上模擬TAB
- 9. 模擬Tab鍵在Flex上按下?
- 10. 在WPF中模擬按鍵
- 11. 按鍵模擬鍵盤按下「Shift」鍵
- 12. Flex:模擬按鍵
- 13. 模擬鍵盤按
- 14. 模擬鍵按c#
- 15. Android模擬按鍵
- 16. VB模擬按鍵
- 17. 在Mac OSX中爲ioquake3模擬按鍵事件
- 18. 模擬Android設備上的按鍵
- 19. 媒體查詢不能在Android模擬器上工作
- 20. 模擬在Java中按住的按鍵
- 21. 如何使用Mac的鍵盤上,而模擬器鍵盤在屏幕上
- 22. 在Windows上模擬鍵盤
- 23. Javascript - 模擬CSS媒體查詢?
- 24. Chrome模擬器問題|媒體查詢
- 25. 在虛擬鍵盤上檢測按鍵
- 26. 在Windows上模擬鍵盤按鍵無法正常工作
- 27. 上模擬home鍵
- 28. 模擬mac終端中的鍵盤按下
- 29. 模擬Mac OS X中的按鍵事件
- 30. 模擬FN + F11按鍵
用它來與[ControllerMate(http://www.orderedbytes.com/controllermate/)以模擬鍵盤上的媒體鍵很成功找到沒有他們,但有額外的F鍵。這很棒,因爲它不需要單獨調用每個應用程序。 – sordid