2009-03-26 21 views
1

.NETアプリケーションを使用してDataCard Desktop Cardプリンタを制御していますが、問題が発生しました。磁気ストライプとチップエンコーディングを実行するには、ネイティブプリンタAPI dllで関数を呼び出して、プリンタの対話モードを有効にする必要があります。.NET印刷APIからデバイスコンテキストを取得する

私はこのネイティブ関数を呼び出すためのP/Invokeコードを作成することができました。しかし問題は、このメソッドは、プリンタのDevice Contextハンドルをパラメータとして取り、Gdi32 StartDoc関数が呼び出される前に呼び出されなければならないということです。

.NET印刷APIでは、GraphicsオブジェクトからhDCにアクセスできます。しかし、私が見る限り、Graphicsオブジェクトは、StartDoc関数が呼び出された後にしか利用できません。

私の質問は、StartDocが呼び出される前に誰かがコンテキストを取得する方法を知っている場合ですか?

答えて

1

あなたは、プリンタハンドル(HANDLE)を取得し、(StartDoc前)プリンタDCをいつでも取得するには、このハンドルを渡すことによってCreateDCを呼び出すためにOpenPrinterを行うことができます。

+0

私はあなたが "winspool.drv"と "gdi32.dll"関数を意味すると思いますか?私はこれがネイティブCのapiを使用することは困難ではないことを認識しています。しかし、私のアプリケーションは.NETアプリケーションなので、できるだけ.NET APIを使うことができたらいいと思います。 –

+0

あなたはすでにP/Invokeを使用しているので、私はこの返答を試みました。あなたのニーズを明確に質問してください。 – dirkgently

+0

私は明らかに、私の問題は.NET印刷APIであると言いました。しかし、Gdi32用の自分のp/invokeラッパーを書くことは、これを達成する唯一の方法であるようです。 –

関連する問題