600元200分重酬求购获取打印机的状态并控制打印机的源代码! ( 积分: 200 )

  • 主题发起人 主题发起人 d600
  • 开始时间 开始时间
D

d600

Unregistered / Unconfirmed
GUEST, unregistred user!
600元重酬求购获取打印机的状态并控制打印机的源代码!
系统:WIN2000 SERVER
开发工具:DELPHI7
我有多台串口打印机链接到电脑,需要判断打印机是否缺纸、没电、或错误等信息来控制打印机。
打印机型号:爱普生 TMU220 微型针式打印机
请给出源代码及函数解释。
请与我在QQ联系:号码:303328979
如证实源码有效,立即付款!!!绝不吃言。
如在广州地区,我亲自上门付款。
如在其它地区,请给出银行帐号,我立即转帐付款。
十万火急!!!万望赐教!!!
 
600元重酬求购获取打印机的状态并控制打印机的源代码!
系统:WIN2000 SERVER
开发工具:DELPHI7
我有多台串口打印机链接到电脑,需要判断打印机是否缺纸、没电、或错误等信息来控制打印机。
打印机型号:爱普生 TMU220 微型针式打印机
请给出源代码及函数解释。
请与我在QQ联系:号码:303328979
如证实源码有效,立即付款!!!绝不吃言。
如在广州地区,我亲自上门付款。
如在其它地区,请给出银行帐号,我立即转帐付款。
十万火急!!!万望赐教!!!
 
如下代码在WIN98可行,WIN2000不行请不要发来:
判定打印机是否缺纸
function TestPrinterStatus(LPTPort: word): byte;
var
Status: byte;
CheckLPT: word;
begin

Status := 0;
if (LPTPort >= 1) and (LPTPort <= 3) then

begin

CheckLPT := LPTPort -1;
asm
mov dx, CheckLPT;
mov al, 0;
mov ah, 2;
int 17h;
mov &Status, ah;
end;

end;

Result := Status;
end;

参数时打印机端口,返回值如下:
01h - Timeout
08h - I/O Error
10h - Printer selected
20h - Out of paper
40h - Printer acknowledgement
80h - Printer not busy (0 if busy)
 
我见很多餐饮软件做到了,证明并不是没可能实现的。
 
uses Winspool, Printers;
//枚举打印任务:
function TPrintMai_frm.getjob(): integer;
var
Needed, Returned: DWORD;
i, Count: integer;
tbt: byte;
pNeeded: PDword;
P2: PJobInfo1;
PPI: pPRINTERINFO2;
Printer: TPrinter;
Device, Driver, Port: array[0..255] of Char;
PPr, DevMode: Cardinal;
hPrinter: THandle;
begin
result := 0;
Printer := TPrinter.Create;
//创建Printer对象
try
Printer.GetPrinter(Device, Driver, Port, DevMode);
//取得打印机的名称,驱动程序,端口号
if not OpenPrinter(@device, hPrinter, nil) then
//取得打印机的句柄
begin
ShowMessage('OpenPrinter' + SysErrorMessage(GetLastError));
//Exit;
end;
PNeeded := AllocMem(8024);
//分配内存空间
P2 := AllocMem(8048);
PPI := AllocMem(8048);
//接受打印机信息结构
if not GetPrinter(hPrinter, 2, PPI, 8048, PNeeded) then
//取得打印机队列中的任务数
begin
ShowMessage('GetPrinter' + SysErrorMessage(GetLastError));
end;
//取得打印机状态
if Enumjobs(hPrinter, 0, 1, 2, p2, 8048, Needed, Returned) then
begin
if P2.JobId = 0 then
result := 0;
if P2.JobId >
0 then
begin
result := PPI.cJobs;
end
end
else
ShowMessage('Enumjobs' + SysErrorMessage(GetLastError));
//关闭打印机,释放内存空间
finally
FreeMem(PNeeded);
FreeMem(p2);
FreeMem(PPI);
Printer.Free;
ClosePrinter(hPrinter);
end;
end;

 
arnew朋友,请与我在QQ联系好吗,您的代码编译时有点问题,我想请教。
QQ:号码:303328979
证实可行一定给报酬,给分!!!绝不吃言!
 
上面代码好像行不通,返回值始终是0。请高手指点。
 
我找到了,一些爱普生的命令集,但不知如何使用。请高手赐教:
ESC c 3 n
[Name] Select paper sensor(s) to output paper-end signal
[Format] ASCII ESC c 3 n
Hex 1B 63 33 n
Decimal 27 99 51 n
[Range] 0 ≤ n ≤ 255
[Default] n = 0
[Description] Selects whether to output paper-end signal to a parallel interface or not when a
paper-end is detected by the sensor selected, using n as follows:.
 
发送ESC c 3 n给打印机就可以回复信息,但怎发送?
 
我找到了,一些爱普生的命令集,但不知如何使用。请高手赐教:
ESC c 3 n
[Name] Select paper sensor(s) to output paper-end signal
[Format] ASCII ESC c 3 n
Hex 1B 63 33 n
Decimal 27 99 51 n
[Range] 0 ≤ n ≤ 255
[Default] n = 0
[Description] Selects whether to output paper-end signal to a parallel interface or not when a
paper-end is detected by the sensor selected, using n as follows:.

发送ESC c 3 n给打印机就可以回复信息,但怎发送?

拜托高手赐教
 
把esc命令往并口写就可以的
 
我用的是串口打印机
请问该如何写入?
(我用的是爱普生TM U220打印机,如果谁能提供完整的代码,我愿意付款购买)
 
假设你的打印机装在com1
这样体会:
用二进制编辑器编辑一个文件如print.prn
内容为:1B 63 33 00(16进制)
保存这个文件
在dos窗口执行:type print.prn>com1
体会一下效果
在delphi中,可以使用spcomm组件,使用WriteCommData写入esc命令
在OnReceiveData可以接受到响应
 
用api直接对串口操作,就可以了。
或者用控件spcomm等控件操作串口。
然后发送esc命令就可以操作打印机了。
 
感谢张鸿林朋友,感谢abea朋友,正在学习中。。。。。。
 
爱普生 TMU220 有专用的通讯协议说明,和操作手册在一起,tu210的协议也行的,130多页,通讯协议也有一半。一般用于超市,你做串口通讯应没问题。
TU220串口有三种,不是232的,还得接转换器,一个串口带多台机子,一般采用485接口。通讯时和通用串口一样(通讯控件都行),发送时,要保留一定时间间隔,只用232是没有影响的。不管接收还是发送,最好采用十六进表示。
 
谢谢各位的帮助,爱普生的U220驱动很霸道,装了就没法访问串口了。
 
后退
顶部