You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PowerShell中挂钩iTunes的OnPlayerPlayEvent事件失败求助

解决PowerShell中iTunes COM事件注册问题

问题根源

你之前的错误是因为使用了错误的事件名称——iTunes COM对象暴露的事件名不带On前缀,比如PlayerPlayEvent而非OnPlayerPlayEvent,导致Register-ObjectEvent无法找到对应事件。

正确操作步骤

1. 确认iTunes可用的事件列表

先执行以下命令查看所有可订阅的事件:

$iTunes = New-Object -ComObject iTunes.Application
$iTunes | Get-Member -MemberType Event

输出中会包含PlayerPlayEvent、PlayerStopEvent等你需要的事件名称。

2. 注册播放/停止事件处理程序

使用正确的事件名注册事件,同时利用事件参数中的sender获取iTunes对象,避免全局变量依赖:

# 播放事件处理逻辑
$playHandler = {
    param($sender, $eventArgs)
    $currentTrack = $sender.CurrentTrack
    if ($currentTrack) {
        Write-Host "正在播放:$($currentTrack.Name) - $($currentTrack.Artist)"
    } else {
        Write-Host "已开始播放,但未检测到曲目"
    }
}

# 停止事件处理逻辑
$stopHandler = {
    Write-Host "播放已停止"
}

# 创建iTunes COM对象
$iTunes = New-Object -ComObject iTunes.Application

# 注册事件
Register-ObjectEvent -InputObject $iTunes -EventName PlayerPlayEvent -Action $playHandler -SourceIdentifier iTunesPlayEvent
Register-ObjectEvent -InputObject $iTunes -EventName PlayerStopEvent -Action $stopHandler -SourceIdentifier iTunesStopEvent

3. 取消事件订阅(可选)

如果需要停止监听事件,执行:

Unregister-Event -SourceIdentifier iTunesPlayEvent
Unregister-Event -SourceIdentifier iTunesStopEvent

注意事项

  • 保持PowerShell会话处于打开状态,后台事件处理才能正常运行;
  • 确保Windows上已安装iTunes,且COM接口已正确注册(默认安装会自动完成注册);
  • 事件处理脚本中的$sender就是iTunes对象实例,无需额外定义全局变量。

内容的提问来源于stack exchange,提问作者h.s.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:32:43