如何得到当前打印机的名称,驱动程序,打印端口信息?(50分)

  • 主题发起人 主题发起人 strang
  • 开始时间 开始时间
Win.ini中 [Windows] section的device值就可以得到,

例如:device=EPSON MJ-1500K,EPST2,LPT1:

因此用

MyIni:Tinifile;
PrinterDesc:string;
...
MyIni:= TIniFile.Create('<WinDir>/win.ini');
PrinterDesc:= Localini.Readstring ('windows','device', 'Error');
MyIni.Free;

再把PrinterDesc分解一下就可以了。
 
TPrinter.Printers里就有
 
对不起,Localini.Readstring 应是MyIni.Readstring
 
TPrinter.Printers里的strings就是打印机名, objects里指向的是TPrinterDevice
不过TPrinterDevice需要自己定义:
TPrinterDevice = class
Driver, Device, Port: String;
end;


然后可以用TPrinter.GetPrinter得到打印机的所有信息(定义一个TDeviceMode的变
量即可);
用该方法可取得所有已安装的打印机详细资料.
 
注册表里面有你想要的所有东西!
HKEY_CURRENT_CONFIG/System/CurrentControlSet/Control/Print/Printers可以读出打印机的名然后由
HKEY_LOCAL_MACHINE/System/CurrentControlSet/control/Print/Environments/Windows 4.0/Drivers/Epson LQ-1800K可以读出所有有关的信息!
 
有关注册表的使用,已答问题里面有!
或EMAIL给我!
Good luck!
 
以下是来自Inprise的完整例子:
请注意其中两条判断语句,
这说明有时候仅仅靠getprinters并不能保证
信息的正确,还需要win.ini的帮助。

uses Printers;

{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}

procedure TForm1.Button1Click(Sender: TObject);
var
pDevice : pChar;
pDriver : pChar;
pPort : pChar;
hDMode : THandle;
begin

if PrintDialog1.Execute then
begin

GetMem(pDevice, cchDeviceName);
GetMem(pDriver, MAX_PATH);
GetMem(pPort, MAX_PATH);
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
if lStrLen(pDriver) = 0 then
begin

GetProfileString('Devices', pDevice, '', pDriver, MAX_PATH);
pDriver[pos(',', pDriver) - 1] := #0;
end;

if lStrLen(pPort) = 0 then
begin

GetProfileString('Devices', pDevice, '', pPort, MAX_PATH);
lStrCpy(pPort, @pPort[lStrLen(pPort)+2]);
end;

Memo1.Lines.Add('Device := ' + StrPas(pDevice));
Memo1.Lines.Add('Driver := ' + StrPas(pDriver));
Memo1.Lines.Add('Port := ' + StrPas(pPort));
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;

end;


另外,如果只想获取默认打印机的属性,
自然可以去掉PrintDialog1.Execute。
想获取全部打印机的信息,也不难改造吧! :)
 
Printer.GetPrint;
 
agree dwwang
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
828
SUNSTONE的Delphi笔记
S
S
回复
0
查看
758
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部