我正在使用nTwain库的版本3.0(https://bitbucket.org/soukoku/ntwain)。我需要获取Twain 1.x驱动程序列表,而不是默认的Twain 2.x驱动程序。这是我用来获取列表的代码:
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);
}
答案 0 :(得分:1)
有点惊讶,你确定没有看到1.X司机吗?我相信数据源仍然安装在C:\Windows\twain_32
(或twain_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。