vb 如何获取默认打印机的状态

rivflg 2010-08-09 03:08:33
如何获取默认打印机的状态,包括缺纸、卡纸、无连接等状态,还有将某文件打印后,如何得知打印成功?
...全文
629 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2010-08-20
  • 打赏
  • 举报
回复
lxq19851204谢了
4楼代码先收藏,空下来研究下,最近太忙了....
xiemeilin 2010-08-19
  • 打赏
  • 举报
回复
http://www.mndsoft.com/blog/article.asp?id=825这是枕善居的链接,他本身也是调用c写的dll
xiemeilin 2010-08-19
  • 打赏
  • 举报
回复
我记得枕善居有个读并口的实例。
lxq19851204 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vbman2003 的回复:]
楼上可不可以示例一下vb读并口的方法?
通常这个多用C做的dll来解决.....
[/Quote]

vbman2003: 是不是这个?
Option Explicit
Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long
Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal LinAddr) As Boolean
Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean
Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean
Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean
Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean
Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean
Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean
Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean
Public IOStat As Boolean
'************************************************************
'* 函数名称:GetPrnStat *
'* 功能:根据打印机的内存地址,检测打印机的目前工作状态 *
'* 参数:lptport: 要检测的打印机的端口号,如LPT1: *
'* 返回值:打印机的工作状态值。 *
'* 0:正常 1:缺纸 2:无联系 3:异常(其他错误) *
'* 调用:本模块中的API函数InitializeWinIo和GetPortVal *
'* 备注:检测的内存地址,是在打印端口所在的基地址上加1; *
'* 作者:谷霖 *
'* LPT1口的基地址为&H378;LPT2口的基地址为&H278 *
'************************************************************
Public Function GetPrnStat(ByVal LptPort As String) As Long
Dim PrnAddr As Long
On Error Resume Next
If IOStat = False Then IOStat = InitializeWinIo()
If IOStat Then
If UCase(LptPort) = "LPT1:" Then
PrnAddr = &H379
ElseIf UCase(LptPort) = "LPT2:" Then
PrnAddr = &H279
End If
GetPortVal PrnAddr, GetPrnStat, 1
Else
GetPrnStat = &HFF
End If
GetPrnStat = GetPrnStat And &HF8
Select Case GetPrnStat
Case &H68, &H58, &H70
GetPrnStat = 1 '缺纸
Case &H78
GetPrnStat = 2 '无联系
Case &HD8
GetPrnStat = 0 '正常
Case Else
GetPrnStat = 3 '异常
End Select
End Function

'*************************************************************************
'* 函数功能:检查打印机的状态主函数 *
'* 输入参数:PrintName 要检测的打印机名称 *
'* 输出参数:checkprinterr *
'* 检查结果(0:正常 1:打印机缺纸 2:打印机无联系 3:打印机异常 *
'* 4:没有安装打印机 5:打印机名称错误) *
'*************************************************************************
Public Function CheckPrintErr(ByVal PrintName As String) As Long
'CheckPrintErr参数说明
'0:没有错误
'1:打印机无联系
'2:打印机缺纸
'3:没有安装打印机
Dim printjieguo As Long
Dim i As Long, k As Long
On Error GoTo ErrCheckPrint

If Printers.Count = 0 Then
CheckPrintErr = 4 '没有安装打印机
Exit Function
End If
'检测发票打印机是否可以联系
For i = 0 To Printers.Count - 1
If (Printers(i).DeviceName = PrintName) Then
k = k + 1
Exit For
End If
Next
If k = 0 Then '打印机名称错误
CheckPrintErr = 5
Exit Function
End If
Set Printer = Printers(i)

CheckPrintErr = GetPrnStat(Printer.Port)
Exit Function
ErrCheckPrint:
CheckPrintErr = 3
Exit Function
End Function
vbman2003 2010-08-19
  • 打赏
  • 举报
回复
楼上可不可以示例一下vb读并口的方法?
通常这个多用C做的dll来解决.....
xiemeilin 2010-08-19
  • 打赏
  • 举报
回复
要看你的打印机时什么接口的,若是并口的话可直接读并口。并口的每个针脚代表不同的意思,如果没记错的话,并口14针脚代表是否缺纸。
lyserver 2010-08-09
  • 打赏
  • 举报
