C# 获取Twain 1.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

我正在使用nTwain library()的3.0版。我需要获得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);
        }
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中似乎没有任何方法可以通过设置来控制这一点。