私の問題は、ファイルの再生情報が含まれているため、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ですが、ブラウザは失敗します。
私の質問は
- コマンドラインとブラウザで2つの異なる出力があるのはなぜですか。私はそれを理解することはできません。
- ブラウザを介して正しい出力を取得するにはどうすればよいですか。
- または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);