2009-05-11 13 views
0

私の上司には、彼が書いたWindowsアプリケーションがあります。これはWindowsコンソールアプリケーションではなく、Windows GUIアプリケーションです。もちろん、私たちはソースコードを持っていますが、彼はそれをコンソールアプリケーションにしたくありません。彼はそれを通常のGUIアプリケーションのままにしたいと考えています。PHPを使用したWindowsアプリケーションからの出力の取得

これは、PHPから呼び出してパラメータを渡し、呼び出し元のPHPスクリプトに情報を返すことができるようにするためです。私は簡単にWindowsコンソールアプリケーションを呼び出し、出力を読むことができます。私はVBSスクリプトを呼び出して、それらから出力を得ることさえできます。

しかし、私たちは、テキストファイルに出力を書き込んだり、php内から読み込むことなく、呼び出し元のPHPスクリプトにデータを出力するために、通常のWindowsアプリケーションを取得する方法が不足しています。

これは誰でもできましたか?もしそうなら、どうですか?

ありがとうございます。

エイミー

編集、追加する

:PHPは、彼がこのコンソールに書き込みをしていることの情報を見ていない、

BOOL bConsole = AllocConsole(); 
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
DWORD dwCharsWritten = 0; 
string sS3Path = sCommandLine.substr(sCommandLine.find("S3://") + 5); 
string sMessage = "S3 Path: " + sS3Path; 

BOOL bWritten = WriteConsole(hOutput, sMessage.c_str(), sMessage.size(), &dwCharsWritten, NULL); 

しかし:どうやら、上司が自分のアプリケーションにこのコードを置きます。私たちはexecとshell_execを無駄にしようとしました。

答えて

0

私の最終的な解決策は、私の上司が自分のWindowsアプリケーションを変更することでした。彼はアプリ内からコンソールに書き込むことができたので、そのコンソールに出力を読み込むことができました。

エイミー

3

ここでは、コマンドラインスイッチを追加することで、指定したときにアプリケーションをコンソールアプリケーション、その他の場合はGUIのように動作させることができます。

GUIアプリケーションからの情報の取得は、標準出力またはファイルを介して出力を送信しない限り不可能です。

+1

どうやらこれはGUIアプリケーションやコンソールアプリケーションとしてアプリケーションを実行するための選択肢としてではない、実行時に、アプリケーションのビルド時に行われ、非自明である - あなたはできません*本当に*コマンドラインスイッチに基づいて選択します。参照してください:http://stackoverflow.com/questions/54536/win32-gui-app-that-writes-usage-text-to-stdout-when-invoked-as-app-exe-help –

+0

私が言ったように、LIKE ... GUIアプリケーションであっても情報を標準出力にパイプすることはできます。コンソールウィンドウは表示されませんが、他のプログラムは引き続き情報を読み取ることができます。 –

3

最良の方法は、Windows GUIアプリケーションでロジックを適切に再設計し、COMコンポーネントとして公開することです。 GUIアプリケーションとPHPスクリプトは、どちらもCOMコンポーネントを呼び出し、同じロジックを利用できます。

この場合、データ交換は不要で、おそらくテキスト経由ではありません。 COMコンポーネントで型付きのプロパティを設定および読み込むことによって、データ交換を行うことができます。

これはCOMが意図したものです。もちろんPHPには、Windows上でCOMコンポーネントを呼び出すための成熟したライブラリがあります。

WebアプリケーションからGUIアプリケーションを呼び出すことは本当に悪い考えです。あなたはそれをする際に問題を求めています。 COMアプローチがより好ましい。

更新:あなたはアプリずっとあなたがコマンドラインアプリケーションへの希望の道を勝利フォームにパラメータを渡すことができPHP COM DOC

0

。 mainメソッドのargumentsパラメーターを使用します。

これはwinformsアプリケーションのいくつかの変更を必要としますが、いくつかのパラメータを渡してphpからexeを呼び出すことができます。

あなたのビジネス要件はわかりませんが、ビジネスドメインとGUIを分けてアプリケーションを作成するのが理想的です。このcmdラインプロセスでwinformsのすべての機能を使用する必要はほとんどありませんappではなく、いくつかの入力から適切な出力を生成するので、ビジネスロジックを書き直すことなく、アプリケーションのcmdバージョンを実装するのはあまりにも大事なことではありません。