Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Mapear impresora de Red con WNetAddConnection2W (https://www.clubdelphi.com/foros/showthread.php?t=77442)

RaulChemical 26-01-2012 10:39:11

Mapear impresora de Red con WNetAddConnection2W
 
Hola!

Hace mucho que no escribía en el foro, pero ya no sé por donde tirar así que he decidido pedir ayuda.

Estoy intentando mapear una impresora de red usando WNetAddConnection2W. Recibe como parámetros un NetResource, passw, usuario, y un dwFlag (DWORD).
Le paso el net resource con esta estructura:
Código Delphi [-]
  NetResource.dwType := RESOURCETYPE_PRINT;
  LPTx := LPTx + 1;
  NetResource.lpLocalName  := PWideChar(WideString('LPT' + IntToStr(LPTx) + ':'));
  NetResource.lpRemoteName := PWideChar(WideString(NombreRecurso)); //  \\servidor\Impresora
  NetResource.lpProvider   := PWideChar(WideString(''));

Le paso el Password y Usuario en blanco.
Y como dwFlag le paso CONNECT_INTERACTIVE;


El problema que tengo es que me agrega el recurso y lo veo haciendo un net use desde la consola(cmd), pero el recurso no me aparece como impresora.

En otro proceso, busco las impresoras con:

Código Delphi [-]
  objWMIService := GetWMIObject('winmgmts:\\localhost\root\CIMV2');
  colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_Printer','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;

Y el recurso no me aparece.

Que me falta para que el recurso se me cree como impresora? He tirado de la ayuda me la msdn de la funcion WNetAddConnection2W y aparentemente todo es correcto.

Muchas gracias por todo.


Raúl.

olbeup 27-01-2012 08:33:27

Mira esto si te sirve.

Un saludo.

olbeup 27-01-2012 09:26:14

He realizado las prueba de captura de impresora en red y funciona correctamente cuando se le pasa el usuario y la contraseña:
Código Delphi [-]
...
var
  NetResource: TNetResource;
begin
  NetResource.dwType := RESOURCETYPE_PRINT;
  NetResource.lpLocalName := 'LPT5:';
  NetResource.lpRemoteName := '\\SERVIDOR\PDFCreator';
  NetResource.lpProvider := '';
  WNetAddConnection2(
    NetResource
    ,'1234'
    ,'Presupuestos'
    ,CONNECT_UPDATE_PROFILE);

Y para desconectar la impresora capturada:
Código Delphi [-]
WNetCancelConnection2('LPT5:', 1, TRUE);
Un saludo.

RaulChemical 27-01-2012 12:43:03

Pues tío, despues de no ser capaz de crear la impresora me fui por otro camino y al final lo he conseguido, pero tu solución me la apunto por si acaso....

El problema que tenía era que WNetAddConnection2W lanza "por debajo" un comando "net use \\Servidor\Impresora" que lo que hace es mapearla como recurso pero no la creaba como impresora de red.

Al final lo he hecho lanzando un vbscript:

Código:

Option Explicit
Dim objNetwork, strUNCPrinter, bForce, bUpdateProfile
strUNCPrinter = "\\Servidor\Impresora"
bForce = "True"
bUpdateProfile = "False"
Set objNetwork = CreateObject("WScript.Network")
objNetwork.AddWindowsPrinterConnection strUNCPrinter, bForce, bUpdateProfile
Wscript.Quit

Guardo el script a disco y lo ejecuto con un winexec:

Código Delphi [-]
WinExecAndWait32('cmd /ccscript ' + RutaScript);
DeleteFile(PAnsiChar(RutaScript));


Para eliminarla, el script es prácticamente igual, solo cambiando la linea en la que se añade la impresora (AddWindowsPrinterConnection) por:

Código:

objNetwork.RemovePrinterConnection strUNCPrinter, bForce, bUpdateProfile
El caso es que funciona. Espero que los de sistemas no me lo tiren para atrás...

De todas formas, muchas gracias por todo.

Saludos.


PD: Tenemos que hacer un grupo en Linked In del ClubDelphi...


La franja horaria es GMT +2. Ahora son las 21:00:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi