Ver Mensaje Individual
  #1  
Antiguo 06-09-2020
bismarck_sierra bismarck_sierra is offline
Miembro
 
Registrado: ene 2004
Ubicación: Morelia, Michoacán, México
Posts: 70
Reputación: 21
bismarck_sierra Va por buen camino
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
Responder Con Cita