如何用C#控制twain。dll实时接收扫描完的信息,而不是一次扫描的信息一次回传

问题描述

现在用C#写了控制twain.dll的方法,借鉴了大神的代码,但现在出现了一个问题,现在数据的回传方式是通过windows监听系统消息来完成,在扫描仪完成一次扫描之后(不管是一张,2张,还是更多),扫描仪没有待扫描的文件后,才返回可以接受信息的信号,大大的延迟了有没有办法,实现扫描仪扫描完一张就即使返回数据,也就是每扫描完一张返回一次数据,跪求大神帮忙解惑,现有的代码如何boolIMessageFilter.PreFilterMessage(refMessagem){TwainCommandcmd=tw.PassMessage(refm);if(cmd==TwainCommand.Not)returnfalse;switch(cmd){caseTwainCommand.CloseRequest:{EndingScan();tw.CloseSrc();break;}caseTwainCommand.CloseOk:{EndingScan();tw.CloseSrc();break;}caseTwainCommand.DeviceEvent:{break;}caseTwainCommand.TransferReady:{ArrayListpics=tw.TransferPictures();picnumber++;//图像处理方法}break;}}returnfalse;}///<summary>///传递消息///</summary>///<paramname="m"></param>///<returns></returns>publicTwainCommandPassMessage(refMessagem){if(srcds.Id==IntPtr.Zero)returnTwainCommand.Not;intpos=GetMessagePos();winmsg.hwnd=m.HWnd;winmsg.message=m.Msg;winmsg.wParam=m.WParam;winmsg.lParam=m.LParam;winmsg.time=GetMessageTime();winmsg.x=(short)pos;winmsg.y=(short)(pos>>16);Marshal.StructureToPtr(winmsg,evtmsg.EventPtr,false);evtmsg.Message=0;TwRCrc=DSevent(appid,srcds,TwDG.Control,TwDAT.Event,TwMSG.ProcessEvent,refevtmsg);if(rc==TwRC.NotDSEvent)returnTwainCommand.Not;if(evtmsg.Message==(short)TwMSG.XFerReady)returnTwainCommand.TransferReady;if(evtmsg.Message==(short)TwMSG.CloseDSReq)returnTwainCommand.CloseRequest;if(evtmsg.Message==(short)TwMSG.CloseDSOK)returnTwainCommand.CloseOk;if(evtmsg.Message==(short)TwMSG.DeviceEvent)returnTwainCommand.DeviceEvent;returnTwainCommand.Null;}

解决方案

解决方案二:
怎么没人,求大神,求帮顶,自己顶
解决方案三:
怎么没人,求大神,求帮顶,自己顶
解决方案四:
晕.扫描仪扫描完,不是保存成PDF格式吗每扫描一张就去获取文件是要闹哪样,文件根本不完整啊
解决方案五:
即使不是PDF格式,而是tif图片格式你通信的时候也是要把图片都弄出来,再比对哪些曾经读取过了,哪些没有读取过难道有方法只读取刚刚扫描的文件?等文件完整了一次性读取不是更有效率吗
解决方案六:
引用4楼Z65443344的回复:

即使不是PDF格式,而是tif图片格式你通信的时候也是要把图片都弄出来,再比对哪些曾经读取过了,哪些没有读取过难道有方法只读取刚刚扫描的文件?等文件完整了一次性读取不是更有效率吗

现在是要做一个,试卷扫描系统,扫描仪上放置一沓试卷,扫描完一张,程序接收数据,对接收的数据进行处理,这样扫描到有问题的试卷可以及时处理,而不用等待所有扫描完了再处理
解决方案七:
这个问题很值得解决啊,工作效率能够大大的提升,同样求解,现金答谢,请私信我
解决方案八:
从你贴出的代码,什么主要逻辑都看不出。既然你贴不出主要的逻辑,我就知道你为什么会提出这个问题了。建议你找会调用这个代码的、当初的程序员来重新设计程序。你贴出的代码根本没有你的问题所涉及的部分的逻辑。我给你打一个比方,你就明白我给你的是什么提示。比如说有一个土石方工程需要3个拖拉机操作,你现在问“请问怎样才能让3个拖垃圾合理安排工作进度而不相互影响使用?”,然后你就贴出了3台拖拉机的操作说明书。你贴出这种说明书,说明你根本不是能够负责土石方工程的那几个人之一,而只是临时找来的。
解决方案九:
这个我曾经使用过,本来就是扫描一张保存一张图片的。
解决方案十:
你能共享一下代码吗,我现在也在做twain扫描仪,你有找到那个twain扫描仪控件吗,你用的是那个dll文件啊?
解决方案十一:
你现在能不显示用户界面来设置扫描仪的参数?比如分辨率和扫描的是彩色,黑白还是灰度?
解决方案十二:
这个不需要采用windows监听吧twain都是扫描一张保存一张的