回复
捕获打印错误,如:
On Error Resume Next
'基于Printer对象的打印代码
'...
Debug.Print Err.Description, Err.Number
1,listview.ZIP 演示使用listview控制, 作出资源管理器中目录树中的效果 (7KB)2,dirview.ZIP 装入整个 c 盘目录到 treeview (4KB)3,progress.ZIP 演示使用win95的进度条(3KB)4,progbar.ZIP 进度条演示(4KB)5,slider.ZIP 使用滑动控制(6KB)6,statusbar.ZIP 控制状态条的例子(10KB) 7,tabstrip.ZIP tabstrip控制的例子 (10KB)8,treeview.ZIP 存储/恢复treeview的例子(10KB) 9,treelist.ZIP 使用treeview和listview显示数据库的数据 (7KB)10,combohg.ZIP 改变combobox的下拉高度(2KB) 11,dragtree.ZIP 拖拉树节点的例子(7KB) 12,lvstyles.ZIP 演示listview控制的例子(27KB) 13,make_toolbar_flat.ZIP 实现浮动工具条的例子(1KB) 14,code_coolbar.ZIP ie4风格的工具条(26KB)15,djmeter.ZIP 实现进度条的例子(10KB) 16,dupes.ZIP 一个combobox的例子(3KB) 17,formdsgn.ZIP 演示改变控件的大小和移动控件的例子(9KB)18,tvcheckboxes.ZIP treeview和checkbox的例子(9KB)19,tveventcancel.ZIP 使用treeview的简单例子(12KB) 20,tvnode-hitem.ZIP 在treeview的节点处使用图形(6KB)21,timedmsg.ZIP 对windows的标准对话框还可以加上时间限制的例子(9KB)22,browsedlg.ZIP 通过对一系列的 api 及 shell32.dll 的调用来实现 windows 各种标准浏览选择对话框。此源代码为 vb4 设计。对后来版本同样适用(8KB) 23,listtips.ZIP listbox中使每一item有不同的tip(2KB) 24,newctl.ZIP 动态创建控件的例子,解决了vb5中不能"无中生有"的毛病(2KB)25,colourdg.ZIP 调用windows的颜色对话框, 不需用到"comdlg32.ocx"(3KB) 26,clipbutton.ZIP 在我们使用 vb 的 code 编辑器时,其粘贴、复制、剪切按钮能随着当前的选择情况而进行适当的调整,本程序演示了类似的功能, 作者:jin(kenj@163.net)(3KB) 27,clipview.ZIP 使用 windows 剪贴板(16KB) 28,richedit.ZIP 利用richtext实现的编辑器(3KB) 29,srchlist.ZIP 在 list 控件里进行增量查询(4KB)30,savetree.ZIP 以文件方式保存和恢复treeview(7KB)31,kenjLV1.zip ListView的API效果演示(10KB)32,txtsrch.zip 在Text中实现快速增量查询(4KB)33,TracBar.zip 滚动条模块,与 VB 的滚动条比较,该模块支持动态生成, 支持触发消息(7KB)34,treedrag.zip TreeView 中节点拖动、增加、删除等功能演示(8KB)35,wordwrap.zip 在 TextBox 中自动换行(2KB)36,combosrc.zip 在 COMBO 中的增量查询(2KB)37,progman.zip 制作安装程序必备,此模块包含的SUB及Function能帮你做出专业的安装程序(2KB)38,messageboxdemo.zip 用API调出MessageBox框!(6KB)39,associate.zip 建立关联程序的例子。本程序演示把 .bar 文件与 NotePad建立关联(3KB)40,tbar97.zip 制作的一个类似Office97的工具栏,除了不能移动外,其他都极为相似!(24KB)41,combomagic.zip 在 COMBO 中的增量查询(3KB)42,cursortest.zip 鼠标控制演示。提供了一个鼠标控制的类,包括移动、限制隐藏等功能(4KB)43,cpu.zip 监视 CPU 使用情况的例子(4KB)44,cdfind.zip 找出系统光驱的盘符(3KB)45,up.zip 数字大写转换程序(4KB)46,ktext.zip VB编程中突破64K的文本显示限制(2KB)47,menudemo.zip 使用API改变菜单,使之具有几列,如同Windows的开始菜单一样(4KB)48,clipcur.zip 限制鼠标的移动区域(2KB)49,findlist.zip 在ListBox快速搜寻字符串(5KB)50,getword.zip 读取鼠标所在位置的单词(5KB)51,filemanager.zip 文件管理器(8KB)52,mousedemo.zip 一些鼠标例子演示(3KB)53,calendar.zip 一个小小的日历程序(4KB)54,hotkey.zip VB编程中热键应用一例(3KB)55,noalt+f4.zip 去掉窗体关闭按钮 (2KB)56,cpuinf.zip 取得CPU的报告(16KB)57,viewpw.zip 密码查看器,可查看"***"的字符(7KB)58,regdemo.zip 向注册表建立关联文件(3KB)59,cipher.zip 加密/解密字符串的例子(3KB)60,browsefolders5.zip 浏览一个子目录(3KB)61,easymail.zip 文件加密/解密的例子(5KB)62,encstrings.zip 加密/解密字符串的例子(2KB)63,keybinf.zip 键盘信息报告例子(2KB)64,reginq.zip 读取注册表的例子,利用了API可读注册表中所有的项目(4KB)65,wpchanger.zip Windows墙纸更改事例 (3KB)66,vbtozip.zip 用VB压缩文件(最简单的方法)(2KB)67,anicursor.zip 演示如何使用动画光标 VB源码(7KB)68,cfdemo.zip 不用CommonDialog控件,使用API调用字体对话框 VB源码(281KB)69,cmdlgd.zip 替换 Windows 公共对话框的 DLL 和演示程序的源代码,具有HOOK 功能(86KB)70,colordlg.zip 不用CommonDialog控件,使用API调用颜色对话框 VB源码(4KB)71,commondialogs.zip Windows 公共对话框的源代码,包含文件、打印机、颜色、字体、游览对话框(7KB)72,cpuinfo.zip 得到CPU的详细信息 VB源码(16KB)73,fileprops.zip 演示如何调用 Windows 资源管理器中的文件属性对话框(7KB)74,progbar121.zip 进程杆控件的源代码。具有水平、垂直,渐变,显示文本和百分比,播放声音的功能,不会让您失望。(12KB)75,subcls328.zip 一个子类的源代码,包含菜单、MDI窗体背景等8个演示程序(46KB)76,taskbar.zip 把应用程序的图标放在任务栏的右侧,是一个控件源代码(6KB)77,vbthread.zip 用VB实现多线程 VB源码(15KB)78,ini_vb6.zip 用WindowsAPI访问INI文件(8KB)79,syshotkey.zip 创建一个系统级的热键,无论你的程序是否获得焦点热键不生效 (4KB)80,win98mi.zip Win98多显示器支持演示(31KB)81,message.zip 拦截Windows消息(8KB)82,viewdoc.zip 用系统默认程序查看并打印文档 (7KB)83,srcset.zip 改变屏幕到16位彩色的演示 (2KB)84,moduleini.zip 访问、修改INI的函数(1KB)85,listapp.zip 枚举系统正在运行的程序(包括隐含的) (5KB)86,hidebtn.zip 隐藏Win9X中任务栏上的“开始”按钮(2KB)87,win95grp.zip 获得Windows9X下开始|程序中所有的程序组(16KB)88,clipview.zip 如何查看剪贴板中的带格式文本 (42KB)89,sysinfo.zip 获得系统的信息:硬盘、显示器、内存... (3KB)90,zm.zip 取得计算机中所有Modem的名称(2KB)91,custmnu2.zip 又一个菜单的例子(5KB)92,collSRC.zip 程序收集1.0版 (214KB)93,countdown.zip 一个倒计时的程序(10KB)94,00951404.zip 利用热键操作实现一键通(55KB)95,system_v.zip 系统监视器,可以实时监视正在运行的程序,并关闭他(29KB)
API之网络函数1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件 DeviceIoControl 对设备执行指定的操作 DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 FindFirstFile 根据文件名查找文件 FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区 FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 GetBinaryType 判断文件是否可以执行 GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 GetCurrentDirectory 在一个缓冲区中装载当前目录 GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 GetDriveType 判断一个磁盘驱动器的类型 GetExpandedName 取得一个压缩文件的全名 GetFileAttributes 判断指定文件的属性 GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 GetFileSize 判断文件长度 GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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