feat: 添加媒体播放检测功能以优化工作状态管理

This commit is contained in:
2026-01-17 13:53:57 +08:00
parent e26c015e09
commit 052aa060cc
3 changed files with 46 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
using System;
using System.Runtime.InteropServices;
using Windows.Media.Control;
namespace TimerApp
{
@@ -36,7 +37,7 @@ namespace TimerApp
// 或者直接使用 unchecked 减法处理溢出
// 更稳健的做法是使用 GetTickCount64 (Vista+),但 Environment.TickCount 在 .NET Core 3.1+ 已经是 64位了(Environment.TickCount64)
// 这里为了兼容性,我们简单处理。注意 GetLastInputInfo 返回的是 uint 毫秒数。
long envTicks = Environment.TickCount;
// 处理 TickCount 翻转问题 (Environment.TickCount 是 intGetLastInputInfo 是 uint)
// 简单的做法:
@@ -48,5 +49,34 @@ namespace TimerApp
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
/// <summary>
/// 检测是否有媒体正在播放(视频或音频)
/// </summary>
/// <returns>如果有媒体正在播放返回 true否则返回 false</returns>
public static bool IsMediaPlaying()
{
try
{
var sessionManager = GlobalSystemMediaTransportControlsSessionManager.RequestAsync().GetAwaiter().GetResult();
var sessions = sessionManager.GetSessions();
foreach (var session in sessions)
{
var playbackInfo = session.GetPlaybackInfo();
if (playbackInfo.PlaybackStatus == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing)
{
return true;
}
}
}
catch
{
// 如果 API 调用失败,返回 false保守处理
return false;
}
return false;
}
}
}