code_junkie

How to detect the printer model?

Nov 11th, 2011
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. ~HI
  2.  
  3. unit Unit1;
  4.  
  5. interface
  6.  
  7. uses
  8. Windows, StdCtrls, Classes, Controls, Forms;
  9.  
  10. type
  11. TForm1 = class(TForm)
  12. ComboBox1: TComboBox;
  13. Memo1: TMemo;
  14. procedure ComboBox1Change(Sender: TObject);
  15. procedure FormCreate(Sender: TObject);
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. var
  23. Form1: TForm1;
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. uses
  30. Printers, WinSpool, SysUtils;
  31.  
  32. type
  33. _DRIVER_INFO_6A = record
  34. cVersion: DWORD;
  35. pName: PAnsiChar;
  36. pEnvironment: PAnsiChar;
  37. pDriverPath: PAnsiChar;
  38. pDataFile: PAnsiChar;
  39. pConfigFile: PAnsiChar;
  40. pHelpFile: PAnsiChar;
  41. pDependentFiles: PAnsiChar;
  42. pMonitorName: PAnsiChar;
  43. pDefaultDataType: PAnsiChar;
  44. pszzPreviousNames: PAnsiChar;
  45. ftDriverDate: TFileTime;
  46. dwlDriverVersion: Int64;
  47. pszMfgName: PAnsiChar;
  48. pszOEMUrl: PAnsiChar;
  49. pszHardwareID: PAnsiChar;
  50. pszProvider: PAnsiChar;
  51. end;
  52. TDriverInfo6A = _DRIVER_INFO_6A;
  53. PDriverInfo6A = ^TDriverInfo6A;
  54. PDriverInfo6 = PDriverInfo6A;
  55.  
  56. procedure TForm1.FormCreate(Sender: TObject);
  57. begin
  58. ComboBox1.Items.Assign(Printer.Printers);
  59. ComboBox1.ItemIndex := 0;
  60. ComboBox1Change(nil);
  61. end;
  62.  
  63. function FileTimeToDateTime(ft: TFileTime): TDateTime;
  64. var
  65. st: TSystemTime;
  66. lt: TFileTime;
  67. begin
  68. FillChar(st, SizeOf(st), 0);
  69. FillChar(lt, SizeOf(lt), 0);
  70. FileTimeToLocalFileTime(ft, lt);
  71. FileTimeToSystemTime(lt, st);
  72. result := SystemTimeToDateTime(st);
  73. end;
  74.  
  75. procedure TForm1.ComboBox1Change(Sender: TObject);
  76. var
  77. hPrinter: THandle;
  78. PrtName: String;
  79. DriverInfo: PDriverInfo6;
  80. dwNeeded: DWORD;
  81. begin
  82. Memo1.Clear;
  83. PrtName := Combobox1.Text;
  84. OpenPrinter(PChar(PrtName), hPrinter, nil);
  85. DriverInfo := nil;
  86. try
  87. GetPrinterDriver(hPrinter, nil, 6, DriverInfo, 0, dwNeeded);
  88. GetMem(DriverInfo, dwNeeded);
  89. try
  90. if GetPrinterDriver(hPrinter, nil, 6, DriverInfo, dwNeeded, dwNeeded) then begin
  91. Memo1.Lines.Add('cVersion: ' + IntToStr(DriverInfo.cVersion));
  92. Memo1.Lines.Add('pName: '+StrPas(DriverInfo.pName));
  93. Memo1.Lines.Add('pEnvironment: '+StrPas(DriverInfo.pEnvironment));
  94. Memo1.Lines.Add('pDriverPath: '+StrPas(DriverInfo.pDriverPath));
  95. Memo1.Lines.Add('pDataFile: '+StrPas(DriverInfo.pDataFile));
  96. Memo1.Lines.Add('pConfigFile: '+StrPas(DriverInfo.pConfigFile));
  97. Memo1.Lines.Add('pHelpFile: '+StrPas(DriverInfo.pHelpFile));
  98. Memo1.Lines.Add('pDependentFiles: '+StrPas(DriverInfo.pDependentFiles));
  99. Memo1.Lines.Add('pMonitorName: '+StrPas(DriverInfo.pMonitorName));
  100. Memo1.Lines.Add('pDefaultDataType: '+StrPas(DriverInfo.pDefaultDataType));
  101. Memo1.Lines.Add('pszzPreviousNames: '+StrPas(DriverInfo.pszzPreviousNames));
  102. Memo1.Lines.Add('ftDriverDate: '+DateTimeToStr(FileTimeToDateTime(DriverInfo.ftDriverDate)));
  103. Memo1.Lines.Add('dwlDriverVersion: '+IntToStr(DriverInfo.dwlDriverVersion));
  104. Memo1.Lines.Add('pszMfgName: '+StrPas(DriverInfo.pszMfgName));
  105. Memo1.Lines.Add('pszOEMUrl: '+StrPas(DriverInfo.pszOEMUrl));
  106. Memo1.Lines.Add('pszHardwareID: '+StrPas(DriverInfo.pszHardwareID));
  107. Memo1.Lines.Add('pszProvider: '+StrPas(DriverInfo.pszProvider));
  108. end else
  109. Memo1.Lines.Add('No Info needed = ' + IntToStr(dwNeeded));
  110. finally
  111. FreeMem(DriverInfo);
  112. end;
  113. finally
  114. ClosePrinter(hPrinter);
  115. end;
  116. end;
  117.  
  118. end.
Add Comment
Please, Sign In to add comment