怎样知道当前系统是否真正装了打印机(50分)

  • 主题发起人 主题发起人 wrench
  • 开始时间 开始时间
W

wrench

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,不要告诉我Printer.Printers.Count=0
我的意思是如果系统在控制面版安装了打印机,
没开,或是拆走了,程序里怎么检测
 
直接检测打印机的安装状态,还得看别人如何说!但要检测则比较容易,即取LPT1的状态信息(这在LPT1的25pin上有详细说明)。
 
jams
不明白您的意思,
能说的再清楚一点吗?
Thanks
 
试试用 OPENPRINTER (LIB IS WINSPOOL)
我这两天会试一下.
 
LPT1端口是25芯电缆,除信号线外,还有计算机控制打印机的控制信号线,如缺纸、
连机等,这些通过程序都能取得其对应的状态,检测这些状态不就知道有无打印机了
吗?!
 
jams
能具体一点吗?
最好能有个例子
谢谢
 
to wrench
例子我一时还不行,当原理是这样的。计算机世界、计算机报上对此有更多的描述,
不妨查查,或再听听他人的。
 
很难:-( lpt容易一些吧, usb, 还有网络打印机就很难了:-(
 
网络打印机的先放下,哪位大虾能指点一下
LPT的检测,在下先行谢过
或者,有没有办法在没有打印机打印时,
让Windows那个".....文档输出到打印机时出错..."
的对话框出现

又,每想到这是个难题,各位如能解答,包括网络打印机的检测
本人愿在出100分
 
1、是否安装了打印机可以在注册表的:
Hkey_Local_Machine/Config/001/system/currentControlset/control/print/printers/
里得到信息

2、可以骗骗程序

try
//向打印机写一个空格,
except
Messagedlg('".....文档输出到打印机时出错...',mtError, [mbOK],0)
end;


 
各位,刚才本人一不小心打漏了一个字
更正为
或者,有没有办法在没有打印机打印时,
让Windows那个".....文档输出到打印机时出错..."
的对话框不出现

注意这个"不"字
Sorry to everyone
 
噫这个类似问题我问过好象是eEYES大侠问答了看看已答问题吧
 
unit
uses winspool

用 OPENPRINTER 函数,如果为错,则系统未装打印机
用 GETPRINTER 函数,LEVEL=2
取 PRINTER_INFO_2 的STATUS 信息,就可判断.(具体可看VC HELP)

如偷懒,可用一控件MPRINTER,不过我还没用过
 
openprinter函数需要一个handle做参数,
如何得到此handle?
 
var
prnhandle:thandle;
begin

if openprinter('Epson LQ-1600K',prnhandle,nil) then

showmessage('success');
end;

prnhandle是由openprinter返回给你使用的,就是通过openprinter得到的
 
终于又可以上网了!!!!!
再次提请大家关注一下这个问题!我出到200分!
openprinter不行,如果你安装了打印机
而打印机未开的话,openprinter会返回true
大家还有什么办法没有?
好像getprinter函数有此功能
不过不知具体如何使用
 
试一下这个函数:
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;


Pass in the LPT port number you want to check &
get the following back:
01h - Timeout
08h - I/O Error //<b>估计这个返回码有用</b>
10h - Printer selected
20h - Out of paper
40h - Printer acknowledgement
80h - Printer not busy (0 if busy)

 
To Cakk:
您的程序调用了中断,而在Windows NT下调用中断是不允许的
不知有其他办法没有?
 
没有人知道吗?
 
再次提请大家关注一下这个问题
 
后退
顶部