Guest User

Untitled

a guest
Feb 28th, 2012
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.25 KB | None | 0 0
  1. program xprint;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   Windows,
  5.   WinSpool,
  6.   SysUtils;
  7.  
  8. function GetDefaultPrinter(pszBuffer: PChar; var pcchBuffer: DWORD): BOOL; stdcall; external 'winspool.drv' name 'GetDefaultPrinterA';
  9.  
  10. procedure xtest;
  11. var
  12.   i: Integer;
  13.   lPrinterName: string;
  14.   lPrinterNameLen: DWORD;
  15.   lPrinterHandle: THandle;
  16.   lPrinterPort: string;
  17.   dm: TDeviceMode;
  18.   lModeSize: Integer;
  19.   lModeHandle: THandle;
  20.   lMode: PDeviceMode;
  21.   lPaperSizesCount: Integer;
  22.   lPaperSizes: array[0..255] of Word;
  23.   lPaperNames: PChar;
  24. begin
  25.   lPrinterPort := '';
  26.   SetLength(lPrinterName, 2550);
  27.   lPrinterNameLen := Length(lPrinterName);
  28.   if not GetDefaultPrinter(PChar(lPrinterName), lPrinterNameLen) then
  29.     RaiseLastWin32Error;
  30.  
  31.   SetLength(lPrinterName, lPrinterNameLen - 1);
  32.  
  33.   WriteLn('Printer name = [', lPrinterName, ']');
  34.  
  35.   if not OpenPrinter(PChar(lPrinterName), lPrinterHandle, nil) then
  36.     raise Exception.Create('can''t open printer');
  37.  
  38.   lModeSize := DocumentProperties(0, lPrinterHandle, PChar(lPrinterName), dm, dm, 0);
  39.   if lModeSize < 1 then
  40.     raise Exception.Create('can''t get mode size');
  41.  
  42.   lModeHandle := GlobalAlloc(GHND, lModeSize);
  43.   if lModeHandle = 0 then
  44.     raise Exception.Create('can''t get mode handle');
  45.  
  46.   lMode := GlobalLock(lModeHandle);
  47.   if lMode = nil then
  48.     raise Exception.Create('can''t lock mode');
  49.  
  50.   if DocumentProperties(0, lPrinterHandle, PChar(lPrinterName), lMode^, lMode^, DM_OUT_BUFFER) < 0 then
  51.     raise Exception.Create('can''t get DocumentProperties');
  52.  
  53.   for i := 0 to High(lPaperSizes) do
  54.     lPaperSizes[i] := 0;
  55.  
  56.   lPaperSizesCount := DeviceCapabilities(PChar(lPrinterName), PChar(lPrinterPort), DC_PAPERS, @lPaperSizes, lMode);
  57.   if lPaperSizesCount = -1 then
  58.     raise Exception.Create('can''t get count of paper sizes');
  59.  
  60.   GetMem(lPaperNames, lPaperSizesCount * 64 * SizeOf(Char));
  61.   if DeviceCapabilities(PChar(lPrinterName), PChar(lPrinterPort), DC_PAPERNAMES, lPaperNames, lMode) = -1 then
  62.     raise Exception.Create('can''t get paper names');
  63. end;
  64.  
  65. begin
  66.   try
  67.     xtest;
  68.     WriteLn('All works fine');
  69.   except
  70.     on E: Exception do
  71.       WriteLn(E.Message)
  72.     else
  73.       WriteLn('Unknown exception');
  74.   end;
  75.   WriteLn('Press [Enter] to exit');
  76.   ReadLn;
  77. end.
Advertisement
Add Comment
Please, Sign In to add comment