Buenas. Tengo una impresora de red en la LAN. La misma tiene una IP fija.
Quisiera desde mi aplicación Delphi enviar una impresión hacia ella utilizando la dirección IP.
Utilizo QReport y Delphi XE5.
Gracias.
Santiago.
Enviar una impresión a una impresora de Red
#1
Escrito 13 agosto 2015 - 08:05
#2
Escrito 13 agosto 2015 - 10:26
Hola
Quiero entender que: ¿Quiéres enviar la impresión directamente sin tener la impresora instalada localmente?
Saludos
#3
Escrito 13 agosto 2015 - 11:13
Hola
Quiero entender que: ¿Quiéres enviar la impresión directamente sin tener la impresora instalada localmente?
Saludos
No, por supuesto que no. La impresora está instalada localmente.
En este lugar me piden que haya un plan de contingencia rápido acerca de impresoras, si se rompe una, la reemplazamos por otra rápidamente. En favor de ello tengo una impresora de red con una IP fija.
Si le pasa algo a esa máquina, la reemplazo por otra que tengo lista, le pongo la misma IP fija y listo, sigo sin problemas.
El drama es que en este punto Delphi me pide el nombre de la impresora y no una dirección IP.
Cuando hago cambios de impresora la segunda tiene que tener otro nombre, ¿o no?, y tendría que reconfigurar todas las estaciones para que impriman en la nueva. La idea es que no sea así, que solamente cambiando la impresora y poniéndole la misma IP fija todos sigan imprimiendo sin drama.
Espero haber sido claro.
Santiago.
#4
Escrito 13 agosto 2015 - 02:31
Se me ocurren dos opciones:
1). Matricular el nombre de la impresora en uso en un archivo de configuración. Este archivo puede ser compartido en red para que la aplicación cliente lo lea cuando se inicie.
2). Utilizar un comando de red para conocer el nombre del host por medio de su IP, por ejemplo nbtstat -a 192.168.1.100. De pronto en las utilerias TCP/IP de Delphi puedes encontrar algún componente que te haga lo mismo.
Saludos
#5
Escrito 14 agosto 2015 - 06:53
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.