OpenPrinter
Windows API 関数とを使用する必要がありますGetPrinter
。を呼び出すときGetPrinter
に、レコードを渡します。このレコードは、メンバーが;に設定されてPRINTER_INFO_2
返されます。そのレコードには、照合が有効かどうかを示すフラグが含まれています (とりわけ)。pDevMode
DEVMODE
DEVMODE
これは、TeamB の Dr. Peter Below による Borland NG の古い投稿です。プリンター設定を更新して永続的なものにする方法を示していますがOpenPrinter
、 、GetPrinter
、ClosePrinter
、およびPRINTER_INFO_2
の使用とDEVMODE
(hDevMode
以下のコードで参照); の使用が含まれます。それはあなたを始めるはずです。
Procedure MakePrintersettingsPermanent;
var
hPrinter: THandle;
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDeviceMode: THandle;
pDevMode: PDeviceMode;
bytesNeeded: Cardinal;
pPI: PPrinterInfo2;
Defaults: TPrinterDefaults;
retval: BOOL;
begin
Assert( Printer.PrinterIndex >= 0 );
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
FillChar( Defaults, Sizeof(Defaults), 0 );
Defaults.DesiredAccess:=
PRINTER_ACCESS_ADMINISTER or PRINTER_ACCESS_USE;
if not WinSpool.OpenPrinter(@Device, hPrinter, @Defaults ) then
RaiseLastWin32Error;
try
retval := WinSpool.GetPrinter(
hPrinter,
2,
Nil, 0, @bytesNeeded );
GetMem( pPI, bytesNeeded );
try
retval := WinSpool.GetPrinter(
hPrinter, 2,
pPI, bytesNeeded, @bytesNeeded );
If not retval Then
RaiseLastWin32Error;
pDevMode := GlobalLock( hDeviceMode );
Assert( Assigned( pdevmode ));
try
Move( pdevmode^, pPI^.pDevMode^, Sizeof( pdevmode^ ));
finally
GlobalUnlock( hDevicemode );
end;
If not WinSpool.SetPrinter(
hPrinter, 2,
pPI,
0 )
Then
RaiseLastWin32error;
finally
FreeMem( pPI );
end;
finally
WinSpool.ClosePrinter( hPrinter );
end;
end;