我的问题是我需要获取 FOOBAR2000 的标题,因为其中包括播放文件的信息,所以我通过 Win32 API( GetWindowText()
, EnumWindows()
) 创建了一个执行文件,它运行良好。
TCHAR SearchText[MAX_LOADSTRING] = _T("foobar2000");
BOOL CALLBACK WorkerProc(HWND hwnd, LPARAM lParam)
{
TCHAR buffer[MAX_TITLESTRING];
GetWindowText(hwnd, buffer, MAX_TITLESTRING);
if(_tcsstr(buffer, SearchText))
{
// find it output something
}
return TRUE;
}
EnumWindows(WorkerProc, NULL);
输出看起来像“专辑封面标题.... [foobar2000 v1.1.5] ”
我创建了一个像 test.php 这样的 php 文件,并使用exec()
它来执行它。
exec("foobar.exe");
然后在控制台(cmd)中我使用命令来执行它
php test.php
它也很好用,输出和以前一样。
现在我用浏览器(firefox)调用这个php文件(test.php),奇怪的事情发生了。输出只有foobar2000 v1.1.5,其他信息不见了...
我想也许是exec()
问题?优先级或某些限制,所以我使用 C# 创建一个 COM 对象并注册它,并重写 php 代码
$mydll = new COM("FOOBAR_COMObject.FOOBAR_Class");
echo $mydll->GetFooBarTitle();
结果仍然相同,命令行正常,但浏览器失败。
我的问题是
- 为什么命令行和浏览器之间有 2 个不同的输出。我想不通。
- 如何通过浏览器获得正确的输出。
- 或者有一种简单的方法来获取 FOOBAR2000 的标题?
有没有人有这个问题的经验?
== 2012/11/28 编辑 ==
按照Enno的意见,我修改http_control插件添加文件名信息,原来的json信息是“曲目标题”。
修改如下
state.cpp 第 380 行添加 1 行
+pb_helper1 = pfc::string_filename(pb_item_ptr->get_path());
pb_helper1x = xml_friendly_string(pb_helper1);