feat: 添加媒体播放检测功能以优化工作状态管理
This commit is contained in:
@@ -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 是 int,GetLastInputInfo 是 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user