vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: Drucker-Informationen? 
Autor: Boris
Datum: 16.07.02 16:08

also: hier einige API funktionen die dir bestimmt weiterhelfrn:

1.: PrinterProperties

Beispiel:
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" ( _
  ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As _
Long) As Long
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hwnd As _
Long, ByVal hPrinter As Long) As Long
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim hPrinter As Long
    OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&
    PrinterProperties Me.hwnd, hPrinter
    ClosePrinter hPrinter
End Sub
2.: GetPrinter

Beispiel:
'Code generously provided by Merrion Computing
'Visit their website at http://www.merrioncomputing.com/
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Type DEVMODE
    dmDeviceName As String * CCHDEVICENAME
    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 As String * CCHFORMNAME
    dmUnusedPadding As Integer
    dmBitsPerPel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
End Type
Private Type PRINTER_INFO_2
   pServerName As String
   pPrinterName As String
   pShareName As String
   pPortName As String
   pDriverName As String
   pComment As String
   pLocation As String
   pDevMode As Long
   pSepFile As String
   pPrintProcessor As String
   pDatatype As String
   pParameters As String
   pSecurityDescriptor As Long
   Attributes As Long
   Priority As Long
   DefaultPriority As Long
   StartTime As Long
   UntilTime As Long
   Status As Long
   JobsCount As Long
   AveragePPM As Long
End Type
Private Type PRINTER_DEFAULTS
  pDatatype As String
  pDevMode As DEVMODE
  DesiredAccess As Long
End Type
Public Enum Printer_Status
   PRINTER_STATUS_READY = &H0
   PRINTER_STATUS_PAUSED = &H1
   PRINTER_STATUS_ERROR = &H2
   PRINTER_STATUS_PENDING_DELETION = &H4
   PRINTER_STATUS_PAPER_JAM = &H8
   PRINTER_STATUS_PAPER_OUT = &H10
   PRINTER_STATUS_MANUAL_FEED = &H20
   PRINTER_STATUS_PAPER_PROBLEM = &H40
   PRINTER_STATUS_OFFLINE = &H80
   PRINTER_STATUS_IO_ACTIVE = &H100
   PRINTER_STATUS_BUSY = &H200
   PRINTER_STATUS_PRINTING = &H400
   PRINTER_STATUS_OUTPUT_BIN_FULL = &H800
   PRINTER_STATUS_NOT_AVAILABLE = &H1000
   PRINTER_STATUS_WAITING = &H2000
   PRINTER_STATUS_PROCESSING = &H4000
   PRINTER_STATUS_INITIALIZING = &H8000
   PRINTER_STATUS_WARMING_UP = &H10000
   PRINTER_STATUS_TONER_LOW = &H20000
   PRINTER_STATUS_NO_TONER = &H40000
   PRINTER_STATUS_PAGE_PUNT = &H80000
   PRINTER_STATUS_USER_INTERVENTION = &H100000
   PRINTER_STATUS_OUT_OF_MEMORY = &H200000
   PRINTER_STATUS_DOOR_OPEN = &H400000
   PRINTER_STATUS_SERVER_UNKNOWN = &H800000
   PRINTER_STATUS_POWER_SAVE = &H1000000
End Enum
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" ( _
  ByVal pPrinterName As String, phPrinter As Long, pDefault As _
  PRINTER_DEFAULTS) As Long
Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" ( _
ByVal hPrinter As Long, ByVal Level As Long, buffer As Long, ByVal pbSize As _
Long, pbSizeNeeded 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" ( _
Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function IsBadStringPtrByLong Lib "kernel32" Alias _
"IsBadStringPtrA" (ByVal lpsz As Long, ByVal ucchMax As Long) As Long
Public Function StringFromPointer(lpString As Long, lMaxLength As Long) As _
String
    Dim sRet As String
    Dim lret As Long
    If lpString = 0 Then
        StringFromPointer = ""
        Exit Function
    End If
    If IsBadStringPtrByLong(lpString, lMaxLength) Then
        ' An error has occured - do not attempt to use this pointer
        StringFromPointer = ""
        Exit Function
    End If
    ' Pre-initialise the return string...
    sRet = Space$(lMaxLength)
    CopyMemory ByVal sRet, ByVal lpString, ByVal Len(sRet)
    If Err.LastDllError = 0 Then
        If InStr(sRet, Chr$(0)) > 0 Then
            sRet = Left$(sRet, InStr(sRet, Chr$(0)) - 1)
        End If
    End If
    StringFromPointer = sRet
