Anzeige
Archiv - Navigation
692to696
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
692to696
692to696
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Druckerstatus

Druckerstatus
13.11.2005 23:12:29
Nepumuk
Hi @all,
kann mal eine/einer das kleine Makro testen? Ich habe nur virtuelle Drucker angeschlossen (die anderen sind entweder defekt bzw. die Netzwerkkarte ist im Eimer) und komme darum nicht dahinter, ob bei einem Drucker der Offline bzw. ausgeschaltet ist, ein anderer Status zurückgeliefert wird. Ich bekomme immer nur 0 zurück.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

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, _
    ByRef pPrinterEnum As Long, _
    ByVal cdBuf As Long, _
    ByRef pcbNeeded As Long, _
    ByRef pcReturned As Long) As Long

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32

Private Type ACL
    AclRevision As Byte
    Sbz1 As Byte
    AclSize As Integer
    AceCount As Integer
    Sbz2 As Integer
End Type

Private Type SECURITY_DESCRIPTOR
    Revision As Byte
    Sbz1 As Byte
    Control As Long
    Owner As Long
    Group As Long
    Sacl As ACL
    Dacl As ACL
End Type

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_1 '4
    flags As Long
    pDescription As String
    pName As String
    pComment As String
End Type

Private Type PRINTER_INFO_2 '21
    pServerName As String
    pPrinterName As String
    pShareName As String
    pPortName As String
    pDriverName As String
    pComment As String
    pLocation As String
    pDevmode As DEVMODE
    pSepFile As String
    pPrintProcessor As String
    pDatatype As String
    pParameters As String
    pSecurityDescriptor As SECURITY_DESCRIPTOR
    Attributes As Long
    Priority As Long
    DefaultPriority As Long
    StartTime As Long
    UntilTime As Long
    Status As Long
    cJobs As Long
    AveragePPM As Long
End Type

Private Type PRINTER_INFO_3 '1
    pSecurityDescriptor As SECURITY_DESCRIPTOR
End Type

Private Type PRINTER_INFO_4 '3
    pPrinterName As String
    pServerName As String
    Attributes As Long
End Type

Private Type PRINTER_INFO_5 '5
    pPrinterName As String
    pPortName As String
    Attributes As Long
    DeviceNotSelectedTimeout As Long
    TransmissionRetryTimeout As Long
End Type

Private Const PRINTER_ENUM_LOCAL = &H2

Public Sub Test()
    Dim longbuffer() As Long, printinfo() As PRINTER_INFO_2, numbytes As Long
    Dim numneeded As Long, numprinters As Long, c As Integer, RetVal As Long
    numbytes = 3076
    Redim longbuffer(0 To numbytes / 4) As Long
    RetVal = EnumPrinters(PRINTER_ENUM_LOCAL, "", 2, longbuffer(0), numbytes, _
        numneeded, numprinters)
    If RetVal = 0 Then
        numbytes = numneeded
        Redim longbuffer(0 To numbytes / 4) As Long
        RetVal = EnumPrinters(PRINTER_ENUM_LOCAL, "", 2, longbuffer(0), numbytes, _
            numneeded, numprinters)
        If RetVal = 0 Then MsgBox "Fehler bei der Druckersuche." & vbLf & _
            "Programmabbruch.", 16, "Fehlermeldung": End
    End If
    If numprinters 0 Then Redim printinfo(0 To numprinters - 1)
    For c = 0 To numprinters - 1
        printinfo(c).pPrinterName = Space(lstrlen(longbuffer(21 * c + 1)))
        RetVal = lstrcpy(printinfo(c).pPrinterName, longbuffer(21 * c + 1))
        printinfo(c).Status = longbuffer(21 * c + 18)
    Next
    For c = 0 To numprinters - 1
        MsgBox "Der Status des Druckers: " & printinfo(c).pPrinterName & _
            " ist: " & printinfo(c).Status, 64, "Information"
    Next
End Sub

Gruß
Nepumuk

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Druckerstatus
13.11.2005 23:20:57
Luschi
Hallo Nepumuk,
lokal angeschlossener Drucker: Lexmark Z54 per USB
egal ob ein- oder ausgeschalten: Ergebnis = 0
Gruß von Luschi
aus klein-Paris
AW: Druckerstatus
13.11.2005 23:30:55
Nepumuk
Hi @all,
wenn ihr über Start - Einstellungen - Drucker den Status anschaut, steht da auch "Bereit", wenn der Drucker ausgeschaltet ist? Mal über Ansicht - Aktualisieren den aktuellen Zustand ermitteln!
Gruß
Nepumuk

AW: Druckerstatus
13.11.2005 23:36:12
PeterW
Hallo Nepumuk,
beim ausgeschalteten Drucker ist der Status offline. Per Makro immer noch 0.
Gruß
Peter
AW: Druckerstatus
13.11.2005 23:48:30
Hübi
Hi Nepumuk,
bei mir sowohl bei lokalen als auch Netzwerkdruckern Druckerstatus immer "Bereit", auch wenn er physisch getrennt ist.
Gruß Hübi
Anzeige
AW: Druckerstatus neuer Test
13.11.2005 23:56:48
Nepumuk
Hi @all,
und was zeigt dieses Makro an?
Public Sub test()
    Dim objWMI As Object, objItem As Object
    'an Stelle von XXX den Druckernamen einsetzen !!!
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
        ExecQuery("Select * from Win32_Printer where Name='XXX'")
    For Each objItem In objWMI
        Debug.Print objItem.Status
    Next
    Set objWMI = Nothing
End Sub

Den Druckernamen entnemt ihr aus Start - Einstellungen - Drucker.
Bei mir steht z.B.
Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
    ExecQuery("Select * from Win32_Printer where Name='Fax'")

