Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2012
RaulChemical RaulChemical is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 59
Poder: 21
RaulChemical Va por buen camino
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.
__________________
ash nazg durbatulûk
ash nazg gimbatul
ash nazg thrakatulûk
agh burzum-ishi krimpatul
Responder Con Cita
  #2  
Antiguo 27-01-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Mira esto si te sirve.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 27-01-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #4  
Antiguo 27-01-2012
RaulChemical RaulChemical is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 59
Poder: 21
RaulChemical Va por buen camino
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...
__________________
ash nazg durbatulûk
ash nazg gimbatul
ash nazg thrakatulûk
agh burzum-ishi krimpatul
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
seleccion de impresora y letra de la impresora emeceuy Impresión 6 13-08-2017 14:11:05
Bug en mi impresora soler Varios 14 09-05-2008 22:48:05
Impresora TM-L60-II xio Impresión 4 13-11-2007 11:07:24
Impresora tiel API de Windows 4 10-04-2006 20:39:47
Impresora LX-300 AndyLupa Impresión 3 25-01-2006 19:30:36


La franja horaria es GMT +2. Ahora son las 00:17:57.


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
Copyright 1996-2007 Club Delphi