我正在使用谷歌Chrome Twain插件,实际上它已经完成了。唯一的主要问题仍然存在:该插件在Windows XP下无法运行。这不是我们想要的。
该插件使用Chrome Native Messaging在Chrome和单独的扫描过程之间建立通信,并使用TwainDotNet与TWAIN进行交互。
不幸的是,没有什么可以阻止TWAIN驱动程序向stdout / stderr发送任何文本,所以我被迫使用两阶段解决方案:本机消息传递主机的第一个进程通过stdin / stdout与Chrome通信,第二个进程与Chrome通信进程通过匿名管道与第一个进行通信,并真正完成工作(即使用TWAIN处理消息和接口)。
不知何故,第二个过程的管道成为TWAIN的问题。经过一些实验,我发现如果我不在第二个过程中创建任何管道,或者如果我创建管道但不使用它们 - 即我不读取或写入管道,一切都顺利。但是如果在管道上有一次读取或写入,则任何使用TWAIN的操作都会挂起,就像在线程中没有运行消息循环一样。
因此,我认为使用管道,我的意思是对管道执行读写操作,以某种方式打破了TWAIN正常工作所需的消息循环。
我是Windows消息处理的新手,所以
我唯一的想法是通过Windows消息实现匿名管道异步IO。因此,我将非常感谢有助于解决此问题的信息和/或建议。
插件源可以在我的GitHub存储库(解决方案TwainScan)中找到: https://github.com/ballamuth/Chrome4Net/tree/master/examples