Windows Media Player 待机插件






4.47/5 (12投票s)
媒体播放器插件,在媒体结束后关闭计算机
引言
最近,我在 Windows XP 的 Media Player 增强包(或 Power Toys 或类似工具)中找到了 Media Player 睡眠计时器。该插件类似于电视机的 Sleep
定时器功能,它会在用户设定的时间间隔后关闭电视机,而这个插件则在设定的时间间隔后关闭 Media Player。于是我决定为我的 PC 实现类似的功能,并编写了这个 Media Player 插件。它不像 Media Player 插件那样在设定的时间间隔后关闭 Media Player,而是在媒体播放结束后关闭 **PC**。例如,你可以加载一个包含你喜爱音乐的播放列表,或者播放一张 DVD 电影等,然后启动这个插件,然后去睡觉。电影(音乐文件、播放列表等)结束后,你的 PC 会根据你的设置关机、注销、休眠/暂停。它还可以在关机操作期间静音。坦白说,我不知道这是否算真正的计时器,但无关紧要。
实现
如果你不熟悉 Media Player 插件,你应该先阅读 Microsoft Windows Media Player SDK 帮助。简而言之,Windows Media Player 插件是 COM 对象,允许扩展其架构。这个 ATL DLL 只包含两种类型的插件:用户界面插件和后台插件。用户界面插件会在完整模式播放器中的 Media Player **设置**区域创建一个窗口,允许用户管理全局设置——它会告诉后台插件(在 Player
启动后一直运行)是否监听 Media Player 事件,并设置 **待机模式**(PowerOff
/LogOff
/Hibernate
/Suspend
)和 **静音**(On
/Off
)的类型。后台插件在后台运行(顾名思义),并监听 Media Player 事件。当媒体结束事件触发时,如果用户通过 UI 插件启用了这些功能,它会静音并关闭 PC。
主要问题是这两个插件之间的通信——Media Player 不会提供插件实例的接口指针。但我记得这两个插件都在同一个 DLL 中,并且 Player 实例是唯一的,所以我创建了一个共享数据段。UI 插件只是在共享段中设置模式变量,后台插件只是读取它们。就是这样。
项目还包含了 inf 安装文件。你可以使用 IExpress 工具构建一个小型的安装 EXE。IExpress 包含在 Microsoft Internet Explorer 管理工具包中——它允许构建小型快速的安装包。
程序设置
运行 setup.exe 或仅用 regsvr32.exe 注册 **插件 DLL** 后,打开 Media Player。从 **工具** 菜单中选择 **选项**。显示选项属性表后,导航到 **插件** 选项卡,在插件列表中选择 **后台**,然后勾选 **Armen Hakobyan 的后台睡眠计时器**。这将加载后台插件(如果它没有自动加载)。然后,要显示 UI 插件,将 Media Player 切换到完整模式,转到 **视图** 菜单,然后从其 **插件** 子菜单中选择 **Armen Hakobyan 的睡眠计时器**。
程序要求
- Microsoft Windows Millennium/2000 或更高版本
- Microsoft Windows Media Player 9.0 或更高版本
项目依赖项
- Microsoft Platform SDK 2003 或更高版本
- Microsoft ATL (Active Template Library) 3.0 或更高版本
- Microsoft WTL (Windows Template Library) 7.1 或更高版本
- Microsoft Windows Media Player 9 SDK 或更高版本
致谢
- 感谢 DavidCrow 在文章 mixerSetControlDetails 中关于如何控制 Windows 音量的建议
- 感谢 Michael Geddes 在文章 RGS 文件注册表映射 中关于扩展 ATL 注册表映射的分享
历史
- 2005年5月18日
- 首次发布
- 2005年5月23日
- 从
CUIForm
类中移除了CToolTipCtrl
类型的未使用的成员变量 - 移除了
CWmpHyperLinkImpl
类Init
函数中用于加载工具提示文本的未使用的string
缓冲区 - 修复了
EnableShutdownTokenPrivilege
函数中的错误——即使传递了NULL
,函数体中仍引用了第二个指针参数 - 修复了
MuteSound
函数中的错误,该函数无论用户设置如何都会静音,并修改为返回之前声音状态(以便稍后恢复,如果需要) - 添加了新的注册表映射宏
- 更换了损坏的安装可执行文件
- 从