プリンター設定ダイアログボックスを表示 |
プリンター設定ダイアログボックスを表示(APIを使って)その1 (115) | |
Option Explicit 'プリンター設定ダイアログボックスを表示する(P634) Private Declare Function PrinterProperties Lib "winspool.drv" _ (ByVal hWnd As Long, ByVal hPrinter As Long) As Long 'プリンターあるいはプリントサーバーのハンドルを取得する(P633) Private Declare Function OpenPrinter Lib "winspool.drv" _ Alias "OpenPrinterA" (ByVal pPrinterName As String, _ phPrinter As Long, pDefault As Any) As Long 'プリンターオブジェクトをクローズする(P596) Private Declare Function ClosePrinter Lib "winspool.drv" _ (ByVal hPrinter As Long) As Long Private Sub Form_Load() 'プリンターの一覧を列挙 On Error Resume Next Dim objPrinter As Printer 'プリンターの一覧を取得 For Each objPrinter In Printers cboPriSet.AddItem objPrinter.DeviceName Next '通常使うプリンターを表示 cboPriSet.Text = Printer.DeviceName '現在のプリンターの情報を表示 lblPriName.Caption = "種類: " & Printer.DeviceName lblPriport.Caption = "場所: " & Printer.Port End Sub Private Sub cmdPriProperty_Click() 'プロパティのボタン On Error Resume Next Dim Ret As Long Dim hPrinter As Long 'プリンターのハンドルを取得する Ret = OpenPrinter(cboPriSet.Text, hPrinter, ByVal 0&) If hPrinter = 0 Then Exit Sub 'プリンター設定ダイアログボックスを表示 Ret = PrinterProperties(Me.hWnd, hPrinter) 'プリンターオブジェクトをクローズ Ret = ClosePrinter(hPrinter) End Sub Private Sub cboPriSet_Click() 'ラベルに情報を再表示する為に選択したプリンターをセット Dim strMyPrinter As String Dim objPrinter As Printer strMyPrinter = cboPriSet.Text For Each objPrinter In Printers '選択したプリンターが見つかったら If objPrinter.DeviceName = strMyPrinter Then 'オブジェクトに代入 Set Printer = objPrinter End If Next '現在のプリンターの情報を表示 lblPriName.Caption = "種類: " & Printer.DeviceName lblPriport.Caption = "場所: " & Printer.Port End Sub Private Sub cmdPrintCancel_Click() 'キャンセルのボタン Form1.Show Unload Me End Sub Private Sub cmdPrintOK_Click() 'OKのボタン Form1.Show Unload Me End Sub サンプル上のForm1の部分 Option Explicit Private Sub mnufileExit_Click() Unload Me End Sub Private Sub mnuFilePrint_Click() '印刷のメニュー Printer.Print "テスト印刷" Printer.EndDoc End Sub Private Sub mnuFilePrintSetup_Click() 'プリンター設定のメニュー frmPrintrSetUP.Show , Me End Sub 実行結果 こちらは、Win2000 以降(XP 含む)ではプロパティが違うものが表示されます。 その場合は、下記の方法を試して下さい。 |
|
プリンター設定ダイアログボックスを表示(APIを使って)その2 (122) | |
Option Explicit 'SampleNo=122 VB6.0(SP5) 2002.03.14 Private Const PRINTACTION_PROPERTIES = 1& 'プロパティを表示 'その他のアクション 'PRINTACTION_OPEN = 0 'PRINTACTION_NETINSTALL = 2 'PRINTACTION_NETINSTALLLINK = 3 'PRINTACTION_TESTPAGE = 4 'PRINTACTION_OPENNETPRN = 5 'PRINTACTION_DOCUMENTDEFAULTS = 6 'PRINTACTION_SERVERPROPERTIES = 7 'プリンターのプロパティ取得等のコマンドを実行する関数 Private Declare Function SHInvokePrinterCommand Lib "Shell32.dll" _ Alias "SHInvokePrinterCommandA" (ByVal hwnd As Long, _ ByVal uAction As Long, ByVal lpBuf1 As String, _ ByVal lpBuf2 As String, ByVal fModal As Long) As Long Private Sub Command1_Click() Dim lngRet As Long Dim strMyPrinter As String '選択されているプリンター名を取得 strMyPrinter = Combo1.Text 'プリンターのプロパティを表示 lngRet = SHInvokePrinterCommand(Me.hwnd, _ PRINTACTION_PROPERTIES, strMyPrinter, vbNullString, 1) End Sub Private Sub Combo1_Click() 'プリンターが変更されたら Dim objPrinter As Printer Dim strMyPrinter As String '選択されているプリンター名を取得 strMyPrinter = Combo1.Text '使用可能プリンターを調べ For Each objPrinter In Printers '見つかったら If objPrinter.DeviceName = strMyPrinter Then 'オブジェクトに代入 Set Printer = objPrinter End If Next End Sub Private Sub Form_Load() Dim objPrinter As Printer 'プリンターの一覧を取得 For Each objPrinter In Printers Combo1.AddItem objPrinter.DeviceName Next '通常使うプリンターを表示 Combo1.Text = Printer.DeviceName End Sub 実行結果(WindowsXP) |
|
単に、プリンターダイアログを表示させるだけなら、コモンダイアログを使えば簡単なのだが、出来たソフトを配布するとなると別です。
COMDLG32.OCXも配布しないといけないし、バージョンの違い等の問題が発生したり、又その分130KB以上サイズが大きくなったりと問題がでてきます。そこで、コモンダイアログを使わずに、APIを使って表示するようにしました。 Windows2000やXPではコモンダイアログでは設定が反映されませんが、上記APIを使った方法 なら設定が有効になります。 |
2002/05/02