HP Laserjet 3015를 연결하면 Windows에서 올바른 모델을 감지하고 적절한 드라이버를 설치하려고 시도합니다.델파이에서 프린터 모델을 찾는 방법은 무엇입니까?
연결된 프린터 모델을 어떻게 찾을 수 있습니까? Zebra 프린터는 일반/텍스트 전용 드라이버와 함께 설치할 수 있기 때문에 설치된 프린터 목록을 사용하고 싶지 않습니다.
저는 델파이와 C# 프로그래머입니다. 그래서 어떤 언어로 된 도움말이라도 감사하겠습니다.
HP Laserjet 3015를 연결하면 Windows에서 올바른 모델을 감지하고 적절한 드라이버를 설치하려고 시도합니다.델파이에서 프린터 모델을 찾는 방법은 무엇입니까?
연결된 프린터 모델을 어떻게 찾을 수 있습니까? Zebra 프린터는 일반/텍스트 전용 드라이버와 함께 설치할 수 있기 때문에 설치된 프린터 목록을 사용하고 싶지 않습니다.
저는 델파이와 C# 프로그래머입니다. 그래서 어떤 언어로 된 도움말이라도 감사하겠습니다.
최근에 나는 이것으로 약간의 데모를 만들었습니다. 그냥 TComboBox
과 양식에 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을 사용하십시오.
당신은 Zebra 프린터에
~HI
를 보낼 수 있으며, 그것의 모델 번호와 미안, 난 당신의 대답을 수락 취소했다 해요 또한 FW 버전
을 반환해야합니다. 나는 운전자의 정보를보고 싶지 않다. Zebra 프린터는 일반/텍스트 전용 프린터 드라이버에 매핑 될 수 있기 때문에. "Generic/Text"프린터 드라이버를 선택하면 그 뒤에있는 Zebra라는 것을 알고 싶습니다. 죄송합니다. – vIceBerg
.. 계속 ... Windows에서 프린터를 연결할 때처럼 드라이버가 설치되어 있지 않아도 어떤 프린터가 연결되어 있는지 감지 할 수 있습니다. 그것이 내가 알고 싶은 것입니다. – vIceBerg
uhm ... dunno, 어쩌면 당신은이 정보를 일부 USB-Library로 얻을 수 있습니다. whitch에는 hotplug 이벤트가 있습니다. –