2011-02-05 7 views
3

.NETでカスタムプリントポートを作成できるかどうかを調べようとしています。 私が達成しようとしている機能は、プリンタドライバによって生成されたデータを傍受し、デバイスではなくリモートサーバに送信することです。.NETでカスタムプリントポートを作成する

答えて

1

仮想ポートドライバまたはネットワークリダイレクタを作成するには、ネイティブコードが必要です。しかし...

ネットワークプリントポートをインストールし、サーバー側を.NETに実装することで、データをキャプチャできます。たとえば、LPRではTCPソケットサーバーを作成する必要がありますが、これはC#で実現するのが完全に可能です。

私は既存のC#実装についてはわかりませんが、ソースコードp910ndから多くを学ぶことができます。

5

はい、そうです。私はC#でそれをやって、ソフトウェアで制御されたPDFプリンタを書いています。あなたの目標をachiveする

手順は以下のとおりです。

  1. は、入力ストリームを取得するアプリケーションを書くアプリケーション
  2. に出力を送信するためRedMon
  3. セットのポートを使用して新しいポートを作成し、好きな場所にそれを送りますここで

カスタム・アプリケーションのコードの束である:

string fname = Environment.GetEnvironmentVariable("TEMP") + @"\"; 
    fname += DateTime.Now.ToString("yyyyMMdd-hhmmss-fffff") + ".ps"; 
    FileStream fs = new FileStream(fname, FileMode.Create); 
    StreamWriter sw = new StreamWriter(fs); 
    StreamReader sr = new StreamReader(Console.OpenStandardInput()); 
    sw.Write(sr.ReadToEnd()); 
    sw.Flush(); 
    sw.Close(); 
    sr.Close(); 

私はあなたのコメントに答えるために、私の投稿を編集:

  1. あなたは簡単にはWindows7上Redmonを使用することができます。私は自分のプリンタで何の問題もなく、Windows 2008でもそれをやることができると思います。 インストーラなしでredmon portをインストールする方法を知りたい場合は、PDFCreator setup sourceを参照してください。 もしあなたがそれを行う方法を説明することができ、C#実装を投稿することができますが、これはあなたが今必要としているとは思いません。
  2. 1台のRedmonポートだけでなく、任意の台数のプリンタを使用できます。あなたのソフトウェアがプリンターからスプールされたジョブを受け取ったときに、環境変数Redmonがあなたのために設定されていれば、ジョブを送信しているプリンターの名前を読むことができるので、それに従って何をすべきかを決めることができます。
+0

行 "StreamReader sr =新しいStreamReader(Console.OpenStandardInput());"入力ストリームを取得する責任があります。 もう1つの部分(例として挙げると)は、着信ストリームを一時ファイルに保存します。 – Marco

+0

ありがとうございました。私が持っている問題の1つは、RedMonを使用していることです.Windows 2008とWindows 7はサポートしていません。お客様がプライマリを使用しているため、これらのプラットフォームをターゲットにしています。また、私はもう少し自分自身を説明したかったので、複数のプリンタがカスタムプリントポートを使う必要がありました。ありがとうございました。 –

+0

私はRedmonを使用してWindows7で自分のプリンタを使用しています... – Marco

0

また、無料のユーティリティであるmfilemonをインストールすることで、マルチファイルポートを使用することもできます。このポートの助けを借りて、あなたの希望のフォルダにプリンタの出力を指示することができますし、あなたもアプリケーションを起動することができます。

関連する問題