使用C#检测打印机';中国的权力地位

使用C#检测打印机';中国的权力地位,c#,printing,wmi,C#,Printing,Wmi,我做了很多搜索,结果什么都没有。例如: 我尝试了我在这里找到的所有代码,但没有一个可以告诉打印机的电源状态是开还是关 打印机总是插上电源,有时会关机,所以我需要确保它已开机,然后再执行打印作业 真的需要一些帮助 问题更新 当我的打印机关闭时,windows仍然会将打印作业发送到print spool,我不需要这样做,因为我的客户有时会故意关闭打印机,以避免打印他不需要的内容。但windows仍然将其发送到spool,当我的客户再次打开打印机时,它会打印出他想要避免的内容 遗留代码使用kern

我做了很多搜索,结果什么都没有。例如:

我尝试了我在这里找到的所有代码,但没有一个可以告诉打印机的电源状态是开还是关

打印机总是插上电源,有时会关机,所以我需要确保它已开机,然后再执行打印作业

真的需要一些帮助

问题更新 当我的打印机关闭时,windows仍然会将打印作业发送到print spool,我不需要这样做,因为我的客户有时会故意关闭打印机,以避免打印他不需要的内容。但windows仍然将其发送到spool,当我的客户再次打开打印机时,它会打印出他想要避免的内容

遗留代码使用kernel32.dll的CreateFile函数将LPT1作为文件打开,并直接向其写入字符串以完成打印功能。它无法知道打印机的状态,它只是将字符串写入并行端口。因此,当打印机关闭时,write函数没有返回,因此之后的代码将永远不会执行


希望你能理解我在这里要做什么。我希望避免打印机关闭时打印的情况。

最后一个代码块显示了如何通过WMI检查当前状态。如果电源没有打开,它将无法使用和准备就绪,这就是您需要知道的全部。(无论是关机、脱机、网线拔下还是其他任何情况,都无关紧要-如果它不可用且未准备就绪,则无法打印到它。对吗?@KenWhite是的,我尝试过该代码,但在我的系统上,尽管我的打印机处于电源状态,但状态代码也没有什么不同。您可以通过WMI检查多种情况(在那个岗位上)。但是,我不理解您在这里的问题。Windows打印后台处理的工作方式是,我可以设置打印机,断开笔记本电脑的连接,带上它去旅行,将文档发送到打印机,然后一周后回家实际打印所有文档,因为它们仍然在打印后台。您的应用程序应该只打印;Windows将负责打印作业,用户可以处理实际获取输出所需的任何内容。@KenWhite哦,天哪,也许你可以在这里帮助我,你看,我面临的确切问题是打印假脱机,当我关闭打印机时,windows仍将作业发送到假脱机,而我使用的打印功能在打开打印机之前没有返回。现在我不需要发送p当我的打印机关闭时打印作业。你的期望是错误的。你的代码不应该关心打印机是否真的打开或关闭;它应该只打印并返回。它应该转到卷轴并坐在那里直到打印机打开;这就是它的工作方式。(如果打印机关闭、缺纸、脱机、卡纸或其他情况,您的代码不应该在意。它应该只打印,因为这是用户告诉它的。)