Best Answer escafandra , 14 August 2015 - 06:53 AM
Esta función resuelve la IP encontrando el nombre de la impresora, a partir de ahí puedes usar ese nombre para imprimir.
uses Windows, SysUtils, Winsock, Winspool; type APrinterInfo2 = array [0..0] of TPrinterInfo2; PAPrinterInfo2 = ^APrinterInfo2; function GetPrinterName(IP: String): String; var Data: TWSADATA; He: Phostent; Addr: integer; List: PAPrinterInfo2; //PPrinterInfo2; SizeNeeded, NumItems, Item: DWORD; begin Result:= ''; if WSAStartup(MAKEWORD(1, 1), Data) = 0 then begin Addr:= inet_addr(PCHAR(IP)); if Addr <> INADDR_NONE then begin He:= gethostbyaddr(@Addr, sizeof(Addr), AF_INET); if He <> nil then Result:= He.h_name; end; WSACleanup; end; if Result <> '' then begin if pos('.', Result) > 0 then Result:= copy(Result, 1, pos('.', Result)-1); EnumPrinters(PRINTER_ENUM_LOCAL, nil, 2, nil, 0, SizeNeeded, NumItems); GetMem(List, SizeNeeded); if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 2, List, SizeNeeded, SizeNeeded, NumItems) then begin for Item:= 0 to NumItems-1 do begin if List[Item].pPortName = Result then begin Result:= List[Item].pPrinterName; break; end; end; end; FreeMem(List); end; end;
Saludos. Go to the full post










