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.
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.
Yeni standart exe DOSYASı bir proje açın. Varsayılan olarak, Form1 oluşturulur.
Bir KomutDüğmesi ve bir ListBox forma ekleyin.
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
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.
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.
Ö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/
)
Bu makaleyi kullanabilmek için kişisel olarak ne kadar çaba harcadınız?
Çok az
Az
Ne Az, Ne Fazla
Fazla
Çok fazla
Bu bilgiyi geliştirmek için ne yapabiliriz?
Gizliliğinizi korumak için, irtibat bilgilerinizi görüşlerinize eklemeyin.
Teşekkür ederiz! Görüşleriniz, destek içeriğimizi geliştirmek amacıyla kullanılacaktır. Daha fazla yardım seçeneği için lütfen, Yardım ve Destek Ana Sayfası’nı ziyaret edin.