Einzelnen Beitrag anzeigen

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