Guest User

Untitled

a guest
Jan 21st, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. type
  2. TNetResourceArray = TArray<TNetResource>;
  3.  
  4. function EnumerateContainedPrinters(const AContainer: TNetResource): TNetResourceArray;
  5. var
  6. LResult, LBufferSize: DWORD;
  7. LEnumHandle: THandle;
  8. LNetResources: TNetResourceArray;
  9. I: Integer;
  10. LEntries : Longint;
  11. begin
  12. LEntries := -1;
  13. LBufferSize := 16384;
  14. LResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_PRINT, RESOURCEUSAGE_CONNECTABLE, @AContainer, LEnumHandle);
  15. if LResult = NO_ERROR then
  16. try
  17. SetLength(LNetResources, LBufferSize div SizeOf(TNetResource));
  18. LResult := WNetEnumResource(LEnumHandle, DWORD(LEntries), @LNetResources[0], LBufferSize);
  19. SetLength(Result, LEntries);
  20. for I := 0 to LEntries - 1 do
  21. Result[I] := LNetResources[I];
  22. finally
  23. WNetCloseEnum(LEnumHandle);
  24. end;
  25. end;
  26.  
  27. function EnumeratePrinters: TNetResourceArray;
  28. var
  29. LResult, LBufferSize: DWORD;
  30. LEnumHandle: THandle;
  31. LNetResources, LPrinters: TNetResourceArray;
  32. I: Integer;
  33. LEntries : Longint;
  34. begin
  35. LEntries := -1;
  36. LBufferSize := 16384;
  37. LResult := WNetOpenEnum(RESOURCE_CONTEXT, RESOURCETYPE_PRINT, 0, nil, LEnumHandle);
  38. if LResult = NO_ERROR then
  39. try
  40. SetLength(LNetResources, LBufferSize div SizeOf(TNetResource));
  41. LResult := WNetEnumResource(LEnumHandle, DWORD(LEntries), @LNetResources[0], LBufferSize);
  42. for I := 0 to LEntries - 1 do
  43. begin
  44. if (LNetResources[I].dwUsage = RESOURCEUSAGE_CONTAINER) and (LNetResources[I].dwType = RESOURCETYPE_PRINT) then
  45. Result := Concat(Result, EnumerateContainedPrinters(LNetResources[I]));
  46. end;
  47. finally
  48. WNetCloseEnum(LEnumHandle);
  49. end;
  50. end;
  51.  
  52. procedure TForm1.Button1Click(Sender: TObject);
  53. var
  54. LPrinter: TNetResource;
  55. begin
  56. for LPrinter in EnumeratePrinters do
  57. begin
  58. if LPrinter.dwType = 2 then
  59. ListBox1.Items.Add(Format('%s (%s)', [LPrinter.lpComment, LPrinter.lpRemoteName]));
  60. end;
  61. end;
Add Comment
Please, Sign In to add comment