打印机状态检测
我有一个打印机的编程问题无解决好随时比人"丙".问题如下:
1.打印时的要求是:
只打印文本内容;打印内容ASCII码必须直接往打印口送,不采用windows的图形打印方式.
2.存在问题:
在往打印口送打印内容的ASCII码时,由于不能检查打印机是否巳准备好(包括是否巳接电源), 经常因此而"死机"(打印机未准备好).
问题点数:70、回复次数:11Top
1 楼kxy(手举穿肠毒药,怀抱刮骨钢刀)回复于 2000-01-18 13:32:00 得分 0
不妨使用window的打印技术来检测打印机的状态.Top
2 楼yjq(渤海海峡)回复于 2000-01-18 16:42:00 得分 0
用汇编!Top
3 楼zyb()回复于 2000-01-18 16:49:00 得分 0
我也推荐用汇编语言(在Delphi中嵌入)编写测试程序,我曾经用MCS51单片机控制过EPSON LQ1600K打印机呢!Top
4 楼limodou()回复于 2000-01-18 16:52:00 得分 0
第一个试一试
uses printers;
var
f:TextFile;
begin
AssignPrn(f);
try
Rewrite(f);
writeln(f,'Print the output');
finally
CloseFile(f);
end;
end;
第二个不知道Top
5 楼barton()回复于 2000-01-18 21:08:00 得分 0
1.向打印口发送文本的方法其实很多。楼上讲的文件重定向当然是最简单的。
2.打印机的检测要用API。用Printer只能作最简单的检测。Top
6 楼929()回复于 2000-01-26 17:07:00 得分 0
可用CREATEFILE以PRN为文件名生成一个文件,检测返回值,若成功则打印机可用,否则显示打印机故障。生成关于PRN的文件句柄后,可象普通文件一样向文件写入内容,比如WRITE,写完后关闭文件。Top
7 楼BlueSea_W(海)回复于 2000-12-01 23:43:00 得分 0
我不大赞成用汇编,因为我曾在Dll中调用用汇编编写的测试打印机函数,但调用几次后出现地址错,死机!
Top
8 楼luyuhai(大海)回复于 2000-12-02 18:22:00 得分 70
我不大赞成用汇编,因为在NT和2000下无法使用,但找不出别的方法,API函数试过,搞不定。汇编的方法如下:
//从并行端口读取打印机状态
function GetPrinterStatus:byte;
asm
MOV DX,$379;
IN AL,DX;
end;
//获取打印机是否出错
function CheckPrinter:boolean;
var
temp:byte;
begin
temp:=GetPrinterStatus;
Result:=not ( ((temp and $80)=0) //打印机忙
or ((temp and $20)<>0) //打印机缺纸
or ((temp and $10)=0) //打印机未联机
or ((temp and $08)=0) ); //打印机出错;
end;
Top
9 楼hsh()回复于 2000-12-09 12:35:00 得分 0
error_code 出错(Lq-300k)Top
10 楼hsh()回复于 2000-12-12 19:01:00 得分 0
错误码与实测结果不符为什么请指教。(LQ-300k)Top
11 楼wyj()回复于 2001-03-01 21:21:00 得分 0
不必那么麻烦吧?
可以把打印机端口当成COM口一样的来操作,直接读写!Top