Gruß
Nepumuk

Anzeige
AW: Druckerstatus neuer Test
14.11.2005 00:15:37
Hübi
Hi Nepumuk,
immer "Unknown", obwohl ich die Druckernamen per C&P aus den Eigenschaften übernommen habe.
Gruß Hübi
AW: Druckerstatus
13.11.2005 23:58:35
HansH
Moin Nepumuk,
ganz ehrlich, sehe kein "Bereit". Ob mit oder ohne Druckerkabel, ob Drucker aus oder ein, keine Veränderungen. Auch deine Frage nach Ansicht usw. bringt keine neuen Erkenntnisse.
Gruß
Hans
AW: Druckerstatus
14.11.2005 00:01:55
Nepumuk
Hallo Hans,
sieht das bei dir nicht so aus?
Userbild
Gruß
Nepumuk

AW: Druckerstatus
14.11.2005 00:09:15
HansH
Hallo Nepumuk,
habe Ansicht geändert, also dann so wie bei dir , aber dann Fax und aktueller Drucker "Bereit". Nur Drucker mit "Haken".
Gruß
Hans
Anzeige
AW: Druckerstatus
13.11.2005 23:25:09
PeterW
Hallo Nepumuk,
bekomme auch immer 0, egal ob die (realen) Drucker ein- oder ausgeschaltet sind. Dass es sich um USB-Drucker handelt dürfte nicht die entscheidende Rolle spielen, oder?
Gruß
Peter
AW: Druckerstatus
13.11.2005 23:27:48
Hübi
Hi Nepumuk,
bei allen lokalen und Netzwerkdruckern immer 0.
Gruß Hübi
AW: Druckerstatus
13.11.2005 23:28:11
HansH
Moin Nepumuk,
alle Meldungen gleich 0. Auch ohne Anschluss Druckerkabel und ohne Drucker ob an oder aus.
Gruß
Hans
AW: Druckerstatus
13.11.2005 23:30:44
HansH
Moin Nepumuk,
alle Meldungen gleich 0. Auch ohne Anschluss Druckerkabel und ohne Drucker ob an oder aus.
Gruß
Hans
AW: Druckerstatus
16.11.2005 15:43:12
Norbi
Hallo zusammen,
bin auf meiner Recherche zum Druckerstatus auf Eure Nachrichten im Forum gestoßen.
Habe unter folgendem Link ferner etwas zu diesem Thema, jedoch für VB gefunden:
http://www.vbarchiv.net/archiv/tipp_1228.html
Bin jedoch nicht der Experte, der dies für VBA umsetzen könnte, hätte jedoch selbst ein großes Interesse an einer entsprechendne VBA-Lösung.
Falls dies jemand umsetzen kann, wäre ich für ien kurze Info dankbar!
Gruß
Norbi
Anzeige
AW: Druckerstatus
16.11.2005 17:31:32
Nepumuk
Hallo Norbi,
ich hab da noch nicht weiter gemacht. Aber versuch mal folgendes Makro:
Public Sub test()
    Dim objWMI As Object, objItem As Object, i, c
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
        ExecQuery("Select * from Win32_Printer where Name='Fax'")
    On Error Resume Next
    For Each objItem In objWMI
        For Each i In objItem.properties_
                c = c + 1
            Cells(c, 1) = i.Name
            Cells(c, 2) = i.Value
        Next
    Next
    Set objWMI = Nothing
End Sub

Lass das mal mit deinem Drucker laufen. Einmal wenn er Online und einmal wenn er Offline ist. Das sollte eigentlich unter "PrinterStatus" verschiedene Werte auswerfen. Bei mir kommt einmal die 3 (=Leerlauf) und einmal 7 (=Offline). Wenn du das bestätigen kannst, dann schreib ich dir das Makro um, so dass nur dieser Wert geprüft wird.
Gruß
Nepumuk

Anzeige
AW: Druckerstatus
16.11.2005 21:20:43
PeterW
Hallo Nepumuk,
hab hier mit WinXPpro und Excel 2003 probiert. Unterschiede zwischen Drucker EIN und Drucker AUS gibt es nur bei zwei Eigenschaften:
Attributes: 844 (EIN) 1868 (AUS)
WorkOffline: FALSCH (EIN) WAHR (AUS)
Vielleicht hilft es ja weiter.
Gruß
Peter
AW: Druckerstatus
16.11.2005 21:26:17
HansH
Hallo Nepumuk,
wenn zur Klärung beiträgt:
Bei mir mit Office 2000 bleibt die 3 ob off- oder online.
Gruß
Hans
AW: Druckerstatus
16.11.2005 22:46:37
Nepumuk
Hi,
ich hab das mit einem Netzwerkdrucker versucht. Da gibt es eventuell Unterschiede. Aber Peter hat das ja jetzt geklärt, wo ich ansetzen muss. Also nochmal vielen Dank für's testen.
Gruß
Nepumuk
Anzeige
AW: Druckerstatus
17.11.2005 11:30:42
norbi
Hi Nepumuk,
Vielen Dank für Deine Reaktion, kann jedoch leider mit Deinem neuen Makro "nichts anfangen".
Wenn ich dies starte passiert bei mir nichts. Vielleicht hab ich da was nicht kapiert ?
Wo müßte ich dies einbauen, und wo sollte eine Reaktion kommen ?
Viele Grüße
Norbi
AW: Druckerstatus
17.11.2005 15:53:47
Nepumuk
Hallo Norbi,
welches Betriebssystem hast du? WMI funktioniert ohne nachrüsten WinNT, Win2000 und XP.
Gruß
Nepumuk

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige