Makale numarası: 190218 - Son Gözden Geçirme: 14 Temmuz 2004 Çarşamba - Gözden geçirme: 2.2

Nasıl yapılır: bir yazıcı sürücüsü ayarları Al

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Yazıcı sürücüsünün özelliklerini çoğuna ulaşmak Visual Basic yazıcı nesnesini sağlar, ancak bu erişim bunların tümüne vermez. Aşağıdaki örnek, wın32 API kullanarak yazıcı sürücüsü bilgilerini almak gösterilmiştir.

Daha fazla bilgi

Bir yazıcı ayarlarını DEVMODE adlı bir yapıda saklanır. Bu örnek geçerli bir varsayılan yazıcı DEVMODE alır ve bir liste kutusu içinde ayarlarını görüntüler. Bu, ne anlama geldiğini öğrenmek için sabitlere karşılaştırması sayısal bir değer olduğunu unutmayın. Bu makale yalnızca kodunu gerçekten görüntüler değerleri sabitler içerir. Diğer sabitler, bu makalenin sonunda <a1>Başvurular</a1> bölümünde bulunabilir.

Aşağıdaki örnek, iki özel işlevler, StripNulls ve ByteToString içerir. StripNulls yalnızca bir dize alır ve ilk olan null başlayarak tüm karakterleri kaldırır. Visual Basic 5. 0'da, sabit uzunluklu dizeler Boşlara ile Visual Basic 4. 0'da kullanılan boşluk yerine sıfır bu RTrim işlevi yerine kullanılır. ByteToString işlevi, bir dize içinde bir bayt dizisi dönüştürür. DEVMODE iki dizi içerir.

Var olan iki özel hakkında notlar Windows NT altında çalıştırıldığında, aşağıdaki örnek. Birinci, sürücüler, 2'ye yayımlanmasını, renkli yazdırma yeteneği, bir rapor anlamına gelir, dmColor özelliği ancak gerçekten olmayan birçok tek renkli'i tıklatın. Ayrıca, bazı ayarlar "Genel / salt metin" yazıcı sürücüsü için NT altında doğru olmayabilir.

