VB2005でプリンタ解像度(DPI)を取得するには?

解決


そがっち  2007-02-06 18:47:12  No: 135187

たびたび失礼いたします。
VB2005で、プリンタの解像度(600DPI、とか)を取得する方法は、
System.Drawing.Printing名前空間では提供されていないのでしょうか?
調べてみても、今のところ無さそうなんですが……
GetDeviceCapsで取るしかないんでしょうか?


そがっち  2007-02-06 23:14:10  No: 135188

すいません、追加質問みたいになってしまうのですが……
試しにプリンタ関連API処理をVB2005に移植して使おうかと思ったのですが、
・GetDeviceCaps
    それ以前に処理しておくべきCreateDCに引き渡すべきプリンタドライバ名が判らない
・DeviceCapabilities
    ポート名が判らない
……という状況で、APIを使わないといけないにしても、引数が不明で、
現状の私の知識では無理な気がしてきました。
この辺りの引数についても、出来れば教えて頂けると有難いです。


K.J.K.  2007-02-09 20:37:58  No: 135189

PrinterSettingsクラスには、PrinterResolutionプロパティがありますが、
これではいけないのでしょうか。


そがっち  2007-02-09 22:07:00  No: 135190

レスありがとうございます。
PrintDocument.PrinterSettings.PrinterNameオブジェクトに、実際に会社にあるプリンタ名を割り当て、
PrintDocument.PrinterSettings.PrinterResolutionsコレクションから、
PrinterResolution.Kind、PrinterResolution.X、PrinterResolution.Yを取得するところまでは、やってみました。
でも、PrinterResolution.Kindで返ってくる値はHigh、Medium、Low、Draftだけで、
Custom解像度は返ってこないみたいなのです。
無理矢理PrinterResolution.X、PrinterResolution.Yを参照しても、マイナス1桁の値が返ってくるだけで……


K.J.K.  2007-02-09 22:25:47  No: 135191

そのPrinterResolution.KindがHighのときの解像度ではいけないのでしょうか?

もしAPI関数を使えば、現状の解像度の値がわかる、というのならば、
http://msdn.microsoft.com/library/ja/jpgdi/html/_win32_createic.asp
http://msdn.microsoft.com/library/ja/jpgdi/html/_win32_devicecapabilities.asp
辺りを読んで、何がわからないのか、を書かないと。


そがっち  2007-02-10 00:06:47  No: 135192

レスありがとうございます。
> PrinterResolution.KindがHighのときの解像度
PrinterResolution.X = -4
PrinterResolution.Y = -1
…が返ってきます。

> API
CreateICは今まで使ったことがありませんが、それにせよGetDeviceCaps(の前のCreateDC)にせよ
DeviceCapabilitiesにせよ、以前書いた通り、プリンタドライバ名やポート名の
取得の仕方がわからず、(引数が設定できず)呼び方がわからない、といった状況です。
VB6までなら、ドライバ名なんかPrintersコレクションから楽に取得できたんですけど……


K.J.K.  2007-02-10 01:34:24  No: 135193

では、
http://msdn.microsoft.com/library/ja/jpgdi/html/_win32_enumprinters.asp
で列挙してみるとか。
# そういえば、VB6時代でもAccessやExcelなどでこういうのを使う必要が
# あったケースを見かけたことを思い出した。

第3引数のLevelには2を設定して、PRINTER_INFO_2辺りで列挙すれば、
必要な情報が取得できると思います。


そがっち  2007-02-10 02:47:38  No: 135194

あ、なるほどなるほど…… こんなのがあったんですね(^^;
ありがとうございます。これを呼び出せれば、確かに何とかなりそうですね。
(Enumでもコールバックじゃないんですね…… VBとの配列の整合性を信頼していいのかどうか
  気味が悪い部分もありますが、まぁ何とかなるんでしょう)

今すぐには実際に検証する時間は確保できなさそうなんですが、後はAPI呼ぶだけだし
ググれば どっかにやり方転がってるでしょうって事で、一旦 解決としておきたいと思います。
どうも、ありがとうございました。


そがっち  2007-02-10 02:48:15  No: 135195

しまった、チェック入れ忘れてました(滝汗)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加