たびたび失礼いたします。
VB2005で、プリンタの解像度(600DPI、とか)を取得する方法は、
System.Drawing.Printing名前空間では提供されていないのでしょうか?
調べてみても、今のところ無さそうなんですが……
GetDeviceCapsで取るしかないんでしょうか?
すいません、追加質問みたいになってしまうのですが……
試しにプリンタ関連API処理をVB2005に移植して使おうかと思ったのですが、
・GetDeviceCaps
それ以前に処理しておくべきCreateDCに引き渡すべきプリンタドライバ名が判らない
・DeviceCapabilities
ポート名が判らない
……という状況で、APIを使わないといけないにしても、引数が不明で、
現状の私の知識では無理な気がしてきました。
この辺りの引数についても、出来れば教えて頂けると有難いです。
PrinterSettingsクラスには、PrinterResolutionプロパティがありますが、
これではいけないのでしょうか。
レスありがとうございます。
PrintDocument.PrinterSettings.PrinterNameオブジェクトに、実際に会社にあるプリンタ名を割り当て、
PrintDocument.PrinterSettings.PrinterResolutionsコレクションから、
PrinterResolution.Kind、PrinterResolution.X、PrinterResolution.Yを取得するところまでは、やってみました。
でも、PrinterResolution.Kindで返ってくる値はHigh、Medium、Low、Draftだけで、
Custom解像度は返ってこないみたいなのです。
無理矢理PrinterResolution.X、PrinterResolution.Yを参照しても、マイナス1桁の値が返ってくるだけで……
その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
辺りを読んで、何がわからないのか、を書かないと。
レスありがとうございます。
> PrinterResolution.KindがHighのときの解像度
PrinterResolution.X = -4
PrinterResolution.Y = -1
…が返ってきます。
> API
CreateICは今まで使ったことがありませんが、それにせよGetDeviceCaps(の前のCreateDC)にせよ
DeviceCapabilitiesにせよ、以前書いた通り、プリンタドライバ名やポート名の
取得の仕方がわからず、(引数が設定できず)呼び方がわからない、といった状況です。
VB6までなら、ドライバ名なんかPrintersコレクションから楽に取得できたんですけど……
では、
http://msdn.microsoft.com/library/ja/jpgdi/html/_win32_enumprinters.asp
で列挙してみるとか。
# そういえば、VB6時代でもAccessやExcelなどでこういうのを使う必要が
# あったケースを見かけたことを思い出した。
第3引数のLevelには2を設定して、PRINTER_INFO_2辺りで列挙すれば、
必要な情報が取得できると思います。
あ、なるほどなるほど…… こんなのがあったんですね(^^;
ありがとうございます。これを呼び出せれば、確かに何とかなりそうですね。
(Enumでもコールバックじゃないんですね…… VBとの配列の整合性を信頼していいのかどうか
気味が悪い部分もありますが、まぁ何とかなるんでしょう)
今すぐには実際に検証する時間は確保できなさそうなんですが、後はAPI呼ぶだけだし
ググれば どっかにやり方転がってるでしょうって事で、一旦 解決としておきたいと思います。
どうも、ありがとうございました。
しまった、チェック入れ忘れてました(滝汗)
ツイート | ![]() |