Как обнаружить модель принтера в Delphi?

Нет явного ключевого слова, чтобы сделать ваш класс абстрактным в C ++. Ваш код не должен компилироваться, потому что abstract не является ключевым словом C ++, вы, вероятно, используете расширение компилятора, чтобы оно не перекрывало это ключевое слово.

Способ создания абстрактного класса в C ++ заключается в объявлении одной или нескольких чисто виртуальных функций, например, test:

virtual void test() = 0;
10
задан Braiam 31 December 2013 в 14:09
поделиться

2 ответа

Недавно я сделал немного демонстрации с этим. Просто помещенный a TComboBox и a TMemo на Форме и замене код с этим:

unit Unit1;

interface

uses
  Windows, StdCtrls, Classes, Controls, Forms;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Memo1: TMemo;
    procedure ComboBox1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Printers, WinSpool, SysUtils;

type
  _DRIVER_INFO_6A = record
    cVersion: DWORD;
    pName: PAnsiChar;             
    pEnvironment: PAnsiChar;      
    pDriverPath: PAnsiChar;       
    pDataFile: PAnsiChar;         
    pConfigFile: PAnsiChar;       
    pHelpFile: PAnsiChar;         
    pDependentFiles: PAnsiChar;   
    pMonitorName: PAnsiChar;      
    pDefaultDataType: PAnsiChar;  
    pszzPreviousNames: PAnsiChar;
    ftDriverDate: TFileTime;
    dwlDriverVersion: Int64;
    pszMfgName: PAnsiChar;
    pszOEMUrl: PAnsiChar;
    pszHardwareID: PAnsiChar;
    pszProvider: PAnsiChar;
  end;
  TDriverInfo6A = _DRIVER_INFO_6A;
  PDriverInfo6A = ^TDriverInfo6A;
  PDriverInfo6 = PDriverInfo6A;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Assign(Printer.Printers);
  ComboBox1.ItemIndex := 0;
  ComboBox1Change(nil);
end;

function FileTimeToDateTime(ft: TFileTime): TDateTime;
var
  st: TSystemTime;
  lt: TFileTime;
begin
  FillChar(st, SizeOf(st), 0);
  FillChar(lt, SizeOf(lt), 0);
  FileTimeToLocalFileTime(ft, lt);
  FileTimeToSystemTime(lt, st);
  result := SystemTimeToDateTime(st);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  hPrinter: THandle;
  PrtName: String;
  DriverInfo: PDriverInfo6;
  dwNeeded: DWORD;
begin
  Memo1.Clear;
  PrtName := Combobox1.Text;
  OpenPrinter(PChar(PrtName), hPrinter, nil);
  DriverInfo := nil;
  try
    GetPrinterDriver(hPrinter, nil, 6, DriverInfo, 0, dwNeeded);
    GetMem(DriverInfo, dwNeeded);
    try
      if GetPrinterDriver(hPrinter, nil, 6, DriverInfo, dwNeeded, dwNeeded) then begin
        Memo1.Lines.Add('cVersion: ' + IntToStr(DriverInfo.cVersion));
        Memo1.Lines.Add('pName: '+StrPas(DriverInfo.pName));
        Memo1.Lines.Add('pEnvironment: '+StrPas(DriverInfo.pEnvironment));
        Memo1.Lines.Add('pDriverPath: '+StrPas(DriverInfo.pDriverPath));
        Memo1.Lines.Add('pDataFile: '+StrPas(DriverInfo.pDataFile));
        Memo1.Lines.Add('pConfigFile: '+StrPas(DriverInfo.pConfigFile));
        Memo1.Lines.Add('pHelpFile: '+StrPas(DriverInfo.pHelpFile));
        Memo1.Lines.Add('pDependentFiles: '+StrPas(DriverInfo.pDependentFiles));
        Memo1.Lines.Add('pMonitorName: '+StrPas(DriverInfo.pMonitorName));
        Memo1.Lines.Add('pDefaultDataType: '+StrPas(DriverInfo.pDefaultDataType));
        Memo1.Lines.Add('pszzPreviousNames: '+StrPas(DriverInfo.pszzPreviousNames));
        Memo1.Lines.Add('ftDriverDate: '+DateTimeToStr(FileTimeToDateTime(DriverInfo.ftDriverDate)));
        Memo1.Lines.Add('dwlDriverVersion: '+IntToStr(DriverInfo.dwlDriverVersion));
        Memo1.Lines.Add('pszMfgName: '+StrPas(DriverInfo.pszMfgName));
        Memo1.Lines.Add('pszOEMUrl: '+StrPas(DriverInfo.pszOEMUrl));
        Memo1.Lines.Add('pszHardwareID: '+StrPas(DriverInfo.pszHardwareID));
        Memo1.Lines.Add('pszProvider: '+StrPas(DriverInfo.pszProvider));
      end else
        Memo1.Lines.Add('No Info needed = ' + IntToStr(dwNeeded));
    finally
      FreeMem(DriverInfo);
    end;
  finally
    ClosePrinter(hPrinter);
  end;
end;

end.

править: удаленный ненужная функция GetDriverNameByOSPrinterName

BTW: в pName у Вас есть Название Драйвера не Название Принтера. Printername изменяем в Windows, поэтому если Вы хотите, идут уверенные, используют Printerdrivername.

2
ответ дан 4 December 2019 в 02:52
поделиться

Можно отправить a

~HI

к принтеру Зебры и это должно возвратить свой номер модели и также fw версия

5
ответ дан 4 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: