verygoodlee

Results 38 comments of verygoodlee

我找到一个比较轻量级的开源解决方案 [SilentCMD](https://github.com/stbrenner/SilentCMD),虽然已经好几年不维护了, 把`SilentCMD.exe` `SilentCMD.exe.config`重命名为`embyToLocalPlayer.exe` `embyToLocalPlayer.exe.config`,放在`embyToLocalPlayer.py`同一目录下, 编辑`embyToLocalPlayer.exe.config`,修改这几个参数 ```xml python embyToLocalPlayer.py %temp%\embyToLocalPlayer.log ``` 给`embyToLocalPlayer.exe`创建一个快捷方式,丢到自启动目录

> 需要 `.net 3.5` 环境。这个系统默认关闭的。 `Win10 22H2`默认只开启了`.net4.8`,测试没啥问题,`.net`好像有做向下兼容 ![image](https://github.com/kjtsune/embyToLocalPlayer/assets/45035465/5bca1568-85a0-4278-bca5-f3843447cf41) 各系统预装版本可看这里 [.NET Framework 版本和依赖关系](https://learn.microsoft.com/zh-cn/dotnet/framework/migration-guide/versions-and-dependencies),\ `Win7`有预装`.net3.5`,[SilentCMD](https://github.com/stbrenner/SilentCMD)的README文档里说了支持`Win7`及更高版本,没有提手动启用`.net`的事,应该是默认开启的

有更好的方案了 [NriCmd](https://www.nirsoft.net/utils/nircmd.html),好像并不开源,兼容性堪称逆天,没啥特殊要求。 > This utility can work in all versions of Windows operating system: Windows 9x/ME, Windows NT, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008,...

`evafast.conf` has a key `lookahead`, but in`evafast.lua` named `subs_lookahead` ![image](https://github.com/po5/evafast/assets/45035465/78dc8a1c-e4a0-4530-871f-8b29086fb80d)

There is a better symbol to replace `▶▶`, mpv builtin fastforward osd symbol. ![image](https://github.com/po5/evafast/assets/45035465/731fb69c-7c61-4161-be8b-0467ea7c85e7) The definition in mpv source code is `OSD_FFW`, and it starts from `OSD_CODEPOINTS`. See https://github.com/mpv-player/mpv/blob/6e161ff13fb83be9c5180e99427651975d33debf/sub/osd.h#L109-L133 the...

> We can use the symbol regardless of the user's osd-font with the ass \fn tag. `mp.osd_message()` supports ass tag using [osd-ass-cc/{0|1}](https://mpv.io/manual/stable/#command-interface-osd-ass-cc) ```lua local ass_start = mp.get_property_osd("osd-ass-cc/0") local ass_stop =...

做了个临时的简易修复,进一步控制menu-data的提交频率,延时0.1秒提交菜单,如果多个连续的提交请求间隔小于0.1秒,后面的请求把前面的延时任务给杀掉,只有最后一次会真正提交。 git diff ```diff @@ -661,6 +661,12 @@ end) -- detect uosc installation mp.register_script_message('uosc-version', function() has_uosc = true end) + +local commit_menu_timer = mp.add_timeout(0.1, function() + msg.debug('commit menu items: '...

> 我不太想在 C 代码层面解决这个问题,改一下 lua 代码里缓存 property 的逻辑应该就很容易做到降低触发更新的频率。 改lua脚本对我来说够用了,但是要根除还是建议改C代码然后合并到mpv主线,毕竟用内置菜单的人可能自己写菜单脚本,后续也可能发展出其他第三方菜单脚本,有概率踩到这个bug

经更详细测试,应该跟频率无关,次数才是关键。 示例的[input_zh.conf](https://gist.github.com/tsl0922/8989aa32994b0448a2652ee260348a35#file-input_zh-conf)在空闲状态切换500次静音就能触发, 用这个脚本测试了 0.1秒一次 1秒一次 3秒一次 结果都一样 ```lua local seconds = 1 local i = 0 timer = mp.add_periodic_timer(seconds, function() mp.commandv('osd-msg', 'cycle', 'mute') i = i + 1 if i...

找到根本原因了,按照[WM_COMMAND ](https://learn.microsoft.com/en-us/windows/win32/menurc/wm-command)文档所说 ![image](https://github.com/user-attachments/assets/39a38306-1a72-4acb-a49e-4aa872d95e7d) `wParam`低位表示菜单标识符,也就是代码这里使用`LOWORD(wParam)`取到的值 https://github.com/tsl0922/mpv-menu-plugin/blob/2704a977b8b0b48bd09659c73ee26243e8798eb2/src/plugin.c#L29-L31 `wParam`是32位整型指针,`LOWORD(wParam)`返回的是一个无符号16位整型,而`GetMenuItemInfoW()`的参数是无符号32位整型 https://github.com/tsl0922/mpv-menu-plugin/blob/2704a977b8b0b48bd09659c73ee26243e8798eb2/src/menu.c#L163-L168 由于win32 API的限制,菜单标识符不能超过16位整型的最大值0xFFFF(65535),超过的部分是系统保留的,应用程序不应该使用,否则收到消息无法处理 根本原因是这里创建菜单项的时候,使用一个静态变量自增作为菜单标识符,当刷新次数过多时就会超过0xFFFF, 例如菜单项500个,刷新一次id就自增500,65535/500=131,大概100多次就超过0xFFFF了 https://github.com/tsl0922/mpv-menu-plugin/blob/2704a977b8b0b48bd09659c73ee26243e8798eb2/src/menu.c#L11-L16 解决方法很简单,当id超过0xFFFF的时候,给它重置为`WM_USER + 100`, 另外更新时清除旧菜单项使用[DeleteMenu()](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-deletemenu)应该比[RemoveMenu()](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-removemenu)更好,`DeleteMenu()`会释放资源而`RemoveMenu()`不会 verygoodlee/mpv-menu-plugin@d0d32a9 测试了以0.05秒每次的频率刷新3000次,没啥问题