- 原讨论链接:http://community.youkuaiyun.com/expert/topicview1.asp?id=316297
- 所属论坛:VCL组件开发及应用 审核组:Delphi
- 提问者:szchengyu 解决者:
- 感谢:acptvc
- 关键字:函数 调用 Delphi VCL组件开发及应用 参考 打印机 联机 pprinterinfo dwneeded getprinter hprinter spooler
- 答案:
我想在任何时候查询打印的状态,包括是否联机、缺纸;怎么查询?
我用GetPrinter,查到的状态总是差半拍
--------------------------------------------------------------- 首先感谢使用微软产品。
在VC++ 6.0中实现与打印机相关的功能可以通过调用Win32 Spooler库中的函数实现。这些函数的定义在Winspool.h中,这些函数的参考手册可以见MSDN中Platform SDK->Graphics and Multimedia Services->Windows GDI->Printing and Print Spooler。以下举例说明。假设现在有一台网络打印机,URL是"//MyServerName/SharedPrinterName"。如果需要查询这台打印机是否缺纸,可以通过以下函数实现:
BOOL isOutOfPaper(){
HANDLE hPrinter=0;
DWORD dwNeeded=0;
PRINTER_INFO_2* pPrinterInfo= (PRINTER_INFO_2 *)malloc( 0 );
::OpenPrinter("////MyServerName//SharedPrinterName",&hPrinter,NULL);
if(!::GetPrinter(hPrinter,2,(LPBYTE)pPrinterInfo,0,&dwNeeded)){
pPrinterInfo= (PRINTER_INFO_2 *)malloc( dwNeeded );
::GetPrinter(hPrinter,2,(LPBYTE)pPrinterInfo,dwNeeded,&dwNeeded);
}
::ClosePrinter(hPrinter);
if(pPrinterInfo->Status==PRINTER_STATUS_PAPER_OUT){
free(pPrinterInfo);
return TRUE;
}else{
free(pPrinterInfo);
return FALSE;
}
}
其中OpenPrinter()用于获得一个打印机句柄,GetPrinter()用于获得打印机相关信息。关于Win32 Spooler的更详细的功能和使用方法请参考前面提到的MSDN中的有关章节。关于Win32 Spooler中函数调用需要注意的地方请参考http://support.microsoft.com/support/kb/articles/Q158/8/28.asp。
希望我的回答能够令您满意。
- 微软全球技术中心 VC技术支持
本贴子仅供优快云的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
相关推荐
深入解析NRF52832安全DFU Bootloader实现机制与蓝牙OTA升级流程
本文深入解析了NRF52832芯片安全DFU Bootloader的实现机制与蓝牙OTA升级流程。详细阐述了Bootloader的核心概念、双区升级策略、源码初始化流程以及蓝牙DFU服务的数据传输协议,并提供了从环境搭建、密钥生成到编译烧录、生成升级包的完整实战指南,帮助开发者构建安全可靠的无线固件更新系统。
利用GetPrinter()函数可获得当前打印机信息
利用GetPrinter()函数可获得当前打印机信息void __fastcall GetPrinter(char * ADevice, char * ADriver, char * APort, int &ADeviceMode)说明调用 GetPrinter 来获取当前打印机信息. ADevice 参数 是一个接收当前打印机设备名称的缓存。这就是显示在打印机管理器中的名称,如“Epson FX
数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现
前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;
GetPrinter 获取到的状态为 0
HANDLE hPrinter=0; DWORD dwNeeded=0; PRINTER_INFO_2* pPrinterInfo= (PRINTER_INFO_2 *)malloc( 0 ); /*此处应判断返回值*/::OpenPrinter("Samsung SCX-4200 Series",&hPrinter,NULL); if(!::GetPrinter(hPrinter,...
SAP成本控制范围配置全流程:从货币参数到标准层次(附2024最新SPRO路径)
本文详细拆解了SAP成本控制范围(Controlling Area)的完整配置流程,涵盖从货币与估价参数文件定义、参数文件分配到控制范围,再到成本中心标准层次创建等核心步骤。文章提供了2024年最新的SPRO导航路径和实战配置要点,帮助顾问构建稳健、可扩展的管理会计基础架构,并附有常见问题排查指南。
Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析
历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!
C#查看打印机状态(缺纸)
项目需要,使用了研科的T91型号热敏打印机。打印机有缺纸的指示灯,缺纸时windows的打印机状态也能表示是缺纸。 下面的代码能够取得该打印机的状态。 公司另外一台老的夏普打印机,缺纸时windows的打印机状态没有任何显示,也无法通过下面的代码取得打印机状态。 注:代码是在网上查找组合起来的。 前提:1. 在form上追加一个printdo
15、远程操作水下航行器(ROV)的非线性控制系统设计
本文探讨了远程操作水下航行器(ROV)的非线性控制系统设计,重点介绍了多变量PID控制、改进的PD控制和滑模控制三种方法。详细阐述了各控制策略的原理、建模与仿真过程,并通过对比分析其在稳态误差、振荡、抖振及跟踪效果等方面的性能表现。文章还提出了针对不同控制方法的优化建议,并给出了选择合适控制策略的决策流程,为ROV高精度运动控制提供了系统性解决方案。
打印机脱机检测实战:GetPrinter与PRINTER_INFO_2解析
打印机状态检测是办公自动化和设备运维中的常见需求,然而“脱机”状态并非单一标志位能简单判断。在Windows打印体系中,PRINTER_INFO_2结构中的Attributes与Status字段分别承载持久属性和即时状态,GetPrinter与EnumPrinters则是获取这些信息的核心API。理解两者的语义差异,并结合端口类型与链路探测,才能避免USB或网络打印机的误判。本文从API选型、权限处理、多场景实测到常见采坑,系统性地给出在VC++环境下实现可靠脱机检测的完整方案,适用于打印监控工具开发与系统
ViT 实战 万字全攻略:从图像分类到医学影像,Transformer 重塑视觉 AI
摘要:本文深度解析 ViT(Vision Transformer)算法在视觉任务中的原理与实践,涵盖图像分类、目标检测、语义分割及医学影像分析四大领域。从理论出发,详细拆解图像分块、位置编码、Transformer 编码器等核心机制;通过 PyTorch 与 Timm 库实现模型构建、训练与优化,提供 CIFAR-10、Pascal VOC、Cityscapes 及医学数据集的完整代码示例。针对工业级部署,重点介绍模型量化、TensorRT 加速、Flask API 开发及 Docker 容器化方案。
开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)
阿里云推出国内首个集成“快思考”与“慢思考”能力的 Qwen3-8B 大语言模型,以80亿参数和 128K 上下文支持,重塑AI应用边界并助力开发者高效部署
VC++获取打印机脱机/连接状态:EnumPrinters与GetPrinter实战解析
在Windows桌面开发与运维监控中,打印机状态采集是常被低估的技术难点。许多开发者以为调用API即可获得实时状态,却常常遇到设备断电后状态字段仍显示正常的尴尬。理解Windows打印系统的工作机制,是准确判断脱机与连接状态的前提。系统通过端口监视器、驱动与打印后台服务逐层汇总状态,最终以位掩码形式暴露给应用层。掌握EnumPrinters与GetPrinter等Win32 API的组合用法,结合PRINTER_INFO_2结构体中的Status与Attributes字段,能够构建轻量、高效的监控方案。该方
14.建立时间、保持时间以及vivado时序report的参考使用
在设计数字系统时,需要仔细考虑电路元件的选择和布局以及时序设计来满足建立时间和保持时间的要求。建立时间,又称为建立时间窗口或建立期,是指数字信号在触发器的时钟信号前沿到来之前,必须已经稳定存在的时间。在本章节将结婚扫建立时间和保持时间的基本原理,以及如何通过vivado处理建立时间和保持时间。通过使用同步电路,可以更好地控制数据传输的时序并满足建立时间和保持时间的要求。例如,在D触发器中,选择具有适当充电和放电特性的D端口元件可以确保在时钟信号前沿到达前数据已经稳定存在,并在时钟信号前沿到达后保持稳定。
java行距getprinter_java 打印 类似打印存折的打印
java 打印 类似打印存折的打印前段时间由于需要做了个打印,主要是打印学生证。需求很简单,就是在规定的坐标点打印规定的内容即可。为了实现,却费尽了周折,不过还好,在大家的帮助下,终于实现了最终想要的功能。其代码如下:package yourPackage;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;imp...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
win32print的API介绍
win32print的API介绍,官网地址Module win32print OpenPrinter 打开指定的打印机,并获取打印机的句柄 GetPrinter 取得与指定打印机有关的信息 SetPrinter 对一台打印机的状态进行控制 ClosePrinter 关闭一个打开的打印机对象 AddPrinterConnection 连接指定的打印机 DeletePrinterConnection 删除与指定打印机的连接 EnumPrinters 枚举系统中安装的打印机 ...
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
打印相关Api函数
Api函数列表 ——与打印相关 调用顺序: OpenPrinter:获取指定打印机的句柄 GetPrinter:获取打印机信息 StartDocPrinter:开始打印作业 WritePrinter:向打印机输出数据 EndDocPrinter:结束打印作业 ClosePrinter:关闭打开的打印机 Api函数名 函数说明
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
如何取得LPT端口打印机支持的 最小和最大页面大小
由于工作需要,经朋友 (DS,FT)指点,先贴工作中代码,至于使用USB端口打印机,日后再说。 TPrinterSett = record PrinterName: string; MinPaperSize: TPoint; MaxPaperSize: TPoint; end;private FPrnSett: TPrinterSett; uses Print
VC++ 判断打印机状态
// 判断打印机是否正在打印 HRESULT GetPrinterStatus(CString strPrinterName) { HRESULT hRet = E_FAIL; HANDLE hPrinter; if (!OpenPrinter(strPrinterName.GetBuffer(0), &hPrinter, NULL)) return hRet; DWORD...
如何以编程方式打印到在 MFC 中的非默认打印机
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105790245b09c0252bd7a74a2485d315d2390f07506694ea7a7d0d5d83d87f6305ac4957f7b86c65377571eb8f8dd50a8bb485582a9f5631671df65663d50edcba5154cb37e12e...
python win32print 图片_python学习笔记(win32print API介绍)
最近博主在研究用python控制打印机OpenPrinter 打开指定的打印机,并获取打印机的句柄GetPrinter 取得与指定打印机有关的信息SetPrinter 对一台打印机的状态进行控制ClosePrinter 关闭一个打开的打印机对象AddPrinterConnection 连接指定的打印机DeletePrinterConnection 删除与指定打印机的连接EnumPrin...
windows打印机 学习
1.微软api https://docs.microsoft.com/zh-cn/windows/desktop/printdocs/getprinter https://docs.microsoft.com/zh-cn/windows/desktop/printdocs/setprinter https://support.microsoft.com/zh-cn/help/140285/h...
delphi选择打印机:Delphi中获取打印机设备
delphi选择打印机:Delphi中获取打印机设备名和端口名 疯狂代码 http://www.CrazyCoder.cn/ :http:/www.CrazyCoder.cn/Delphi/Article11928.html uses Printers; {$IFNDEF WIN32} const MAX_PATH = 144; {$END...
获取当前打印机的名称、驱动程序、打印端口信息
以下是来自Borland公司的完整例子。请注意其中两条判断语句,这说明有时候仅仅凭getprinters并不能保证信息的正确,还需要WIN.INI的帮助。uses printers;{$IFNDEF WIN32}const MAX_PATH = 144;{ENDIF}procedure TForm1.Button1Click(Sender : TObject);var pDevice :...
获取打印机连接状态及打印任务是否错误
HANDLE PrnHandle; if (OpenPrinter("EPSON Stylus Photo R270 Series",&PrnHandle,NULL)) { unsigned char buf[8192]; DWORD dwSize; if (Get
设置打印机
void WINAPI PrintSet(LPCTSTR PrinterName, DWORD PaperSize, DWORD Height, DWORD Width, LPDWORD ret_code, LPTSTR errortext){ DEVMODE* lv_devmode; DEVMODE* lv_devmode_2; PRINTER_INFO_2
490



被折叠的 条评论
为什么被折叠?



