Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Cómo renombrar impresora (https://www.clubdelphi.com/foros/showthread.php?t=94858)

bismarck_sierra 06-09-2020 02:47:00

Cómo renombrar impresora
 
Que tal

Les comparto la solución para cambiar el nombre de una impresora que no encontraba la información en internet y gracias al grupo de WhatsApp Delphi en Español (https://chat.whatsapp.com/KZkM9d8k8gQ8u30a085y6k) donde nuestro bien conocido amigo Juan Antonio Castillo (https://jachguate.wordpress.com/) me apoyó a encontrar la forma de hacerlo.

Código Delphi [-]
uses
  System.Variants, System.SysUtils, Winapi.ActiveX, System.Win.ComObj, WinSpool, Windows;

function RenombrarImpresora(ANombreActual, ANombreNuevo : string) : boolean;
var
  lHandle         : THandle;
  lpPrinterInfo   : PPrinterInfo2;
  lPrinterDefault : TPrinterDefaults;
  lSize           : DWORD;
begin
  Result := False;
  lPrinterDefault.pDatatype := nil;
  lPrinterDefault.pDevMode := nil;
  lPrinterDefault.DesiredAccess := PRINTER_ALL_ACCESS;
  if OpenPrinter(PChar(ANombreActual), lHandle, @lPrinterDefault) then
  begin
    try
      lSize := 0;
      GetPrinter(lHandle, 2, nil, lSize, @lSize);
      lpPrinterInfo := AllocMem(lSize);
      try
        if not GetPrinter(lHandle, 2, lpPrinterInfo, lSize, @lSize) then
          RaiseLastOSError;
        lpPrinterInfo.pPrinterName := PChar(ANombreNuevo);
        if not SetPrinter(lHandle, 2, lpPrinterInfo, 0) then
          RaiseLastOSError;
      finally
        FreeMem(lpPrinterInfo);
      end;
      Result := true;
    finally
      ClosePrinter(lHandle);
    end;
  end
  else
    RaiseLastOSError;
end;

Saludos
Bismarck

Casimiro Notevi 06-09-2020 10:31:23

^\||/^\||/^\||/

jachguate 06-09-2020 10:47:21

Cita:

Empezado por bismarck_sierra (Mensaje 538422)
Que tal
donde nuestro bien conocido amigo Juan Antonio Castillo

Hombre Bismark, gracias por el crédito. Buen pretexto para dar una vuelta por el Club, a dónde no venía hace un buen tiempo. Ah, cuantos recuerdos... ¡un saludo a todos por acá! ;)

ecfisa 06-09-2020 16:39:36

¡ Muchas gracias por el aporte !

Saludos :)

Al González 07-09-2020 01:56:50

Gracias, Bismarck. Veo que ahí lo llevas. ;)

Esto le puede servir a mucha gente.

Tono: Un placer leerte de nuevo. Por cierto, ahora estoy un poco más cerca de tu país. :)

Un abrazo por los buenos tiempos.

jachguate 07-09-2020 08:46:43

Cita:

Empezado por Al González (Mensaje 538433)
Tono: Un placer leerte de nuevo. Por cierto, ahora estoy un poco más cerca de tu país. :)

Un abrazo por los buenos tiempos.

Igualmente Al, tiempo sin saber de tí. ¿Por donde andas?

Un saludo cordial.

Neftali [Germán.Estévez] 07-09-2020 13:24:13

Hola.
Veo que el tema ya está solucionado, aun así comenar que el cambio de nombre (al igual que otras operaciones) también se puede hacer a través de WMI.
La clase que permite hacerlo es Win32_Printer.

Uno de los métodos de que dispone es el método RenamePrinter.

La librería GLibWMI dispone de un componente para hacerlo y una de las demos es precísamente sobre esta clase y haciendo funciona ese método (por si interesa).



La franja horaria es GMT +2. Ahora son las 21:51:03.

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