#media #winrt #windows #namespaces #gsmtc

win-gsmtc

A wrapper around the Windows.Media.Control namespace (GlobalSystemMediaTransportControls - GSMTC)

1 unstable release

0.1.0 Apr 30, 2023

#164 in Windows APIs

MIT/Apache

41KB
757 lines

win-gsmtc

This library is a wrapper around the Windows.Media.Control namespace (aka GlobalSystemMediaTransportControls - GSMTC). It uses tokio to manage internal workers that deliver updates.

Example

use gsmtc::{ManagerEvent::*, SessionUpdateEvent::*};

let mut rx = gsmtc::SessionManager::create().await?;

while let Some(evt) = rx.recv().await {
    match evt {
        SessionCreated {
            session_id,
            mut rx,
            source,
        } => {
            println!("Created session: {{id={session_id}, source={source}}}");
            tokio::spawn(async move {
                while let Some(evt) = rx.recv().await {
                    match evt {
                        Model(model) => {
                            println!("[{session_id}/{source}] Model updated: {model:#?}")
                        }
                        Media(model, image) => println!(
                            "[{session_id}/{source}] Media updated: {model:#?} - {image:?}"
                        ),
                    }
                }
                println!("[{session_id}/{source}] exited event-loop");
            });
        }
        SessionRemoved { session_id } => println!("Session {{id={session_id}}} was removed"),
        CurrentSessionChanged {
            session_id: Some(id),
        } => println!("Current session: {id}"),
        CurrentSessionChanged { session_id: None } => println!("No more current session"),
    }
}

Dependencies

~155MB
~2.5M SLoC