我在我的应用程序中使用http://www.codeproject.com/KB/dotnet/twaindotnet.aspx?msg=1007385#xx1007385xx中的.NET TWAIN代码.当我没有插入扫描仪时尝试扫描图像时,应用程序会冻结.
如何使用TWAIN驱动程序检查设备是否已插入?
也许我的问题太过于字面意思,但是使用TWAIN API,无法检查设备是否已插入,即连接和打开电源.TWAIN标准确实为此目的定义了一个称为CAP_DEVICEONLINE的功能,但是这个功能设计得很差,因此很少有驱动程序正确实现它,因此在实践中它是无用的.
最接近的是:打开设备(MSG_OPENDS):几乎所有驱动程序在打开时都会检查设备就绪,并向用户显示错误对话框.没有用于抑制或检测此对话框的TWAIN机制某些驱动程序将允许用户更正问题并继续,在这种情况下,您(您的应用程序)将永远不会知道存在问题.一些驱动程序将允许用户取消,在这种情况下MSG_OPENDS操作将失败,可能返回TWRC_CANCEL但可能是TWRC_FAILURE
即使设备处于脱机状态,一些TWAIN驱动程序也会毫无错误地打开.这样的驱动程序可能会返回FALSE到CAP_DEVICEONLINE的查询.当您使用MSG_ENABLEDS启用设备时,这样的驱动程序可能会执行设备在线检查,然后如果设备不在线,则会向用户提供错误对话框,依此类推.
除了和IMPO:WIA"更现代",但扫描的全面性也不如TWAIN,而且我的经验无法用于文档进纸器的多页扫描.WIA的设计师和维护者似乎不了解或关心除低端消费者平板之外的扫描仪.这对相机很有用.