Как изменить порт для принтера?

Previous  Top  Next

    
 

 

 

Code:

uses

WinSpool;

 

{ Function SetPrinterToPort

Parameters :

   hPrinter: handle of printer to change, obtained from OpenPrinter

   port: port name to use, e.g. LPT1:, COM1:, FILE:

Returns:

   The name of the previous port the printer was attached to.

Description:

   Changes the port a printer is attached to using Win32 API functions.

               The changes made are NOT local to this process, they will affect all

               other processes that try to use this printer! It is recommended to set the

               port back to the old port returned by this function after

               the end of the print job.

Error Conditions:

  Will raise EWin32Error exceptions if SetPrinter or GetPrinter fail.

Created:

   21.10.99 by P. Below}

 

function SetPrinterToPort(hPrinter: THandle; const port: string): string;

var

pInfo: PPrinterInfo2;

bytesNeeded: DWORD;

begin

{Figure out how much memory we need for the data buffer. Note that GetPrinter is

supposed to fail with a specific error code here. The amount of memory will

       be larger than Sizeof(TPrinterInfo2) since variable amounts of data are appended

       to the record}

SetLastError(NO_ERROR);

GetPrinter(hPrinter, 2, nil, 0, @bytesNeeded);

if GetLastError <> ERROR_INSUFFICIENT_BUFFER then

   RaiseLastWin32Error;

pInfo := AllocMem(bytesNeeded);

try

   if not GetPrinter(hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded) then

     RaiseLastWin32Error;

   with pInfo^ do

   begin

     Result := pPortname;

     pPortname := @port[1];

   end;

   if not SetPrinter(hPrinter, 2, pInfo, 0) then

     RaiseLastWin32Error;

finally

   FreeMem(pInfo);

end;

end;

 

function GetCurrentPrinterHandle: THandle;

var

Device, Driver, Port: array[0..255] of char;

hDeviceMode: THandle;

begin

Printer.GetPrinter(Device, Driver, Port, hDeviceMode);

if not OpenPrinter(@Device, Result, nil) then

   RaiseLastWin32Error;

end;

 

©Drkb::03205

Взято с Delphi Knowledge Base: http://www.baltsoft.com/

 


Code:

 

uses Printers;

 

{$IFNDEF WIN32}

const MAX_PATH = 144;

{$ENDIF}

 

procedure TForm1.Button1Click(Sender: TObject);

var

pDevice: pChar;

pDriver: pChar;

pPort: pChar;

hDMode: THandle;

PDMode: PDEVMODE;

begin

if PrintDialog1.Execute then

begin

   GetMem(pDevice, cchDeviceName);

   GetMem(pDriver, MAX_PATH);

   GetMem(pPort, MAX_PATH);

   Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);

   Printer.SetPrinter(pDevice, PDriver, 'FILE:', hDMode);

   FreeMem(pDevice, cchDeviceName);

   FreeMem(pDriver, MAX_PATH);

   FreeMem(pPort, MAX_PATH);

   Printer.BeginDoc;

   Printer.Canvas.TextOut(100, 100, 'Delphi World Is Wonderful!');

   Printer.EndDoc;

end;

end;

 

©Drkb::03206

       

Взято с http://delphiworld.narod.ru