如何检测打印机是否联机并且可用?

黑兵 2004-04-16 05:56:31
我用BCB做一个程序,构造了一个报表窗体,在XP下,在局域网内搜索出好多台共享的打印机,如果默认的打印机没有正常联机、连接或者不可用,那么程序一运行时就出现错误,查找默认打印机。
我的问题是,如何在程序首部,报表窗体创建前,我就能获得这些信息,如果打印机不可用,我就不创建报表窗体,如果可用,就正常运行。
急!!!
...全文
912 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑兵 2004-04-22
  • 打赏
  • 举报
回复
以上的方法我试了一下,出现的问题如下。
1.这些都是在程序运行以后才能做的,程序开始时不好用。我想让程序一开始运行时就检测。
2.在XP中,局域网,计算机能找到很多共享的打印机,但有时由于某台连接共享打印机的计算机没打开,而当前的计算机又是设定的该台打印机为默认打印机,怎么能判断出它是不可用的。
黑兵 2004-04-21
  • 打赏
  • 举报
回复
以上的方法我试了一下,出现的问题如下。
1.这些都是在程序运行以后才能做的,程序开始时不好用。我想让程序一开始运行时就检测。
2.在XP中,局域网,计算机能找到很多共享的打印机,但有时由于某台连接共享打印机的计算机没打开,而当前的计算机又是设定的该台打印机为共享打印机,怎么能判断出它是不可用的。
黑兵 2004-04-19
  • 打赏
  • 举报
回复
真地没有人会么?我很急的。为什么我用BCB自带的报表设计器设计的含报表的程序在当前打印机不可用的情况下就不能运行呢?谢谢大家啦。
黑兵 2004-04-19
  • 打赏
  • 举报
回复
能说得具体点么?谢谢大家了。这个问题一直困扰着我,我是用BCB的报表设计器创建的报表。很急啊。谢谢
Chimae 2004-04-19
  • 打赏
  • 举报
回复
Ping打印机机器,返回数据包即可;
aiirii 2004-04-19
  • 打赏
  • 举报
回复
我覺得 JetKingLau 的方法可行!!!
JetKingLau 2004-04-19
  • 打赏
  • 举报
回复

TPrinter *p = Printer();
TStringList *list = new TStringList();
list->Assign(p->Printers);//重点是这句
...
//如果没有打印机,list->Count = 0
...
delete list;

JetKingLau 2004-04-19
  • 打赏
  • 举报
回复
VC 的代码

bool LptPrint(char prtdata[],int prtlen,int timeout)
{
HANDLE h;
DWORD n;
COMMTIMEOUTS t;
bool result;
h = CreateFile("lpt1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if (h == INVALID_HANDLE_VALUE){
AfxMessageBox("Can not open lpt1");
return false;
}
t.ReadIntervalTimeout = 0;
t.ReadTotalTimeoutMultiplier = 0;
t.ReadTotalTimeoutConstant = 0;
t.WriteTotalTimeoutMultiplier = timeout * 1000 / prtlen;
t.WriteTotalTimeoutConstant = 0;
if (!SetCommTimeouts(h,&t)){
AfxMessageBox("SetCommTimeout error");
return false;
}
result = true;
if (!WriteFile(h,prtdata,prtlen,&n,NULL)){
AfxMessageBox("Print error");
result = false;
}
CloseHandle(h);
return result;
}
insert2003 2004-04-19
  • 打赏
  • 举报
回复
栓测是否存在打印机:

先定义一函数:
Function hasprinter: boolean;
begin
if printer.Printers.count = 0 then
result := fasle;
else
result := true;
end;


调用:

if not hasprinter then
begin
showmessage('没有检测到打印机!');
exit;
end;
hwz_119 2004-04-19
  • 打赏
  • 举报
回复
上面的在98下可以,xp不可以,别的未测试
hwz_119 2004-04-19
  • 打赏
  • 举报
回复
//从并行端口读取打印机状态
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;
hwz_119 2004-04-19
  • 打赏
  • 举报
回复
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;
黑兵 2004-04-17
  • 打赏
  • 举报
回复
说白了,我就是想知道:当前系统所连接(默认的)打印机到底可不可用。
黑兵 2004-04-17
  • 打赏
  • 举报
回复
没有人知道么?
lovebcb 2004-04-17
  • 打赏
  • 举报
回复
try...catch...测试一下看看是否正常,如果不正常的话,就不创建报表了。
呵呵,我说了点儿废话,就算帮楼主顶一下了
黑兵 2004-04-16
  • 打赏
  • 举报
回复
不行,判断不出来。再帮帮我,试试。谢谢大家。
lovebcb 2004-04-16
  • 打赏
  • 举报
回复
#include <printers.hpp>

TPrinter *p = Printer();
if( p == NULL)
{
ShowMessage("No Priner available!");
return;
}