End Function
Private Sub Form_Load()
    Dim SizeNeeded As Long, buffer() As Long
    Dim pDef As PRINTER_DEFAULTS
    'Get a handle to the printer
    lret = OpenPrinter(Printer.DeviceName, mhPrinter, pDef)
    'Initialize the buffer
    ReDim Preserve buffer(0 To 0) As Long
    'Retrieve the required size (in bytes)
    lret = GetPrinter(mhPrinter, 2, buffer(0), UBound(buffer), SizeNeeded)
    'Resize the buffer... Note that a Long is four bytes
    ReDim Preserve buffer(0 To (SizeNeeded / 4) + 3) As Long
    'Retrieve the Printer information
    lret = GetPrinter(mhPrinter, 2, buffer(0), UBound(buffer) * 4, SizeNeeded)
    'The data stored in 'buffer' corresponds with the data of a PRINTER_INFO_2 
    ' structure
    ClosePrinter mhPrinter
    'Show the data
    PrintData "Server name", StringFromPointer(buffer(0), 255)
    PrintData "Printer name", StringFromPointer(buffer(1), 255)
    PrintData "Share name", StringFromPointer(buffer(2), 255)
    PrintData "Port name", StringFromPointer(buffer(3), 255)
    PrintData "Driver name", StringFromPointer(buffer(4), 255)
    PrintData "Comment", StringFromPointer(buffer(5), 255)
    PrintData "Location", StringFromPointer(buffer(6), 255)
    Unload Me
End Sub
Sub PrintData(Name As String, Data As String)
    If LenB(Data) > 0 Then
        Debug.Print Name + ": " + Data
    End If
End Sub
3.: EnumPrinters

Beispiel:

' Get information about all of the local printers using structure 1.  Note how
' the elements of the array are loaded into an array of data structures 
' manually.  Also
' note how the following special declares must be used to allow numeric string 
' pointers
' to be used in place of strings:
Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" (ByVal _
  lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal _
lpString As Long) As Long
Private Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" ( _
ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As _
Long, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Const PRINTER_ENUM_LOCAL = &H2
Private Type PRINTER_INFO_1
        flags As Long
        pDescription As String
        pName As String
        pComment As String
End Type
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim longbuffer() As Long  ' resizable array receives information from the 
    ' function
    Dim printinfo() As PRINTER_INFO_1  ' values inside longbuffer() will be put 
    ' into here
    Dim numbytes As Long  ' size in bytes of longbuffer()
    Dim numneeded As Long  ' receives number of bytes necessary if longbuffer() 
    ' is too small
    Dim numprinters As Long  ' receives number of printers found
    Dim c As Integer, retval As Long  ' counter variable & return value
    Me.AutoRedraw = True 'Set current graphic mode to persistent
    ' Get information about the local printers
    numbytes = 3076  ' should be sufficiently big, but it may not be
    ReDim longbuffer(0 To numbytes / 4) As Long  ' resize array -- note how 1 
    ' Long = 4 bytes
    retval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes, _
      numneeded, numprinters)
    If retval = 0 Then  ' try enlarging longbuffer() to receive all necessary 
    ' information
        numbytes = numneeded
        ReDim longbuffer(0 To numbytes / 4) As Long  ' make it large enough
        retval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), _
          numbytes, numneeded, numprinters)
        If retval = 0 Then ' failed again!
            Debug.Print "Could not successfully enumerate the printes."
        End  ' abort program
    End If
    End If
    ' Convert longbuffer() data into printinfo()
    If numprinters <> 0 Then ReDim printinfo(0 To numprinters - 1) As _
      PRINTER_INFO_1 ' room for each printer
    For c = 0 To numprinters - 1  ' loop, putting each set of information into 
    ' each element
        ' longbuffer(4 * c) = .flags, longbuffer(4 * c + 1) = .pDescription, 
        ' etc.
        ' For each string, the string is first buffered to provide enough room, 
        ' and then the string is copied.
        printinfo(c).flags = longbuffer(4 * c)
        printinfo(c).pDescription = Space(lstrlen(longbuffer(4 * c + 1)))
        retval = lstrcpy(printinfo(c).pDescription, longbuffer(4 * c + 1))
        printinfo(c).pName = Space(lstrlen(longbuffer(4 * c + 2)))
        retval = lstrcpy(printinfo(c).pName, longbuffer(4 * c + 2))
        printinfo(c).pComment = Space(lstrlen(longbuffer(4 * c + 3)))
        retval = lstrcpy(printinfo(c).pComment, longbuffer(4 * c + 3))
    Next c
    ' Display name of each printer
    For c = 0 To numprinters - 1
        Me.Print "Name of printer"; c + 1; " is: "; printinfo(c).pName
    Next c
End Sub
cu
boris
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Drucker-Informationen?120Privatebox16.07.02 15:44
Re: Drucker-Informationen?388Boris16.07.02 16:08
Beispiel 1 und 2 kenne ich nicht, aber Nr. 3 funzt perfekt !...93Boris16.07.02 16:14
Re: Drucker-Informationen?1.070scorefun19.07.03 00:06

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel