C# 获取Twain 1.x安装的驱动程序列表
我正在使用nTwain library()的3.0版。我需要获得Twain 1.x驱动程序的列表,而不是默认的Twain 2.x驱动程序。下面是我用来获取列表的代码:C# 获取Twain 1.x安装的驱动程序列表,c#,.net,twain,C#,.net,Twain,我正在使用nTwain library()的3.0版。我需要获得Twain 1.x驱动程序的列表,而不是默认的Twain 2.x驱动程序。下面是我用来获取列表的代码: List<string> tempScanners = new List<string>; System.Diagnostics.FileVersionInfo appVer = System.Diagnostics.FileVersionInfo.GetVersi
List<string> tempScanners = new List<string>;
System.Diagnostics.FileVersionInfo appVer = System.Diagnostics.FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location);
TWIdentity appId = TWIdentity.Create(DataGroups.Image, new Version(appVer.ProductMajorPart, appVer.ProductMinorPart),
appVer.CompanyName, appVer.ProductName, appVer.InternalName, new Guid().ToString());
TwainSession m_twain = new TwainSession(appId);
m_twain.DataTransferred += Twain_DataTransferred;
m_twain.SourceDisabled += Twain_SourceDisabled;
m_twain.TransferReady += Twain_TransferReady;
//TODO: how to set for Twain 1.x drivers instead of 2.x drivers
m_twain.Open();
foreach (var src in m_twain.GetSources())
{
tempScanners.Add(src.Name);
}
List=newlist;
System.Diagnostics.FileVersionInfo appVer=System.Diagnostics.FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location);
TWIdentity appId=TWIdentity.Create(DataGroups.Image,新版本(appVer.ProductMajorPart,appVer.ProductMinorPart),
appVer.CompanyName、appVer.ProductName、appVer.InternalName、新Guid().ToString());
TwainSession m_twain=新TwainSession(appId);
m_twain.datatransfer+=twain_datatransfer;
m_twain.SourceDisabled+=twain_SourceDisabled;
m_twain.TransferReady+=twain_TransferReady;
//TODO:如何设置Twain 1.x驱动程序而不是2.x驱动程序
m_twain.Open();
foreach(m_twain.GetSources()中的var src)
{
添加(src.Name);
}
有点惊讶,你确定没有看到1.X驱动程序吗?我相信数据源仍然安装在C:\Windows\twain\u 32
(或twain\u 64)文件夹中。twain 2.X规范确实需要与1.X一起使用,因此twaindsm.dll应该处理这个问题,而NTwain没有做任何事情来修改我所看到的行为。除了使用旧的或新的dsm,我在NTwain中没有看到任何明确的检查
public static ReturnCode DsmEntry(
TWIdentity origin,
Message msg,
TWIdentity data)
{
if (Platform.IsWin)
{
if (Platform.UseNewDSM) { return NativeMethods.DsmWinNew(origin, IntPtr.Zero, DataGroups.Control, DataArgumentType.Identity, msg, data); }
else { return NativeMethods.DsmWinOld(origin, IntPtr.Zero, DataGroups.Control, DataArgumentType.Identity, msg, data); }
}
else if (Platform.IsLinux)
{
return NativeMethods.DsmLinux(origin, IntPtr.Zero, DataGroups.Control, DataArgumentType.Identity, msg, data);
}
throw new PlatformNotSupportedException();
}
作为一个实验,我会尝试将平台设置为使用旧的DSM,看看数据源是否不同。我只是有点怀疑1.X驱动程序是否没有被看到
编辑
我有点感兴趣,开始深入研究我的NTwain版本,非常有趣,我注意到检查了
Identity.ProtocolMajor
,看它是否是2.0…这不太好。2.3规范甚至警告说这是不够的,因为我相信这只是由驱动程序编写器设置为通常的值。我们需要的是查看是否有任何东西映射到DF_DS2的TW_Identity.SupportedGroups 似乎只要您安装了Twain 2.x数据源文件,nTwain就会使用它。如果删除它,则使用twain_32.dll使用1.0源代码。在nTwain中似乎没有任何方法可以通过设置来控制这一点。