-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwindows-smtc.py
86 lines (66 loc) · 2.41 KB
/
windows-smtc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import time
import asyncio
import keyboard
from config import NEXT_PAGE_KEY, PREV_PAGE_KEY, START_KEY
from winrt.windows.media import \
SystemMediaTransportControls, SystemMediaTransportControlsButtonPressedEventArgs, SystemMediaTransportControlsButton, MediaPlaybackType
from winrt.windows.media.playback import MediaPlayer, MediaPlaybackState
lock = False
def next_page():
global lock
# "PAUSE" is triggered with the following "NEXT"
# so we have to wait for a while to make sure this is not the one followed by "NEXT"
time.sleep(0.5)
if not lock:
keyboard.send(NEXT_PAGE_KEY)
print("Next Page!")
lock = False
def previous_page():
global lock
lock = True
keyboard.send(PREV_PAGE_KEY)
print("Previous Page!")
def start_presentation():
global lock
lock = True
keyboard.send(START_KEY)
print("Start Presenataion!")
def btn_press(_sender: SystemMediaTransportControls, args: SystemMediaTransportControlsButtonPressedEventArgs):
if args.button == SystemMediaTransportControlsButton.PLAY or args.button == SystemMediaTransportControlsButton.PAUSE:
next_page()
elif args.button == SystemMediaTransportControlsButton.NEXT:
previous_page()
elif args.button == SystemMediaTransportControlsButton.PREVIOUS:
start_presentation()
async def setup_control():
# just a dummy player for SMTC
player = MediaPlayer()
controls = player.system_media_transport_controls
# detach command manager from player, so we can handle the event manually
player.command_manager.is_enabled = False
# show SMTC
controls.is_enabled = True
# setup status
controls.is_play_enabled = True
controls.is_pause_enabled = True
controls.is_next_enabled = True
controls.is_previous_enabled = True
# set it to playing so the control would stay with us
controls.playback_status = MediaPlaybackState.PLAYING
# update SMTC info
updater = controls.display_updater
if updater:
updater.type = MediaPlaybackType.MUSIC
updater.music_properties.artist = "Slides Controller"
updater.music_properties.title = "Slides Controller"
updater.update()
# bind handler
controls.add_button_pressed(btn_press)
# run forever
await asyncio.Future()
if __name__ == '__main__':
print("Started as a media player!")
try:
asyncio.run(setup_control())
except:
pass