我的问题是我需要获取FOOBAR2000 2000的标题,因为它包括播放文件的信息,所以我通过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);输出将类似于“专辑artis标题. 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();结果仍然相同,命令行可以,但浏览器失败。
我的问题是
有人在这个问题上有经验吗?
== 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);发布于 2012-11-25 01:40:13
@ 1:当firefox打开php并执行它时,上下文取决于运行php容器(apache)的用户,这与在上下文中执行的命令行调用完全不同。
@2和3:获得标题的方法似乎不止一种:使用foobar-sdk并创建一个模块,该模块只需按api读取当前的标题,然后在http-root文件夹内的静态-html-文档中或使用sdk内的http-client,您不需要wabserver,更好地使用已经实现的模块:例如foo_upnp或foo-httpcontrol。
祝好运!
发布于 2012-11-25 01:35:33
如果您的for服务器作为服务运行,则需要在windows中为该服务启用“允许桌面交互”。当通过浏览器请求时,您的php脚本作为when服务器进程的子进程运行。
https://stackoverflow.com/questions/13547381
复制相似问题