现在有三台打印机,STAR NX100,STAR AR2400, EPSON LQ580K
在程序里怎分辩当前接着的打印机是哪一种?
在程序里怎分辩当前接着的打印机是哪一种?
解决方案 »
- Access数据库插入数据发生的奇怪问题
- 利用indy 10进行ipv6开发的问题
- Indy的IdTelnet实现TELNET的问题
- 如何代码控制,让光标到DbGridEh中某一Cell
- 链表定义出错
- Object Pascal Grammar
- 读取ini文件问题
- ADO多表更新,用什么方法??急死了,!!up者有分!
- 怎么使窗口最大化时不会占满整个屏幕,而是我指定的大小?
- 不知道什么时候才能再问问题了。在LAN,用ServerSocket和ClientSocket怎么相互传文件。
- 关于string数组的释放问题,高手请进(无未结帖记录)
- 新建数据库的用户连接sqlserver数据库时怎么出错了?
// This procedure enumates all printers on you computer.
const
Sub_Key = 'System\CurrentControlSet\Control\Print\Printers';
var
hPrinterKey : HKey;
sKey : Array [0..255] of char;
I : Integer;
dwSize : Integer;
begin
if RegCreateKey(HKEY_CURRENT_CONFIG,Sub_Key,hPrinterKey) = ERROR_SUCCESS then
begin
I := 0;
While (RegEnumKey(hPrinterKey,I,@sKey,255) = Error_Success) do
begin
Listbox1.Items.Add(sKey);
I := I + 1;
end;
sKey := '';
dwSize := 255;
RegQueryValue(hPrinterKey,Sub_Key + '\Default',@sKey, dwSize);
Listbox1.Items.Add(sKey); end;
RegCloseKey(hPrinterKey);
end;
// This function is to show the default printer and its port.
var
iCount,iNumInfo : DWORD;
Buffer : PChar;
I : Integer;
begin
iCount := 0;
EnumPrinters(PRINTER_ENUM_LOCAL,nil,5,nil,0,iCount,iNumInfo); // Retrive buffer size.
if iCount <> 0 then
begin
GetMem(Buffer,iCount); // Set buffer size.
if EnumPrinters(PRINTER_ENUM_LOCAL,nil,5,PByte(Buffer),iCount,iCount,iNumInfo) then
begin
For I := 0 to iNumInfo - 1 do
begin
if ((PPRINTERINFO5(Buffer)^.Attributes and PRINTER_ATTRIBUTE_DEFAULT) = PRINTER_ATTRIBUTE_DEFAULT) then
begin
Memo1.Lines.Add('Printer Name (Default): ' + PPRINTERINFO5(Buffer)^.pPrinterName);
Memo1.Lines.Add('Printer Port : ' + PPRINTERINFO5(Buffer)^.pPortName);
end;
Inc(Buffer, sizeOf(TPRINTERINFO5));
end;
end;
Buffer := Buffer - sizeOf(TPRINTERINFO5) * iNumInfo;
FreeMem(Buffer,iCount);
end;
end;
还有,我不需要获取这三台的型号,也不要区分所有打印机的型号,我的真正需要只是打印机里有没有一些独有的标记,如
NX100的:读出是 1
AR2400的:读出的是 2
LQ580K的:读出的是 3
就可以了。
现在市面上多数打印机支持的是这两种打印控制语言,如Epson打印机使用的是ESC PK,Hp打印机使用的是PCL。
ESC PK我不太熟。
PCL 在5.0版本之后才开始支持双向通讯,也就是说对于比较老的打印机,多数情况下是无法发送命令让打印机返回标志的,现在PCL最新版本为6.0。对于HP现在使用比较广泛,市面上流行的打印机,使用PCL就可以做到。你说的这个功能确实不是很好做,我曾经尝试过,至今没有好答案。最大的阻碍在于打印机厂家之间没有统一的打印控制语言,而且相同厂家不同版本的打印控制语言也不一样。
现在我的解决方法是让用户手工挑选打印机。
如果找到好的方法记得通知一声。good luck!