5 de mai. de 2005

Qual a porta da impressora?

No fórum ClubeDelphi apareceu uma dúvida hoje sobre como determinar em qual porta está ligada uma impressora. Não tem um jeito fácil de determinar isso...

1 uses 2 Printers, 3 WinSpool, 4 ... 5 6 function GetCurrentPrinterHandle: THandle; 7 var 8 Device, Driver, Port: array[0..255] of Char; 9 Mode: THandle; 10 begin 11 Printer.GetPrinter(Device, Driver, Port, Mode); 12 if not OpenPrinter(@Device, Result, nil) then 13 RaiseLastWin32Error; 14 end; 15 16 function GetCurrentPrinterPort: string; 17 var 18 Buffer: array of Char; 19 Size: DWORD; 20 H: THandle; 21 begin 22 H := GetCurrentPrinterHandle; 23 try 24 GetPrinter(H, 2, nil, 0, @Size); 25 SetLength(Buffer, Size); 26 try 27 GetPrinter(H, 2, @Buffer[0], Size, @Size); 28 Result := PPrinterInfo2(@Buffer[0])^.pPortName; 29 finally 30 Buffer := nil; 31 end; 32 finally 33 ClosePrinter(H); 34 end; 35 end;

A função GetCurrentPrinterPort retorna o nome da porta onde a impressora corrente está conectada. Por exemplo, se a impressora corrente estiver conectada na porta LPT1, GetCurrentPrinterPort retorna 'LPT1:'.