如何检测打印机是否已经联机?(50分)

J

jacklee

Unregistered / Unconfirmed
GUEST, unregistred user!
我用直接写文件的方式打开lpt1口.用writeln的方式送命令.但是,如果打印机未联机就会死机.如何解决呢?以前的帖子我也搜索过了,但是不行.请帮帮忙.!
 
抄的:
wjiachun (2001-3-12 10:41:45)
  Printers是专门用来控制打印机的,可是在没有安装打印机时,
却会提示I/O错误,所以必须有一个检测是否存在打印机的方法,我
试过很多方法,可是I/O错误总是比我的判断早出现,所以采用以下
的烂招来检测打印机。首先在uses增加Printers,再准备一个列表框
ComboBox1,其属性Visible设为FALSE,然后在打印之前执行下列语
句,那么就可以检测到是否存在打印机了:
procedure TForm1.ButtonClick(Sender: TObject);

begin

ComboBox1.Clear;
ComboBox1.Items.Assign(Printer.Printers);
if ComboBox1.Items.CommaText=''
then
Messagedlg('你需要安装打印机才能打印!',mtError,[mbOk],0);
else
Form1.Print;

end;


 
试试这个如何:
//从并行端口读取打印机状态
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;

 
首先谢谢你们的帮助!
To zw84611:你的程序不适合直接检测端口
To bkfx:你的程序一运行就报错(在汇编段 ) 错误信息:privileged instruction[:(]
 
我提供的这段程序运行是没问题的,因为我用过!
但这无法检测 USB 接口的打印机。
 
听课了!
 
感谢你的帮助!这段程序可以在98下执行,但是不能在xp下执行。[:D],错怪你了!不好意思!散分喽!
 

Similar threads

I
回复
0
查看
910
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部