2

私の問題は、ファイルの再生情報が含まれているため、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);

出力は「albumartistitle....[foobar2000v1.1.5]」のようになります。

test.phpのようなphpファイルを作成し、exec()それを実行するために使用します。

exec("foobar.exe");

次に、console(cmd)でコマンドを使用して実行します

php test.php

以前と同じ出力で、これもうまく機能しています。

今、私はブラウザ(firefox)を使用してこのphpファイル(test.php)を呼び出していますが、奇妙なことが起こりました。出力のみfoobar2000v1.1.5、他の情報は消えました...

exec()多分問題だと思いますか?優先順位またはいくつかの制限があるため、C#を使用してCOMオブジェクトを作成して登録し、phpコードを書き直します

$mydll = new COM("FOOBAR_COMObject.FOOBAR_Class");
echo $mydll->GetFooBarTitle();

それでも同じ結果、コマンドラインはOKですが、ブラウザは失敗します。

私の質問は

  1. コマンドラインとブラウザで2つの異なる出力があるのはなぜですか。私はそれを理解することはできません。
  2. ブラウザを介して正しい出力を取得するにはどうすればよいですか。
  3. またはFOOBAR2000のタイトルを取得する簡単な方法はありますか?

誰かがこの問題の経験がありますか?

==2012/11/28編集==

Ennoの意見に従い、http_controlプラグインを変更してファイル名情報を追加します。元のjson情報は「トラックタイトル」です。

次のように変更します

state.cpp行3801行追加

+pb_helper1 = pfc::string_filename(pb_item_ptr->get_path());
 pb_helper1x = xml_friendly_string(pb_helper1);
4

2 に答える 2

0

Web サーバーがサービスとして実行されている場合、Windows では、サービスに対して「デスクトップの対話を許可する」を有効にする必要があります。php スクリプトは、ブラウザから要求されたときに Web サーバー プロセスの子として実行されます。

于 2012-11-25T01:35:33.207 に答える
0

@ 1: Firefox が php を開き、それが実行されると、コンテキストは php-container (apache) を実行するユーザーに依存します。これは、コンテキストで実行されるコマンドライン呼び出しとはまったく異なります。

@ 2 と 3: タイトルを取得する方法は複数あるようです。 -root-folder または SDK 内で http-client を使用します。これを使用すると、wabserver は必要ありません。さらに、既に実装されているモジュールを使用することをお勧めします。たとえば、foo_upnp または foo-httpcontrol です。

幸運を!

于 2012-11-25T01:40:13.510 に答える