PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
17181 | 02/03/31 16:28:37 | RE(8):PB7.0: Windows API \"EnumPrinters\"は使用できる? By tomox2 |
17179 | 02/03/29 23:15:22 | RE(7):PB7.0: Windows API \"EnumPrinters\"は使用できる? By Taka |
17178 | 02/03/29 22:12:37 | RE(6):PB7.0: Windows API \"EnumPrinters\"は使用できる? By tomox2 |
17165 | 02/03/28 13:06:40 | RE(5):Windows API \"EnumPrinters\" の使い方 の補足 By Taka |
17164 | 02/03/28 12:06:06 | RE(4):Windows API \"EnumPrinters\" の使い方 By にしやん |
17162 | 02/03/27 18:56:06 | RE(3):PB7.0: Win32API \"EnumPrinters\" を使用せずにプリンタ一覧を取得する方法 By M.M |
17158 | 02/03/26 22:04:09 | RE(2):PB7.0: Windows API \"EnumPrinters\"は使用できる? By tomox2 |
17155 | 02/03/26 21:40:37 | RE(1):PB7.0: Windows API \"EnumPrinters\"は使用できる? By M.M |
17154 | 02/03/26 21:05:07 | PB7.0: Windows API \"EnumPrinters\"は使用できる? By tomox2 |
カテゴリ:PowerBuilderの開発環境
日付:2002年03月28日 12:06 発信者:にしやん
題名:RE(4):Windows API \"EnumPrinters\" の使い方
tomox2さん、こんにちは。
EnumPrintersを使うのにコールバック関数は必要ないはずです。
以下は、使用できるプリンタ名の一覧を取得する方法です。
構造体
PRINTER_INFO_5
UnsignedLong pPrinterName
UnsignedLong pPortName
UnsignedLong Attributes
UnsignedLong DeviceNotSelectedTimeout
UnsignedLong TransmissionRetryTimeout
外部関数
FUNCTION Boolean EnumPrinters(UnsignedLong Flags, UnsignedLong Name,&
UnsignedLong Level, REF Blob pPrinterEnum,UnsignedLong cbBuf,&
REF UnsignedLong pcbNeeded, REF UnsignedLong pcReturned)&
LIBRARY \"WINSPOOL.DRV\" ALIAS FOR \"EnumPrintersA\"
SUBROUTINE MemMove(REF Structure dst[],REF Blob src,Long len)&
LIBRARY \"KERNEL32.DLL\" ALIAS FOR \"RtlMoveMemory\"
スクリプト
//定数宣言
CONSTANT UnsignedLong PRINTER_ENUM_LOCAL = 2
//変数宣言
String PrinterList[]
Blob PrinterInfoBlob
PRINTER_INFO_5 PrinterInfo[], PrinterInfoDefault
Boolean ret
UnsignedLong cbNeeded, cReturned, p
//必要な領域サイズ取得
ret = EnumPrinters(PRINTER_ENUM_LOCAL, 0, 5, PrinterInfoBlob, 0, cbNeeded, cReturned)
IF cbNeeded > 0 THEN
//領域確保
PrinterInfoBlob = Blob(Space(cbNeeded))
//プリンタ情報を取得
ret = EnumPrinters(PRINTER_ENUM_LOCAL, 0, 5, PrinterInfoBlob, cbNeeded, cbNeeded, cReturned)
END IF
IF ret AND cReturned > 0 THEN
//構造体配列にコピー
PrinterInfo[cReturned] = PrinterInfoDefault
MemMove(PrinterInfo, PrinterInfoBlob, 20 * cReturned) //20は構造体のサイズ
//プリンタ名を取得
FOR p = 1 TO cReturned
PrinterList[p] = String(PrinterInfo[p].pPrinterName, \"address\")
NEXT
ELSE
//取得できない
END IF
※WinNT/2000では、Level=4(PRINTER_INFO_4)の方が速いらしいです。
PRINTER_INFO_4構造体の内容は、winspool.hを参照してください。
ただし、Win9xではLevel=4は使えません。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.