AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mal wieder Drucker im Netzwerk
Thema durchsuchen
Ansicht
Themen-Optionen

Mal wieder Drucker im Netzwerk

Offene Frage von "frankg"
Ein Thema von frankg · begonnen am 15. Aug 2003 · letzter Beitrag vom 19. Aug 2003
Antwort Antwort
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#1

Mal wieder Drucker im Netzwerk

  Alt 15. Aug 2003, 13:54
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:
\\HOMER\HPLaserJ
Der Name des Druckers (Druckertreibers), den man über Printer.Printers ermitteln kann ist

Code:
\\homer\HP Laserjet 4000 Series PCL
Viele Grüsse und vielen Dank

Frank
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#2

Re: Mal wieder Drucker im Netzwerk

  Alt 19. Aug 2003, 14:22
Hallo!

Offensichtlich wusste niemand etwas mit meinem Posting anzufangen, daher habe ich mal die Ärmel hochgekrempelt und bin selbst zur Tat geschritten . 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:
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;
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

Code:
net use LPT1 \\homer\HPLaserJ
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).

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
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: Mal wieder Drucker im Netzwerk

  Alt 19. Aug 2003, 14:25
Wie wäre es, wenn du den vorherigen Post in die code-Library einträgst?
Wäre sicherlich nicht schlecht
Alexander
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#4

Re: Mal wieder Drucker im Netzwerk

  Alt 19. Aug 2003, 14:41
Zitat von alexander:
Wie wäre es, wenn du den vorherigen Post in die code-Library einträgst?
Wäre sicherlich nicht schlecht
Hi Alexander!

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
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#5

Re: Mal wieder Drucker im Netzwerk

  Alt 19. Aug 2003, 14:58
Oder so
Die code-Library muss ja auch richtig gefüllt werden
Alexander
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz