获取Twain 1.x安装驱动程序列表

时间:2014-10-25 21:16:21

标签: c# .net twain

我正在使用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);
        }

1 个答案:

答案 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();
    }

Twain 2.3 Spec Download

就像实验一样,我会尝试设置平台以使用旧的DSM并查看数据源是否不同。我有点怀疑是不会看到1.X驱动程序。

修改 有点兴趣,并开始深入研究我的NTwain版本,有趣的是,我注意到Identity.ProtocolMajor上的检查,看看它是否是2.0 ......这并不是很好。 2.3规范甚至警告说这还不够,因为我认为这只是由司机作家设定的。我们需要的是查看是否有任何内容映射到DF_DS2的TW_Identity.SupportedGroups。