Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1292to1296
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
Inhaltsverzeichnis

Druckerport suchen

Druckerport suchen
20.01.2013 12:17:49
Franz
Hallo Fachleute,
ich suche den Port des Standarddruckers (bei mir ein "HP LaserJet M1120 MFP"), dazu gibt es verschiedene MÖglichkeiten, ich hab mächtig in der Recherche gesucht - und gefunden. Allerdings gibt's bei mir ein Problem, der richtige Port wird nicht erkannt:
Wenn ich im Druckerdialog den HP als aktiven Drucker einstelle und das mit dem Rekorder aufzeichne, bekomme ich:
Application.ActivePrinter = "HP LaserJet M1120 MFP auf Ne03:"
ABER:
beim Auslesen des Standarddruckers mit verschiedenen Codes, die ich in der Recherche gefunden habe, z. B. damit:
Option Explicit
Private Declare Function GetProfileString Lib "kernel32" _
Alias "GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long) _
As Long
Sub DruckerAnzeigen()
Dim PrinterName$, Driver$, Port$
Call GetStdPrinterName(PrinterName, Driver, Port)
'MsgBox "Standarddrucker: " & vbLf & PrinterName & vbLf & Driver & vbLf & Port
MsgBox PrinterName & " auf " & Port
End Sub
Private Sub GetStdPrinterName(PrinterName$, Driver$, Port$)
Dim Buffer$, r&, x&, y&
Buffer = Space(8192)
r = GetProfileString("windows", "Device", "", Buffer, Len(Buffer))
If r Then
Buffer = Mid(Buffer, 1, r)
x = InStr(Buffer, ",")
PrinterName = Mid(Buffer, 1, x - 1)
y = InStr(x + 1, Buffer, ",")
Driver = Mid(Buffer, x + 1, y - x - 1)
Port = Mid(Buffer, y + 1)
Else
PrinterName = ""
Driver = ""
Port = ""
End If
End Sub

wird als Port Ne02: ermittelt.
Wenn ich dann im Makro mit dem ermittelten "Port = Ne02:" die Anweisung
    Application.ActivePrinter = PrinterName & " auf " & Port

verwende, gibt's ne Fehlermeldung ("Anwendungs- oder objektdefinierter Fehler").
Setz ich davor noch:
    Port = "Ne03:"

dann stimmt's.
Wie kann ich den Port des Standarddruckers richtig ermitteln?
Danke schonmal und Grüße
Franz

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
P. S.: Hintergrund
20.01.2013 12:21:20
Franz
der Hintergrund ist:
nach dem Ab- und dann wieder Anstöpseln des Druckers vom PC ist der Druckerport nicht mehr zwangsläufig derselbe. Darum muss er jedesmal neu ermittelt werden........

AW: Druckerport suchen
20.01.2013 12:31:49
Anton
Hallo Franz,
vllt hilft dir das hier weiter.
mfg Anton

AW: Druckerport suchen
20.01.2013 12:46:03
Franz
Hallo Anton,
ja, vielen Dank, das ist schonmal super: Hier wird der HP mit dem aktuell richtigen Port "Ne03:" ermittelt.
Allerdings ist mir Dein Code zu hoch, und ich weiß nicht, wie ich aus der Liste aller Drucker nur den Standarddrucker herausnehmen kann. Kannst Du mir da bitte noch weiterhelfen?
Grüße
Franz

Anzeige
AW: Druckerport suchen
20.01.2013 12:49:23
Anton
Hallo Franz,
so?:
Option Explicit
Public Sub Drucker_mit_port()
Dim strDrucker As String, oReg As Object
Dim gefunden As Boolean, strKeyPath As String
Dim arrValueNames, i As Integer, strValue As String
Const HKEY_current_user = &H80000001
strDrucker = "HP" 'anpassen
gefunden = False
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  _
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
oReg.EnumValues HKEY_current_user, strKeyPath, arrValueNames
For i = 0 To UBound(arrValueNames)
If InStr(1, arrValueNames(i), strDrucker)  0 Then
oReg.GetStringValue HKEY_current_user, strKeyPath, arrValueNames(i), strValue
MsgBox arrValueNames(i) & Replace(strValue, "winspool,", " auf ")
gefunden = True
End If
Next
Set oReg = Nothing
If gefunden = False Then MsgBox "Drucker " & strDrucker & " ist nicht installiert!"
End Sub  

mfg Anton

Anzeige
noch besser, aber....
20.01.2013 13:08:50
Franz
Hallo Anton,
ja, gut. Aber jetzt ist ja "HP" vorgegeben. Der Code funktioniert aber halt nur wenn der HP angeschlossen ist, ob als Standarddrucker oder nicht.
Gibt es einen neuen Drucker (was bei meinem alten HP ja mal der Fall sein wird :-))), muss der Code angepasst werden.
Auch auf einem anderen Rechner mit einem anderen Drucker als Standard klappt der Code nicht, müsste erst angepasst werden.
Gibt es nicht vielleicht die Möglichkeit, aus der mit Deinem Code erstellten Liste der ermittelten Drucker den Standarddrucker rauszufiltern, egal was für einer das sein mag?
Fragende Grüße
Franz

Anzeige
Standarddrucker mit port
20.01.2013 13:23:27
Anton
Hallo Franz,
noch eine Variante:
Public Sub standarddrucker_mit_port()
Dim objWMI As Object, objItem As Object, WSHShell As Object
Set WSHShell = CreateObject("WScript.Shell")
Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
ExecQuery("Select * from Win32_Printer where default = true")
For Each objItem In objWMI
MsgBox objItem.Name & Replace(WSHShell.RegRead _
("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices\" & _
objItem.Name), "winspool,", " auf ")
Next
Set objWMI = Nothing
Set WSHShell = Nothing
End Sub

mfg Anton

Anzeige
AW: Standarddrucker mit port
20.01.2013 13:34:31
Franz
Hallo Anton,
super, ganz vielen Dank, das funktioniert so, wie ich es brauchen kann
(mal schaun, ob ich's auch verstehen kann...?)
Grüße
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige