首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php获取windows标题不适用于浏览器调用

使用php获取windows标题不适用于浏览器调用
EN

Stack Overflow用户
提问于 2012-11-25 01:14:04
回答 2查看 199关注 0票数 2

我的问题是我需要获取FOOBAR2000 2000的标题,因为它包括播放文件的信息,所以我通过Win32 API(GetWindowText()EnumWindows())创建了一个执行文件,并且它运行良好。

代码语言:javascript
复制
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()来执行它。

代码语言:javascript
复制
exec("foobar.exe");

然后在控制台(Cmd)中,我使用命令来执行它

代码语言:javascript
复制
php test.php

它也很好用,和以前一样输出。

现在我使用浏览器(Firefox)来调用这个php文件(test.php),奇怪的事情发生了。输出只有foobar2000 v1.1.5,其他信息消失了.

我想也许是exec()的问题?优先级或某些限制,因此我使用C#创建一个COM对象并注册它,并重写php代码。

代码语言:javascript
复制
$mydll = new COM("FOOBAR_COMObject.FOOBAR_Class");
echo $mydll->GetFooBarTitle();

结果仍然相同,命令行可以,但浏览器失败。

我的问题是

  1. 为什么命令行和浏览器之间有两个不同的输出。我搞不懂。
  2. 如何通过浏览器获得正确的输出。
  3. 还是有一种简单的方法来获取FOOBAR2000 2000的标题?

有人在这个问题上有经验吗?

== 2012/11/28编辑的==

遵循Enno的意见,我修改http_control插件以添加文件名信息,原来的json信息是“跟踪标题”。

修改如下

state.cpp行380加1行

代码语言:javascript
复制
+pb_helper1 = pfc::string_filename(pb_item_ptr->get_path());
 pb_helper1x = xml_friendly_string(pb_helper1);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

祝好运!

票数 0
EN

Stack Overflow用户

发布于 2012-11-25 01:35:33

如果您的for服务器作为服务运行,则需要在windows中为该服务启用“允许桌面交互”。当通过浏览器请求时,您的php脚本作为when服务器进程的子进程运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13547381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档