
16.05.2011, 13:47
|
Новичок
|
|
Регистрация: 11.02.2010
Сообщения: 63
Репутация: 10
|
|
Код программы 2
Код:
function GetPrinterStatus(const APrinterIndex: Integer): DWORD;
var
APrinterHandle: THandle;
APrinterInfo: PPrinterInfo2;
ABytesNeeded: DWORD;
function GetPrinterHandle: THandle;
const
PrinterDefaults: TPrinterDefaults = (
pDatatype: nil; pDevMode: nil; DesiredAccess: PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER
);
var
ADevice, ADriver, APort: array[0..MAX_PATH] of Char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(ADevice, ADriver, APort, hDeviceMode);
if not OpenPrinter(@ADevice, Result, @PrinterDefaults) then
RaiseLastOSError;
end;
begin
Result := 0;
APrinterHandle := 0;
try
Printer.PrinterIndex := 1;
APrinterHandle := GetPrinterHandle;
ABytesNeeded := 0;
if not WinSpool.GetPrinter(APrinterHandle, 2, nil, 0, @ABytesNeeded) then
if Windows.GetLastError <> ERROR_INSUFFICIENT_BUFFER then
RaiseLastOSError;
GetMem(APrinterInfo, ABytesNeeded);
try
if not WinSpool.GetPrinter(APrinterHandle, 2, APrinterInfo, ABytesNeeded, @ABytesNeeded) then
RaiseLastOSError;
Result := APrinterInfo^.Status;
finally
begin
FreeMem(APrinterInfo);
Form1.Caption := inttostr(APrinterInfo^.Attributes);
end;
end;
except on E: Exception do
begin
if APrinterHandle <> 0 then
ClosePrinter(APrinterHandle);
raise;
end;
end;
end;
|