プリンタ設定のダイアグラム等を表示 <TOP>
プリンタの印刷設定用ダイアグラムを呼び出します。
CopyMemory メモリブロックの移動
EnumPrinters 使用可能なプリンタ・プリントサーバーなどを列挙
SHInvokePrinterCommand プリンタのプロパティ等の取得
'================================================================ '= プリンタの設定ダイアグラムの表示 '= (SHInvokePrinterCommand3.bas) '================================================================ #include "Windows.bi" #define PRINTACTION_DOCUMENTDEFAULTS 6 'lpBuf1で指定されたプリンタのプロパティを表示(lpBuf2 パラメータは無視される) #define PRINTACTION_NETINSTALL 2 'lpBuf1で指定されたネットワークプリンタをインストール(lpBuf2 パラメータは無視される) #define PRINTACTION_NETINSTALLLINK 3 'lpBuf1で指定されたネットワークプリンタへのショートカットを作成(lpBuf2 パラメータは、ショートカットを作成するフォルダのドライブ、パスを指定) #define PRINTACTION_OPEN 0 'lpBuf1で指定されたプリンタを開く(lpBuf2 パラメータは無視される) #define PRINTACTION_OPENNETPRN 5 'lpBuf1で指定されたネットワークプリンタを開く(lpBuf2 パラメータは無視される) #define PRINTACTION_PROPERTIES 1 'lpBuf1で指定されたプリンタ用ディスプレイのプロパティページを表示 #define PRINTACTION_SERVERPROPERTIES 7 'lpBuf1で指定されたプリンタサーバーのプロパティを表示(lpBuf2 パラメータは無視される #define PRINTACTION_TESTPAGE 4 'lpBuf1で指定されたプリンタのテストページを印刷(lpBuf2 パラメータは無視される) #define PRINTER_ENUM_DEFAULT &H1 'デフォルトのプリンタに関する情報を列挙 #define PRINTER_ENUM_LOCAL &H2 'Nameの設定を無視して、ローカルプリンタを列挙 #define PRINTER_ENUM_NAME &H8 'Nameで指定されたプリンタを列挙 #define PRINTER_ENUM_SHARED &H20 '共有属性を持つプリンタを列挙 #define MAX_DEVICENAME 64 Type PRINTER_INFO_5 pPrinterName As Long pPortName As Long Attributes As Long DeviceNotSelectedTimeOut As Long TransmissionRetryTimeOut As Long End Type ' ある位置から別の位置にメモリブロックを移動する関数の宣言 Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length&) ' 使用可能なプリンタ・プリントサーバーなどを列挙する Declare Function Api_EnumPrinters& Lib "winspool.drv" Alias "EnumPrintersA" (ByVal Flags&, ByVal Name$, ByVal Level&, pPrinterEnum As Any, ByVal cbBuf&, pcbNeeded&, pcReturned&) ' プリンタのプロパティ取得等のコマンドを実行 Declare Function Api_SHInvokePrinterCommand& Lib "Shell32" Alias "SHInvokePrinterCommandA" (ByVal hWnd&, ByVal uAction&, ByVal lpBuf1$, ByVal lpBuf2$, ByVal fModal&) Var Shared PrinterName As String Var Shared Combo1 As Object Var Shared Combo2 As Object Var Shared Button1 As Object Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Combo2.Attach GetDlgItem("Combo2") : Combo2.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var PrintServer As String Var Needed As Long Var Returned As Long Var Level As Long Var CT As Long Var Ret As Long 'ローカルプリンタから検索 PrintServer = "" 'PRINTER_INFO_5構造体を受け取る Level = 5 'バッファに必要なバイト数を調べる Ret = Api_EnumPrinters(PRINTER_ENUM_NAME, PrintServer, Level, Chr$(0), 0, Needed, Returned) If Needed = 0 Then End '全プリンタ情報を得る Var Buffer(Needed - 1) As byte Ret = Api_EnumPrinters(PRINTER_ENUM_NAME, PrintServer, Level, Buffer(0), Needed, Needed, Returned) '構造体リストの準備 Var PI_5(Returned - 1) As PRINTER_INFO_5 For CT = 0 To Returned - 1 'バッファから構造体1つ分を抜き取る CopyMemory PI_5(CT), Buffer(CT * Len(PI_5(CT))), Len(PI_5(CT)) 'プリンタ名を得る PrinterName = String$(MAX_DEVICENAME, Chr$(0)) CopyMemory PrinterName, ByVal PI_5(CT).pPrinterName, Len(PrinterName) PrinterName = KLeft$(PrinterName, KInStr(1, PrinterName, Chr$(0)) - 1) Combo1.AddString PrinterName Next Combo2.AddString "PRINTACTION_OPEN" Combo2.AddString "PRINTACTION_PROPERTIES" Combo2.AddString "PRINTACTION_NETINSTALL" Combo2.AddString "PRINTACTION_NETINSTALLLINK" Combo2.AddString "PRINTACTION_TESTPAGE" Combo2.AddString "PRINTACTION_OPENNETPRN" Combo2.AddString "PRINTACTION_DOCUMENTDEFAULTS" Combo2.AddString "PRINTACTION_SERVERPROPERTIES" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var Index As Long Var Ret As Long '選択されているプリンタ名を取得 PrinterName = Combo1.GetWindowText Index = Combo2.GetCursel 'プリンタ設定に関するダイアログを表示 Ret = Api_SHInvokePrinterCommand(GethWnd, Index, PrinterName, ByVal 0, 1) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End