时间: 2024-09-18 23:23:29

如何用C#控制twain。dll实时接收扫描完的信息,而不是一次扫描的信息一次回传的相关文章

通过串口实时接收短消息

一年前本人曾写过"通过串口收发短消息(上).(下)"两篇文章,讨论了在TE(PC.单片机系统等)上利用扩展的AT指令控制ME(手机,GSM模块等)发送和接收短消息的基本方法.其中接收/阅读短消息采用主动查询的方法.TE发送"AT+CMGL"指令,ME则输出已接收和存储的短消息.这比较符合AT指令集的精神:有问有答,一问一答.但在实际应用中,发现这种方法存在一定的缺点: ME接收到消息并存储起来,待查询时再传输到TE,中间总会有一段时间的延迟.这个延迟取决于查询间隔.

如何用javascript控制上传文件的大小?

javascript|控制|上传 如何用javascript控制上传文件的大小? --------本文讲的是用javascript和在IE下Image的一些属性如(fileSize,fileUpdatedDate)等控制上传文件的大小.   <form   name=Myform  >     <input   type=file   name=photo><br/>     <input   type=submit   value=submit></

如何用CSS控制网页背景

在符合标准的网页设计中如何用CSS控制网页的背景呢?包括背景的颜色,背景的图片等一些问题,在本教程中一次给你讲清楚. ·背景颜色 background-color 我想这个我就不用多做介绍了,颜色代码我想大家都知道的,不是用英文来代替就是用指定的代码来表示的.这个的默认值是transparent(透明色). 例:body{background-color:yellow} H1{background-color:#000000} ·背景图片 background-image 背景图片和背景颜色在H

为什么扫描仪运行时提示TWAIN.DLL错误

问:你好,我的清华紫光6C和爱克发扫描仪都无法在Windows XP下正常使用,驱动程序安装一切正常,并且按照提示也重新启动了机器.但是在"控制面板"中的"扫描仪和照相机"选项里是空的,没发现新安装的扫描仪.奇怪的是,在PhotoShop中可以调用MiraScan v3.42设备,只不过扫描时提示:软件调用TWAIN.DLL文件错误.这是为什么?难道Windows XP已经不兼容并口扫描仪了吗? 答:事实上你的驱动程序已经安装成功,只不过Windows XP似乎&q

线程-android怎么实现蓝牙实时接收数据 inputstream

问题描述 android怎么实现蓝牙实时接收数据 inputstream 2C 现在在做一个APP 单片机通过蓝牙模块 将数据发送到手机上并显示现在搜索蓝牙 配对 连接都没问题但是做到接收数据这一步的时候遇到了一些问题首先是 调用inputstream函数的时候 程序会阻塞(我也看了资料说是放到线程里 但是放进去之后 却不能实时接收了 或者说是不能接收完全)然后是 我想设置一个 开始接收的按钮 按一下就开始自动接收 再按另一个就停止接收 然后这一部分又怎么实现 有没有大神可以帮我?求助!(我现在

数据传输-C#如何实现从机可以实时接收主机持续发送的数据?

问题描述 C#如何实现从机可以实时接收主机持续发送的数据? 主机一直在重复发送数据,我要实时读取,并从数据中截取控制信号源的命令,我直接用socket读取吗?read()读取的是实时的吗,我如何把这些数据存下来解析?有点乱...求各位大神指点,谢谢 解决方案 数据量不是非常大,用wcf双工通讯就可以,代码简单. 解决方案二: read() 一直读,同时把数据放入一个缓冲区中,然后你解析,获取到对应的数据,从中按规则截取对应的命令等,你还可以写入文件来解析都可以 解决方案三: 异步读取,用正则表达

求解如何用键盘控制图片移动方向

问题描述 求解如何用键盘控制图片移动方向 按方向键,一次移动100个像素 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class exam extends JFrame { JLabel jl=null; ImageIcon img=null; public exam() { String path="./photos/car.jpg"; img=new ImageIcon(path)

ava-如何使用UDP实时接收接收数据?

问题描述 如何使用UDP实时接收接收数据? DatagramSocket ds = new DatagramSocket(10000); byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf0buf.length); ds.receive(dp); String data = new String(dp.getData() 0 dp.getLength()); ds.close(); 上面的代码可以接收UD

在开发 ppc 程序中 如何 获得网络 连接的列表(例如列出 CMWAP,CMNET 等 ), 选择用那个连接, 如何用代码控制选中的连接 进行拨号 ?

问题描述 在开发ppc程序中如何获得网络连接的列表(例如列出CMWAP,CMNET等),选择用那个连接,如何用代码控制选中的连接进行拨号?.netcf1.0或.netcf2.0能实现吗?还是用api实现???最好有详细的代码,谢谢 解决方案 解决方案二:顶解决方案三:dd解决方案四:ddd