DOBON.NET DOBON.NETプログラミング掲示板過去ログ

用紙番号の取得方法

分類:[.NET]

どうもお世話になります。
すえぞーと申します。

現在C#を使用してまして、Windowsプリンタ関係の操作を行っているのですが、
その中でわからない部分が出てきたのでよろしければ教えてください。

以前に使用していたVBなどではそれぞれの用紙に用紙番号というものがあり、
A4=9、ユーザー定義=256などとそれぞれ番号が決まっていましたが、
ドットネットではそういった用紙サイズは取得できないのでしょうか?

いろいろ調べているとPaperKindなるものがどうもそれに変わるもののようなのですが、
プリンタによっては規格外の用紙ばかりを使っているものもあり、
PaperKindではどの用紙もCustumしか返してこない場合がありました。

そういうこともあり用紙番号を取得したいのですが、何か方法はありませんでしょうか?
よろしくお願いします。
Win32 API 関数を使えば取得できます。
下記は、VB.NET で取得しておりますので、C# でも移植すれば可能かと。

http://bbs4.aimix-z.com/gbbs.cgi?room=hanafusa
のNo.128 参照
2005/08/22(Mon) 14:10:07 編集(投稿者)
2005/08/22(Mon) 14:09:59 編集(投稿者)

花ちゃんさん返信ありがとうございました。

しかし教えてもらったところを参考にさせてもらっていろいろと試してはいるのですが、なかなかうまくいきません・・・。

どうもC#への移植でうまくいってないのだと思うのですが、下記のようにすると
lngBinsCountへ用紙の数は返ってくるのですが、strBufには何も返ってきませんでした。

何かおかしな部分があれば教えていただきたいのですが・・・。

<宣言部分>
public const int DC_PAPERS = 2;
public const int DC_BINS = 6;
public const int DC_BINNAMES = 12;
public const int DC_PAPERNAMES = 16;

[System.Runtime.InteropServices.DllImport("winspool.drv")]
public static extern int DeviceCapabilities(string lpDeviceName,
string lpPort,
int iIndex,
string lpOutput,
System.IntPtr lpDevMode);

<実行部分>
long lngBinsCount = DeviceCapabilities(PrinterName,"",DC_PAPERS ,"",System.IntPtr.Zero);
long BufSize = (lngBinsCount * 64); //少し多めに
string strBuf = new string(char.Parse(" "), (int)BufSize); //バッファを確保


if (lngBinsCount >= 1)
{
DeviceCapabilities(PrinterName, "",
DC_PAPERS, strBuf,
System.IntPtr.Zero);
}
  • 題名: Re[3]: 用紙番号の取得方法
  • 著者: すえぞー
  • 日時: 2005/08/22 14:59:30
  • ID: 12298
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
すみません、解決しました。
どうも取得の部分では、VBのように文字列にするのではなく
IntPtr型などにしておかなければいけなかったようです。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板