Skip to content

多处 Bug 修复建议 #13

Description

@CYAN-08

在阅读源码(TaskmgrPlayer.cpp)时发现以下几个问题,提交此 Issue 供作者参考。
Bug 1:FindVideo 会漏掉第一个匹配文件
FindFirstFileA 返回的第一个文件没有被处理,直接调用了 FindNextFileA,导致目录中第一个符合条件的视频文件会被跳过。
原代码:
HANDLE hFile = FindFirstFileA(".", &wfd);
for (; hFile != INVALID_HANDLE_VALUE;)
{
FindNextFileA(hFile, &wfd); // 第一次循环就跳过了 wfd 中已有的第一个文件
// ...
}
建议修复:
HANDLE hFile = FindFirstFileA(".", &wfd);
while (hFile != INVALID_HANDLE_VALUE)
{
string fileName = wfd.cFileName;
string type = fileName.substr(fileName.find_last_of('.') + 1);
if (type == "flv" || type == "mp4" || type == "avi") {
FindClose(hFile);
return fileName;
}
if (!FindNextFileA(hFile, &wfd)) break;
}
if (hFile != INVALID_HANDLE_VALUE) FindClose(hFile);
return "";
Bug 2:WndClassName 比较的是指针地址而非字符串内容
EnumChildWindowsProc 中使用了 == 比较两个 wchar_t*,实际比较的是指针地址,永远无法正确匹配类名,可能导致无法找到正确的子窗口。
原代码:
if (WndClassName == ClassNameToEnum && ...) // 指针比较,逻辑错误
建议修复:
if (wcscmp(WndClassName, ClassNameToEnum.c_str()) == 0 && ...)
Bug 3:system("rm audio.wav") 在 Windows 下无效
rm 是 Linux/macOS 命令,Windows 下应使用 del 或 _wremove。
原代码:
system("rm audio.wav"); // Windows 下不会生效
建议修复:
_wremove(L"audio.wav");
// 或
system("del audio.wav");
环境信息
OS:Windows
编译器:MSVC(Visual Studio)
涉及文件:TaskmgrPlayer/TaskmgrPlayer.cpp
复现步骤
将视频文件放在程序目录下,确保它是目录中第一个被枚举到的文件,视频无法被检测到
配置 ChildClassName 为非空值,子窗口无法被正确匹配
播放结束后检查目录,audio.wav 未被删除
以上问题均已在本地验证,修复后程序可正常运行。欢迎作者确认并合并修复。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions