![]() |
Mal wieder Drucker im Netzwerk
Hallo!
Ich habe da mal eine Frage zu Druckern im Netzwerk. Wie mal alle im Netzwerk verfügbaren Druckershares ermittelt ist ja hier irgendwo recht gut an anderer Stelle erklärt. Das funktioniert bei mir auch super. Meine Frage ist nun, wie kann ich auf dem aktuellen PC ermitteln, welche der Netzwerk-Shares auch wirklich als Drucker eingerichtet sind. Diese zunächst trivial scheinende Frage ist nicht so leicht zu beantworten, da sich der Name des installierten Druckers von dem der Druckerfreigabe im Netzwerk unterscheidet. Irgendwo in den Informationen eines auf einem PC installierten Druckertreibers muss doch auch eine Zuordnung des Druckertreibers zur Netzwerkshare verfügbar sein. Wo finde ich das? Um das Problem noch einmal an einem Beispiel zu verdeutlichen: Der Name der Netzwerkfreigabe, den ich über das Netzwerk ermitteln kann ist
Code:
Der Name des Druckers (Druckertreibers), den man über Printer.Printers ermitteln kann ist
\\HOMER\HPLaserJ
Code:
Viele Grüsse und vielen Dank
\\homer\HP Laserjet 4000 Series PCL
Frank |
Re: Mal wieder Drucker im Netzwerk
Hallo!
Offensichtlich wusste niemand etwas mit meinem Posting anzufangen, daher habe ich mal die Ärmel hochgekrempelt und bin selbst zur Tat geschritten :coder:. Eine Zuordnung zwischen lokalen Gerätenamen und Netzwerkshares kann man über die Win32-API Funktion WNetGetConnection erhalten. Dazu habe ich dann mal flugs eine kleine Routine geschrieben:
Delphi-Quellcode:
Diese Funktion funktioniert auch sehr gut allerdings mit einer Einschränkung. Netzwerkshares werden nur gegen physikalische Gerätenamen aufgelöst, das soll heissen, das ich nur dann die Share eines Druckers ermitteln kann, wenn dieser z.B. mit dem LPT1 Anschluss verbunden ist. Normalerweise scheint das aber unter Windows XP nicht der Fall zu sein. Rufe ich das Programm einfach so auf ohne dass eine Verbindung hergestellt ist, so liefert mir WNetGetConnection den Wert 2 (ERROR_FILE_NOT_FOUND) zurück. Verbinde ich den Drucker einfach per
function ResolveShareName (LocalDevice : String) : String;
var pLocName : PChar; pShareName : PChar; FuncResult : DWORD; BufLength : Cardinal; begin // Speicher für die Strings allozieren! pLocName := StrAlloc(255); pShareName := StrAlloc(255); // String in PString kopieren StrPCopy (pLocName, LocalDevice); BufLength := 255; FuncResult := WNetGetConnection(pLocName,pShareName,BufLength); if FuncResult <> NO_ERROR then result := 'ERROR' else result := pShareName; // aufräumen! StrDispose (pShareName); StrDispose (pLocName); end;
Code:
so funktioniert die Funktion hervorragend und liefert für den Übergabeparameter LPT1 auch korrekt \\homer\HPLaserJ zurück. Damit habe ich aber leider am Ziel vorbeigeschossen, da ich ja nicht wissen wollte welchem Geräteanschluss eine Netzwerk-Share zugeordnet ist sondern ich wollte ja ursprünglich wissen, auf welcher Netzwerkshare ein Druckertreiber, der im System installiert ist druckt (also im Prinzip das was man über TPrinter.Printers bekommt).
net use LPT1 \\homer\HPLaserJ
Kennt sich hier im Forum wirklich niemand mit dieser Thematik aus? Wie sieht das überhaupt aus, kann ich unter Windows 2000/XP nicht eigentlich einfach eine Netzwerkshare an einen Geräteanschluss binden (unabhängig davon, ob der Druckertreiber für diesen Drucker installiert ist oder nicht) und dann dort drucken? Wenn ich richtig informiert bin, dann müsste das doch funktionieren, weil das Betriebssystem erkennt, dass kein Druckertreiber installiert ist und demzufolge den Druckertreiber vom (Druck)Server herunterläd. Ich hoffe, dass nicht alle Mit-Windows-Im-Netzwerk-Drucken-Experten im Urlaub sind und jemand weiss, wie das hier funktioniert. Viele Grüsse und vielen Dank Frank |
Re: Mal wieder Drucker im Netzwerk
Wie wäre es, wenn du den vorherigen Post in die code-Library einträgst?
Wäre sicherlich nicht schlecht ;-) |
Re: Mal wieder Drucker im Netzwerk
Zitat:
Kann ich machen. Ich denke aber, ich warte noch mal ein bisschen, was hier sonst noch so kommt. Das sammel ich dann und wenn das Problem gelöst ist schreibe ich einen Artikel für die Code-Library, der die ganze Breite des Problems umfasst. Viele Grüsse Frank |
Re: Mal wieder Drucker im Netzwerk
Oder so ;-)
Die code-Library muss ja auch richtig gefüllt werden :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz