vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Drucken22.03.05
EnumPorts-Funktion

Diese Funktion enumeriert alle vorhandenen Druckerports.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  9.397 

Deklaration:

Declare Function EnumPorts Lib "winspool.drv" _
  Alias "EnumPortsA" ( _
  ByVal pName As String, _
  ByVal Level As Long, _
  pPorts As Any, _
  ByVal cbBuf As Long, _
   pcbNeeded As Long, _
  pcReturned As Long) As Long

Beschreibung:
Diese Funktion enumeriert alle vorhandenen Druckerports.

Parameter:
pNameErwartet den Namen des Systems, auf dem die Druckerports enumeriert werden sollen. Sollen auf demlokalen System die Ports enumeriert werden, dann kann hier "VBNullChar" übergeben werden.
LevelErwartet einen Wert der beschreibt, welcheArt von PORT_INFO-Struktur als Puffer übergeben wird. Geben Sie hier denWert "1" an, wenn als Puffer die PORT_INFO_1-Struktur verwendet wird. Andernfalls übergebenSie hier den Wert "2" für die PORT_INFO_2-Struktur.
pPortsErwartet ein Array von "PORT_INFO_X"-Strukturen, das genügend Arrayfelder beinhalten muss, um die Informationen aller Ports zu empfangen. Das X steht hier als Platzhalter für den gewähltenStrukturtyp.
cbBufErwartet die Größe des übergebenen Puffers in Bytes.
pcbNeededErwartet eineLong-Variable, die mit der Anzahl der in den Puffer kopierten Bytes gefüllt wird. Wird kein Puffer übergeben, so wird dieseVariable mit der Anzahl der benötigten Bytes gefüllt die der Puffer groß sein muss, um alle Informationen zu empfangen.
pcReturnedErwartet eineLong-Variable, die mit der Anzahl der in den Puffer kopierten "PORT_INFO_X"-Strukturen gefüllt wird. Das Xsymbolisiert in dem Falle den gewählten Strukturtyp.

Rückgabewert:
Ist die Funktion erfolgreich, so wird ein Wert "ungleich 0" zurückgegeben, andernfallswird "0" zurückgegeben. Für erweiterte Fehlerinformationen können Sie die GetLastError-Funktion aufrufen.

Beispiel:

Private Declare Function EnumPorts Lib "winspool.drv" _
  Alias "EnumPortsA"  ( _
  ByVal pName As String, _
  ByVal Level As Long, _
  pPorts As Any, _
  ByVal cbBuf As Long, _
  pcbNeeded As Long, _
  pcReturned As Long) As Long
Private Declare Function ConfigurePort Lib "winspool.drv" _
  Alias "ConfigurePortA" ( _
  ByVal pName As String, _
  ByVal hwnd As Long, _
  ByVal pPortName As String) As Long
Private Declare Function lstrlen Lib "kernel32" _
  Alias "lstrlenA" ( _
  ByVal lpString As Any) As Long
Private Declare Function lstrcpy Lib "kernel32" _
  Alias "lstrcpyA" ( _
  ByVal lpString1 As Any, _
  ByVal lpString2 As Any) As Long
 
Private Type PORT_INFO_2
  pPortName As Long
  pMonitorName As Long
  pDescription As Long
  fPortType As Long
  Reserved As Long
End Type
 
' PORT_INFO_2 fPortType-Konstanten
Private Const PORT_TYPE_WRITE = &H1 ' Schreiben auf dem Port ist möglich
Private Const PORT_TYPE_READ = &H2 ' Lesen des Ports ist möglich
Private Const PORT_TYPE_REDIRECTED = &H4 ' Der Port ist im Offlinedruck, Schema ist akteviert
Private Const PORT_TYPE_NET_ATTACHED = &H8 ' Der Drucker ist ein Netzwerkdrucker 
 
' eine der Standard Fehlerkonstanten
Private Const ERROR_CANCELLED = 1223
 
Dim Ports() As PORT_INFO_2
' String anhand eines Pointers ermitteln
Private Function PtrToString(ByVal StringPtr As Long) As String
  Dim TmpStr As String
 
  TmpStr = Space(lstrlen(StringPtr))
  Call lstrcpy(TmpStr, StringPtr)
 
  PtrToString = TmpStr
End Function
' Alle Ports ermitteln und Combobox damit füllen
Private Sub Form_Load()
  Dim Retval As Long, BufferSize As Long
  Dim CountPorts As Long
  Dim I As Integer
 
  ' Anzahl Ports ermitteln
  Retval = EnumPorts(vbNullChar, 2, ByVal 0&, 0&, BufferSize, CountPorts)
 
  ' Puffer erstellen und Portinfos ermitteln
  ReDim Ports(BufferSize / Len(Ports(0)) + 1)
  Retval = EnumPorts(vbNullChar, 2, Ports(0), Len(Ports(0)) *  _
  (UBound(Ports) + 1), BufferSize, CountPorts)
 
  ' Namen jedes Ports ermitteln
  For I = 0 To CountPorts - 1
    Combo1.AddItem PtrToString(Ports(I).pPortName)
  Next I
 
  If Combo1.ListCount < 0 Then
    Combo1.ListIndex = 0
  Else
    Command1.Enabled = False
  End If
End Sub
' Portinfos ausgeben
Private Sub Combo1_Click()
  With Ports(Combo1.ListIndex)
    Debug.Print "Port: " & PtrToString(.pPortName)
    Debug.Print "Beschreibung: " & PtrToString(.pDescription)
    Debug.Print "Monitor: " & PtrToString(.pMonitorName)
    Debug.Print vbTab & "Schreiben: " & CBool(PORT_TYPE_WRITE And .fPortType) 
    Debug.Print vbTab & "Lesen: " & CBool(PORT_TYPE_READ And .fPortType) 
    Debug.Print vbTab & "Netzwerkport: " &  _
    CBool(PORT_TYPE_NET_ATTACHED And .fPortType)
    Debug.Print vbTab & "Offlinedruck: " & CBool(PORT_TYPE_REDIRECTED  _
    And .fPortType)
    Debug.Print vbCrLf & "- - - - - - - - - - - - - - - - - - -"
  End With
End Sub
' Anschluss konfigurieren
Private Sub Command1_Click()
  Dim Retval As Long
 
  Retval = ConfigurePort(vbNullString, Me.hwnd, Combo1.Text)
  If Retval = 0 Then
    If Err.LastDllError = ERROR_CANCELLED Then
      MsgBox "Der Dialog wurde abgebrochen.", vbInformation,  _
      "Dialog geschlossen"
    Else
      MsgBox "Der Port ist nicht verfügbar.", vbInformation,  _
      "Fehler " & Err.LastDllError
    End If
  End If
End Sub

Diese Seite wurde bereits 9.397 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht 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