我的问题是我需要获取 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);
输出看起来像“album artis title .... [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();
仍然是相同的结果,命令行正常,但浏览器失败。
我的问题是
- 为什么在命令行和浏览器之间有两种不同的输出。我想不通。
- 如何通过浏览器获得正确的输出。
- 或者有一种获取 FOOBAR2000 标题的简单方法?
有没有人有这方面的经验?
== 2012/11/28 编辑==
听从Enno的意见,我修改了http_control插件,增加了文件名信息,原来的json信息是“track title”。
修改如下
state.cpp 第 380 行添加 1 行
+pb_helper1 = pfc::string_filename(pb_item_ptr->get_path());
pb_helper1x = xml_friendly_string(pb_helper1);
最佳答案
@ 1: 当 firefox 打开 php 并执行时,它的上下文取决于运行 php-container (apache) 的用户,这与在您的上下文中执行的命令行调用完全不同
@ 2 和 3:获取标题的方法似乎不止一种:使用 foobar-sdk 并创建一个模块,该模块只读取每个 api 的当前标题,然后将结果写入静态 html 文档在你的 http-root-folder 中或者使用 sdk 中的 http-client,有了它,你不需要 wabserver,甚至更好地使用已经实现的模块:例如 foo_upnp 或 foo-httpcontrol
祝你好运!
关于php - 使用 php 获取窗口标题在浏览器调用中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13547381/