Unified Remote Control:获取Winamp随机播放状态值
搞定Winamp随机播放状态获取的Lua脚本方案
我来帮你解决Unified Remote里获取Winamp随机播放状态的问题!其实核心就是用对Unified Remote的Lua API和Winamp的消息机制,下面一步步给你拆解:
关键前提先明确
Winamp的窗口类名是固定的Winamp v1.x,这是我们定位窗口的关键;另外你提到的WM_USER+250消息,转换成十六进制就是0x04FA(因为WM_USER的基础值是0x0400,加上250刚好是0x04FA),这个消息的返回值就是二进制的随机播放状态:1代表开启,0代表关闭。
基础版脚本:获取状态并更新按钮文本
下面是最核心的实现代码,你可以把这段逻辑放到按钮的点击事件里,或者面板的初始化/刷新逻辑中:
-- 第一步:找到Winamp的窗口句柄 local winamp_hwnd = win.find("Winamp v1.x") if winamp_hwnd then -- 第二步:发送状态查询消息,获取随机播放状态 local shuffle_state = win.msg.send(winamp_hwnd, 0x04FA, 0, 0) -- 注:后面两个0是消息的wParam和lParam,Winamp这个接口不需要传值,所以填0就行 -- 第三步:根据状态更新按钮文本 local shuffle_btn = buttons.get("your_shuffle_button_id") -- 替换成你按钮的实际ID if shuffle_state == 1 then shuffle_btn.setText("🔀 随机播放开启") else shuffle_btn.setText("🔀 随机播放关闭") end else -- 处理Winamp未运行的情况 buttons.get("your_shuffle_button_id").setText("Winamp未启动") end
进阶版:实时刷新按钮状态
如果想让按钮文本实时跟着Winamp的随机播放状态变化,可以把逻辑放到update函数里,定时刷新:
function update() local winamp_hwnd = win.find("Winamp v1.x") local shuffle_btn = buttons.get("your_shuffle_button_id") if winamp_hwnd then local shuffle_state = win.msg.send(winamp_hwnd, 0x04FA, 0, 0) shuffle_btn.setText(shuffle_state == 1 and "🔀 随机播放开启" or "🔀 随机播放关闭") else shuffle_btn.setText("Winamp未启动") end end -- 设置每隔1秒刷新一次状态 update_interval(1000)
注意事项
- 确保你的Unified Remote脚本里已经引入了
win和buttons模块(默认面板脚本都会包含,不用额外加); - 替换代码里的
your_shuffle_button_id为你在面板编辑器里给随机播放按钮设置的实际ID; - 如果测试时没拿到状态,先检查Winamp是否在运行,或者有没有拼写错窗口类名(必须是
Winamp v1.x,注意大小写和空格)。
内容的提问来源于stack exchange,提问作者user682487
相关产品推荐
相关产品推荐

