2008-10-16 9 views
10

जब मैं अपना एचपी लेजरजेट 3015 प्लग करता हूं, तो विंडोज सही मॉडल का पता लगाता है और फिर उचित ड्राइवर स्थापित करने का प्रयास करता है।डेल्फी में प्रिंटर मॉडल का पता कैसे लगाएं?

मैं जुड़े प्रिंटर के मॉडल का पता कैसे लगा सकता हूं? मैं स्थापित प्रिंटर की सूची का उपयोग नहीं करना चाहता क्योंकि एक जेबरा प्रिंटर जेनेरिक/टेक्स्ट केवल ड्राइवर के साथ स्थापित किया जा सकता है।

मैं डेल्फी और सी # प्रोग्रामर हूं, इसलिए किसी भी भाषा में किसी भी सुझाव की सराहना की जाएगी।

उत्तर

2

हाल ही में मैंने इसके साथ थोड़ा डेमो बना दिया। बस एक 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 में आप ड्राइवर का नाम नहीं का नाम है प्रिन्टर। विंडोज़ में प्रिंटरनाम बदल सकता है, इसलिए यदि आप निश्चित रूप से जाना चाहते हैं, तो प्रिंटरड्राइननाम का उपयोग करें।

+0

मैं माफी चाहता हूँ, मैं अपने जवाब unaccept पड़ा लौटना चाहिए। मैं चालक के इंफोस से नहीं जाना चाहता हूं। क्योंकि ज़ेबरा प्रिंटर को जेनेरिक/टेक्स्ट केवल प्रिंटर ड्राइवर में मैप किया जा सकता है। अगर मैं "जेनेरिक/टेक्स्ट" प्रिंटर ड्राइवर का चयन करता हूं तो मैं जानना चाहता हूं कि यह इसके पीछे एक ज़ेबरा है। क्षमा करें। – vIceBerg

+0

.. जारी रखा ... जब आप विंडोज़ में प्रिंटर प्लग करते हैं, तो यह पता लगा सकता है कि कौन से प्रिंटर प्लग किए गए हैं, भले ही ड्राइवर स्थापित नहीं हैं। मैं यही जानना चाहता हूं। – vIceBerg

+0

उह ... डुनो, शायद आप इस जानकारी को कुछ यूएसबी-लाइब्रेरी के साथ प्राप्त कर सकते हैं, जिसमें एक हॉटप्लग इवेंट है या ऐसा कुछ है –

5

आप एक

~HI 
ज़ेबरा प्रिंटर के

भेज सकते हैं और यह अपने मॉडल संख्या और भी परिवार कल्याण संस्करण

संबंधित मुद्दे