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