实验报告 实验名称:打印机的操作过程 实验仪器:HP LaserjetM1319f MFP 实验目的:认识和了解打印机的工作原理,掌握打印机的使 用方法. 实验步骤:一、打印机与电脑的数据连接 .首先正确关闭电源; .把USB借口的两端分别连接在电脑和打印机的接口上; .打开电源开关,检查是否正确安装成功 二、打印机驱动器程序的安装 .点击电脑屏幕右下角的"开始"\菜单\"打印机和传真"; .在"打印机和传真"文件夹中,双击"添加打印机",进入"打印机向导", 点击"下一步"; .选择"连接到这台计算机的本地打印机",并将"自动检测并安装我的即插 即用打印机"前面的勾去掉,点击"下一步"; .在"使用以下端口"中选择"LPT1:打印机端口",点击"下一步"; .点击"下一步",在"是否希望将这台打印机机设置为默认打印机",选择 "是",点击"下一步"; .默认为"不共享这台打印机",点击"下一步"; .根据自己的需要选择是否"要打印测试纸",打开一个Word文档,输入要 测试内容,选择"文件"\"打印机"\"确定"; .点击"下一步",将会出现"正在完成添加打印机向导"的提示界面。此时 ,选择"完成"。 实验小结: 本周我们打印机的使用操作过程以及它的基本工作原理,并且我在互联网上我也更 多的了解到打印机的一些相关知识。 打印机(printer) 是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上。衡量打印机 好坏的指标有三项:打印分辨率,打印速度和噪声。 打印机的种类很多,按打印元件对纸是否有击打动作,分击打式打印机与非击打式 打印机。按打印字符结构,分全形字打印机和点阵字符打印机。按一行字在纸上形 成的方式,分串式打印机与行式打印机。按所采用的技术,分柱形、球形、喷墨式 、热敏式、激光式、静电式、磁式、发光二极管式等打印机。 因此我还了解到如果打印机无法打印怎么办? 一、打印机联机 在大多数打印机上都有一个"ONLINE"指示灯,通常为绿色的常亮状态。当该指示灯不 亮或处于闪烁状态,说明联机不正常。请检查打印机电源开关是否打开、电缆是否 连接等。如果打印机没有处于联机状态,自然是无法打印了。 二、重新开启打印机   如果打印机处于联机状态仍无法打印文档,此时你可以重新开启打印机,不仅清除 了打印机内存,还能解决不少的打印故障。 三、将打印机设置为默认打印机 单击Windows 7"开始"菜单,指向"设备和打印机",单击打开"打印机"窗口,右键单击打印机图标 ,系统弹出快捷菜单,单击其中的"设置为默认打印机"即可。将打印机设置为默认 打印机 四、检查纸装放置 检查打印机进纸盒是否有打印纸、色带和其它必需品,硒鼓、粉盒、色带或墨粉是否 有效。 五、取消暂停打印。   打印机处于暂停打印状态也导致不能打印,在"打印机"窗口,右键单击在用的打印 机图标,然后单击以清除"暂停打印"选项前的对号" "。 六、卡纸 出现卡纸时,大部分情况下,关闭打印机,轻轻将卡纸取出即可;根据打印机屏幕或 者电脑屏幕上会出现处理卡纸的提示,按照提示一步一步操作,就能恢复正常打印 。(下图以HP机器为例进行演示) 卡纸操作演示: 七、打印头堵塞 打印头堵塞有三种方法进行解决,首先查看墨水,判断墨水是否用完,若用完,及时 更换新墨盒;用打印机的喷嘴检查程序,看打印结果是否严重断线,可用内置的喷 头清洁程序来让堵塞喷头恢复正常;或是将墨盒取出来进行手工来清洗。 八、程序生成的输出不正确导致不能打印 要确定程序生成的输出能否正确,能够采用通过其他程序打印文档的方法验证,在" 记事本"或"写字板"中键入几行文字,然后单击"文件"菜单上的"打印"。如果不能够 打印测试文档,可能是你使用的程序有问题,请重新安装程序。 九、重新安装打印机驱动程序。   有时,打印机驱动程序可能被损坏,从而引发无法打印文档的错误。我们可以重新 安装合适的驱动程序,然后再打印。在"打印机"窗口,右键单击打印机图标,再单 击"删除设备"。如果系统提示"删除这台打印机的专用文件",请单击"是"按钮;在 "设备和打印机"窗口,双击"添加打印机"图标,打开"添加打印机向导",单击"下一 步"按钮,然后执行屏幕指令。 十、杀毒 不定期对电脑进行杀毒 检查是否存在病毒,用杀毒软件进行杀毒。 如经过上述检查还是无法打印,有可能是打印机损坏,请将打印机送修。 不管是激光打印机还是喷墨打印机,在进行搬动或剧烈移动时,必须先把打印机关 闭,然后断开电源线缆,避免损坏机器。 根据科学的快速发展,在相比速印机的近一个基础上,我们可以通过对电脑的连接 直接打印所需要的文档,对其进行排版等一切操作。 紧跟着办公设备的逐渐完善,在企事业单位也带来了它便利的一面,为我们办公室 的工作人员节省了不少时间,而且

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