Adım adım örnek

  1. Yeni standart exe DOSYASı bir proje açın. Varsayılan olarak, Form1 oluşturulur.
  2. Bir KomutDüğmesi ve bir ListBox forma ekleyin.
  3. Formun modüle aşağıdaki kodu ekleyin:
          Option Explicit
    
          Private Const NULLPTR = 0&
          ' Constants for DEVMODE
          Private Const CCHDEVICENAME = 32
          Private Const CCHFORMNAME = 32
          ' Constants for DocumentProperties
          Private Const DM_MODIFY = 8
          Private Const DM_COPY = 2
          Private Const DM_IN_BUFFER = DM_MODIFY
          Private Const DM_OUT_BUFFER = DM_COPY
          ' Constants for dmOrientation
          Private Const DMORIENT_PORTRAIT = 1
          Private Const DMORIENT_LANDSCAPE = 2
          ' Constants for dmPrintQuality
          Private Const DMRES_DRAFT = (-1)
          Private Const DMRES_HIGH = (-4)
          Private Const DMRES_LOW = (-2)
          Private Const DMRES_MEDIUM = (-3)
          ' Constants for dmTTOption
          Private Const DMTT_BITMAP = 1
          Private Const DMTT_DOWNLOAD = 2
          Private Const DMTT_DOWNLOAD_OUTLINE = 4
          Private Const DMTT_SUBDEV = 3
          ' Constants for dmColor
          Private Const DMCOLOR_COLOR = 2
          Private Const DMCOLOR_MONOCHROME = 1
          ' Constants for dmCollate
          Private Const DMCOLLATE_FALSE = 0
          Private Const DMCOLLATE_TRUE = 1
          Private Const DM_COLLATE As Long = &H8000
          ' Constants for dmDuplex
          Private Const DM_DUPLEX = &H1000&
          Private Const DMDUP_HORIZONTAL = 3
          Private Const DMDUP_SIMPLEX = 1
          Private Const DMDUP_VERTICAL = 2
    
          Private Type DEVMODE
              dmDeviceName(1 To CCHDEVICENAME) As Byte
              dmSpecVersion As Integer
              dmDriverVersion As Integer
              dmSize As Integer
              dmDriverExtra As Integer
              dmFields As Long
              dmOrientation As Integer
              dmPaperSize As Integer
              dmPaperLength As Integer
              dmPaperWidth As Integer
              dmScale As Integer
              dmCopies As Integer
              dmDefaultSource As Integer
              dmPrintQuality As Integer
              dmColor As Integer
              dmDuplex As Integer
              dmYResolution As Integer
              dmTTOption As Integer
              dmCollate As Integer
              dmFormName(1 To CCHFORMNAME) As Byte
              dmUnusedPadding As Integer
              dmBitsPerPel As Integer
              dmPelsWidth As Long
              dmPelsHeight As Long
              dmDisplayFlags As Long
              dmDisplayFrequency As Long
                    
          End Type
    
          Private Declare Function OpenPrinter Lib "winspool.drv" Alias _
          "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
          ByVal pDefault As Long) As Long
    
          Private Declare Function DocumentProperties Lib "winspool.drv" _ 
          Alias "DocumentPropertiesA" (ByVal hwnd As Long, _ 
          ByVal hPrinter As Long, ByVal pDeviceName As String, _ 
          pDevModeOutput As Any, ByVal pDevModeInput As Long, _ ByVal fMode As Long)
          As Long      
    
          Private Declare Function ClosePrinter Lib "winspool.drv" _
          (ByVal hPrinter As Long) As Long
    
          Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
          (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    
          Function StripNulls(OriginalStr As String) As String
             If (InStr(OriginalStr, Chr(0)) > 0) Then
                OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
             End If
             StripNulls = Trim(OriginalStr)
          End Function
    
          Function ByteToString(ByteArray() As Byte) As String
            Dim TempStr As String
            Dim I As Integer
    
            For I = 1 To CCHDEVICENAME
                TempStr = TempStr & Chr(ByteArray(I))
            Next I
            ByteToString = StripNulls(TempStr)
          End Function
    
          Function GetPrinterSettings(szPrinterName As String, hdc As Long) _
          As Boolean
          Dim hPrinter As Long
          Dim nSize As Long
          Dim pDevMode As DEVMODE
          Dim aDevMode() As Byte
          Dim TempStr As String
    
            If OpenPrinter(szPrinterName, hPrinter, NULLPTR) <> 0 Then
               nSize = DocumentProperties(NULLPTR, hPrinter, szPrinterName, _
               NULLPTR, NULLPTR, 0)
              If nSize < 1 Then
                GetPrinterSettings = False
                Exit Function
              End If
              ReDim aDevMode(1 To nSize)
              nSize = DocumentProperties(NULLPTR, hPrinter, szPrinterName, _
              aDevMode(1), NULLPTR, DM_OUT_BUFFER)
              If nSize < 0 Then
                GetPrinterSettings = False
                Exit Function
              End If
             Call CopyMemory(pDevMode, aDevMode(1), Len(pDevMode))
    
    
             List1.Clear   ' empty the ListBox
             List1.AddItem "Printer Name: " & _
             ByteToString(pDevMode.dmDeviceName)
    
             If pDevMode.dmOrientation = DMORIENT_PORTRAIT Then
                TempStr = "PORTRAIT"
             ElseIf pDevMode.dmOrientation = DMORIENT_LANDSCAPE Then
                TempStr = "LANDSCAPE"
             Else
                TempStr = "UNDEFINED"
             End If
             List1.AddItem "Orientation: " & TempStr
    
             Select Case pDevMode.dmPrintQuality
                Case DMRES_DRAFT
                    TempStr = "DRAFT"
                Case DMRES_HIGH
                    TempStr = "HIGH"
                Case DMRES_LOW
                    TempStr = "LOW"
                Case DMRES_MEDIUM
                    TempStr = "MEDIUM"
                Case Else   ' positive value
                    TempStr = CStr(pDevMode.dmPrintQuality) & " dpi"
             End Select
             List1.AddItem "Print Quality: " & TempStr
    
             Select Case pDevMode.dmTTOption
                Case DMTT_BITMAP    ' default for dot-matrix printers
                    TempStr = "TrueType fonts as graphics"
                Case DMTT_DOWNLOAD  ' default for HP printers that use PCL
                    TempStr = "Downloads TrueType fonts as soft fonts"
                Case DMTT_SUBDEV    ' default for PostScript printers
                    TempStr = "Substitute device fonts for TrueType fonts"
                Case Else
                    TempStr = "UNDEFINED"
             End Select
             List1.AddItem "TrueType Option: " & TempStr
    
             ' Windows NT drivers often return COLOR from Monochrome printers
             If pDevMode.dmColor = DMCOLOR_MONOCHROME Then
                TempStr = "MONOCHROME"
             ElseIf pDevMode.dmColor = DMCOLOR_COLOR Then
                TempStr = "COLOR"
             Else
                TempStr = "UNDEFINED"
             End If
             List1.AddItem "Color or Monochrome: " & TempStr
    
             If pDevMode.dmScale = 0 Then
                TempStr = "NONE"
             Else
                TempStr = CStr(pDevMode.dmScale)
             End If
             List1.AddItem "Scale Factor: " & TempStr
    
            If pDevMode.dmFields And DM_COLLATE Then
                If pDevMode.dmCollate = DMCOLLATE_FALSE Then
                   TempStr = "Collating is supported, but turned off"
                ElseIf pDevMode.dmCollate = DMCOLLATE_TRUE Then
                   TempStr = "Collating is supported and turned on"
                End If
             Else
                TempStr = "Collating is unsupported"
             End If
             List1.AddItem TempStr        
             If pDevMode.dmFields And DM_DUPLEX Then
                If pDevMode.dmDuplex = DMDUP_SIMPLEX Then
                   TempStr = "Duplex is supported, but turned off (1)"
                ElseIf pDevMode.dmDuplex = DMDUP_VERTICAL Then
                   TempStr = "Duplex is set to VERTICAL (2)"
                ElseIf pDevMode.dmDuplex = DMDUP_HORIZONTAL Then
                   TempStr = "Duplex is set to HORIZONTAL (3)"
                Else
                   TempStr = "Duplex is set to undefined value of " & _
                      pDevMode.dmDuplex
                End If
             Else
                TempStr = "Duplex is unsupported"
             End If
             List1.AddItem TempStr
    
             List1.AddItem "Y Resolution: " & pDevMode.dmYResolution & " dpi"
             List1.AddItem "Copies: " & CStr(pDevMode.dmCopies)
             ' Add any other items of interest ...
    
             Call ClosePrinter(hPrinter)
             GetPrinterSettings = True
          Else
             GetPrinterSettings = False
          End If
          End Function
    
          Private Sub Command1_Click()
          If GetPrinterSettings(Printer.DeviceName, Printer.hdc) = False Then
             List1.AddItem "No Settings Retrieved!"
             MsgBox "Unable to retrieve Printer settings.", , "Failure"
          End If
          End Sub
    
    					
  4. Projeyi çalıştırın ve üzerinde Command1'ı tıklatın. Geçerli varsayılan yazıcı ayarlarını bir liste içinde görüntülenir.

Referanslar

Ek sabitler bulmak için lütfen DEVMODE üzerinde ya da Win32 Programcı arama başvuru ya da Microsoft Developer Network (MSDN) kitaplığı CD-ROM'dan olur.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Anahtar Kelimeler: 
kbmt kbapi kbhowto kbprint KB190218 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:190218  (http://support.microsoft.com/kb/190218/en-us/ )