Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi alle Drucker netzweit (https://www.delphipraxis.net/8703-alle-drucker-netzweit.html)

fredi 10. Sep 2003 14:47


alle Drucker netzweit
 
ich möchte alle freigegebene drucker eines netzwerkes in einer liste darstellen hat dazu jemand eine lösung ?

danke für eure Hilfe
fredi

Christian Seehase 10. Sep 2003 14:57

Re: alle Drucker netzweit
 
Moin fredi,

such' hier mal nach Hier im Forum suchenWNetEnumResource
Damit sollte das gehen.

fredi 11. Sep 2003 09:08

Re: alle Drucker netzweit
 
danke für den Hinweis,
mit derfolgenden procedure bekomme zwar den Computername, auf dem der jeweilige Drucker darnhängt und freigegeben wurde, jedoch keinen Printernamen. Ich würde gerne mit dem ermittelten Printernamen die Printerconfiguration auslesen und in einem grid darstellen, geht das ?

fredi
Delphi-Quellcode:
procedure TMainForm.GetNetPrinters;
var
  dwResult : DWord;
  hEnum : DWord;
  anrStruct : array [1..512] of NETRESOURCE;
  dwCount : DWord;
  dwBufferSize : DWord;
  lIndex : LongInt;
begin
  try
    FillChar(anrStruct,SizeOf(anrStruct),0);
    anrStruct[1].lpRemoteName := PChar('CDNET');
    dwResult := WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_PRINT, 0, @anrStruct[1], hEnum);
    if dwResult = NO_ERROR then
    begin
      Memo1.Lines.Clear;
      dwBufferSize := SizeOf(anrStruct);
      dwCount := DWord(-1);
      dwResult := WNetEnumResource(hEnum, dwCount, @anrStruct[1],
        dwBufferSize);
      for lIndex := 1 to dwCount do
      begin
        Memo1.Lines.Add(anrStruct[lIndex].lpRemoteName);
      end;
    end;
  finally
    WNetCloseEnum(hEnum);
  end;
end;
[edit=Luckie]Delphi-Tags eingefügt. Bitte selber dran denken. Danke. Mfg, Luckie[/edit]

Christian Seehase 11. Sep 2003 12:19

Re: alle Drucker netzweit
 
Moin Fredi,

grundsätzlich sollte man WNetEnumResource (usw.) rekursiv benutzen, da man nicht sicher sein kann, wie viele Ebenen die Struktur umfasst.
Eine Resource selber sollte dadurch gekennzeichnet sein, dass Usage <> RESOURCEUSAGE_CONTAINER ist.
Dann bliebe nur noch die Prüfung, ob es sich nun um RESOURCETYPE_DISK oder PRINT handelt.

Wenn Du also eine Liste mit Rechnern erhältst, müsste die nächste Ebene die Resourcen enthalten (Shares oder Printer).

Ich bin übrigens gerade zufällig über eine API gestolpert, die das ganze wahrscheinlich einfacher macht: EnumPrinters.
Schau Dir die doch mal im PSDK oder im MSDN einfach mal an.

fredi 11. Sep 2003 14:00

Re: alle Drucker netzweit
 
Hallo Christian,
schau ich mir an, aber leider erst in zwei wochen, gehe jetzt auf urlaub.

danke für deine hilfe
fredi


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 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