Numéro d'article: 190218 - Dernière mise à jour: mercredi 14 juillet 2004 - Version: 2.2

Comment faire pour récupérer des paramètres à partir d'un pilote d'imprimante

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.

Sommaire

Agrandir tout | Réduire tout

Résumé

L'objet Printer de Visual Basic permet vous permet d'accéder à de nombreuses propriétés d'un pilote d'imprimante, mais il ne vous fournit pas l'accès à tous les éléments. L'exemple suivant montre comment récupérer des informations à partir d'un pilote d'imprimante à l'aide de l'API Win32.

Plus d'informations

Paramètres de l'imprimante sont stockées dans une structure appelée la structure DEVMODE. Cet exemple récupère le DEVMODE pour l'imprimante par défaut en cours et affiche ses paramètres dans un contrôle ListBox. Notez qu'il s'agit de valeurs numériques qui doivent être comparés aux constantes pour déterminer leur signification. Cet article inclut uniquement les constantes pour les valeurs que le code affiche réellement. Vous trouverez d'autres constantes dans la section Références à la fin de cet article.

L'exemple ci-dessous contient deux fonctions personnalisées, StripNulls et ByteToString. Il vous suffit de StripNulls prend une valeur de type String et supprime tous les caractères en partant de la première NULL. Ceci est utilisé à la place de la fonction RTrim, car dans Visual Basic 5.0, les chaînes de longueur fixe sont complétées avec les valeurs NULL à la place des espaces utilisés dans Visual Basic 4.0. La fonction ByteToString convertit un tableau d'octets en une valeur de type String. La structure DEVMODE contient deux de ces tableaux.

Il n'y a le deux remarques spéciales concernant l'exemple suivant, lors de l'exécution sous Windows NT. Tout d'abord, monochrome de nombreux pilotes ont leur propriété dmColor la valeur 2, qui signifie qu'ils rapport étant capable de l'impression des couleurs mais vraiment ne sont pas. En outre, certains paramètres pour le pilote d'imprimante "Générique / texte seulement" ne peuvent pas être précises sous NT.

Exemple pas à pas

  1. Ouvrez un nouveau projet standard EXE. Form1 est créé par défaut.
  2. Ajouter un bouton de commande et un contrôle ListBox à la fiche.
  3. Ajoutez le code suivant au module du formulaire :
          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. Exécutez le projet et cliquez sur Command1. Paramètres de l'imprimante par défaut en cours seront affiche dans la zone de liste.

Références

Pour trouver des constantes supplémentaires, effectuez une recherche sur DEVMODE soit dans le programmeur Win32 de référence ou le CD-ROM de la bibliothèque MSDN (Microsoft Developer Network).

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 6.0 Édition initiation
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Édition Standard
  • Microsoft Visual Basic 4.0 Édition professionnelle
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Mots-clés : 
kbmt kbapi kbhowto kbprint KB190218 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 190218  (http://support.microsoft.com/kb/190218/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.