想必各位在使用Unity做获取打印机状态的时候都会遇到一些奇奇怪怪的问题。
此处举例我引用命名空间的一系列相关问题:
using System.Printing (注:在引用该命名空间前,要确保自己的项目里有该名称的.dll文件)。
unity报的错误:
Change texterror CS0234: The type or namespace name ‘Printing’ does not exist in the namespace ‘System’ (are you missing an assembly reference?)。
解决的思路有以下几种(建议可尝试的,如果使用后解决不了就赶紧放弃):
1.在自己Unity项目中找到添加Plugins第三方插件的路径下将该.dll文件加入进去。(原因是unity项目的Packages包中没有该程序集内容)
2. 查看untiy中兼容使用的.net框架内容是否正确,路径:Edit——>Project Setting——>Player——>Configuration
。
如果以上两种解决思路都不行的话建业就别在搞其他的了,最终结果导向就是Unity版本不支持。
这个时候我们就可以考虑用使用控制台应用程序去获取该打印机状态。unity 可以直接启用第三方的.exe程序,只需要找到路径并使用Process类相关的API即可。
还有一个遗留问题
控制台应用程序得到的状态,unity中又该如何去使用这些状态呢?
这里提供一个解决思路(如果有其他适合自己的可以不考虑这个):
可以将控制台应用程序得到的状态信息以文本的形式存放到某个路径下,然后在利用unity去判断文本里的内容即可确认当前打印机当前是那种状态。
在使用控制台应用程序编写打印机状态时,建议使用PrintQueue类去解决,(微软在该类里已经大量提供了管理打印机的内容),在这里就不得不提一嘴“句柄”这个玩意儿了。
有的打印机驱动器程序会在打印机出现错误状态的时候弹出一个窗口来进行提示。如果你想要对该窗口进行设置,只要得到了这个弹窗的句柄就可以了。
得到了句柄该如何使用呢?
演示一个常用写法,将弹窗句柄缩小化:
//其中user32.dll,这里填写的是一个路径,是为了告诉编译器从哪个位置的user32.dll文件里 启用CloseWindow
//这个函数CloseWindow必须是user32.dll文件里面有提供的函数内容,如果没有会在调试过程中直接报错
//具体提供了哪些函数哪些内容可以在百度询.
//https://blog.csdn.net/qq_38406587/article/details/105505007
[DllImport("user32.dll", SetLastError = true)]
static extern bool CloseWindow(IntPtr hWnd);
以上就是关于我 在使用unity联调外部设备EPSON(爱普生)打印机遇到的一些情况和解决思路了。
如果对各位提供了帮助或者有什么疑点之类的可以友好的在下方留言讨论。
如果没有即时回复请在群里Q我。我会在认真阅读和回复!😃