Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program xprint;
- {$APPTYPE CONSOLE}
- uses
- Windows,
- WinSpool,
- SysUtils;
- function GetDefaultPrinter(pszBuffer: PChar; var pcchBuffer: DWORD): BOOL; stdcall; external 'winspool.drv' name 'GetDefaultPrinterA';
- procedure xtest;
- var
- i: Integer;
- lPrinterName: string;
- lPrinterNameLen: DWORD;
- lPrinterHandle: THandle;
- lPrinterPort: string;
- dm: TDeviceMode;
- lModeSize: Integer;
- lModeHandle: THandle;
- lMode: PDeviceMode;
- lPaperSizesCount: Integer;
- lPaperSizes: array[0..255] of Word;
- lPaperNames: PChar;
- begin
- lPrinterPort := '';
- SetLength(lPrinterName, 2550);
- lPrinterNameLen := Length(lPrinterName);
- if not GetDefaultPrinter(PChar(lPrinterName), lPrinterNameLen) then
- RaiseLastWin32Error;
- SetLength(lPrinterName, lPrinterNameLen - 1);
- WriteLn('Printer name = [', lPrinterName, ']');
- if not OpenPrinter(PChar(lPrinterName), lPrinterHandle, nil) then
- raise Exception.Create('can''t open printer');
- lModeSize := DocumentProperties(0, lPrinterHandle, PChar(lPrinterName), dm, dm, 0);
- if lModeSize < 1 then
- raise Exception.Create('can''t get mode size');
- lModeHandle := GlobalAlloc(GHND, lModeSize);
- if lModeHandle = 0 then
- raise Exception.Create('can''t get mode handle');
- lMode := GlobalLock(lModeHandle);
- if lMode = nil then
- raise Exception.Create('can''t lock mode');
- if DocumentProperties(0, lPrinterHandle, PChar(lPrinterName), lMode^, lMode^, DM_OUT_BUFFER) < 0 then
- raise Exception.Create('can''t get DocumentProperties');
- for i := 0 to High(lPaperSizes) do
- lPaperSizes[i] := 0;
- lPaperSizesCount := DeviceCapabilities(PChar(lPrinterName), PChar(lPrinterPort), DC_PAPERS, @lPaperSizes, lMode);
- if lPaperSizesCount = -1 then
- raise Exception.Create('can''t get count of paper sizes');
- GetMem(lPaperNames, lPaperSizesCount * 64 * SizeOf(Char));
- if DeviceCapabilities(PChar(lPrinterName), PChar(lPrinterPort), DC_PAPERNAMES, lPaperNames, lMode) = -1 then
- raise Exception.Create('can''t get paper names');
- end;
- begin
- try
- xtest;
- WriteLn('All works fine');
- except
- on E: Exception do
- WriteLn(E.Message)
- else
- WriteLn('Unknown exception');
- end;
- WriteLn('Press [Enter] to exit');
- ReadLn;
- end.
Advertisement
Add Comment
Please, Sign In to add comment