在不使用API​​ UI菜单的情况下设置默认TWAIN数据源

时间:2013-05-15 02:45:22

标签: twain twaindotnet

在C#中使用twaindotnet库,我想知道是否有办法使用库设置默认数据源。

作为一种微弱的尝试,我尝试将SetDefault方法添加到DataSourcetwaindonet,就像这样

    public static void SetDefault(Identity applicationId, IWindowsMessageHook messageHook, DataSource newDataSource)
    {
        var defaultSourceId = newDataSource.SourceId;

        // Attempt to get information about the system default source
        var result = Twain32Native.DsmIdentity(
            applicationId,
            IntPtr.Zero,
            DataGroup.Control,
            DataArgumentType.Identity,
            Message.Set,
            defaultSourceId);

        if (result != TwainResult.Success)
        {
            var status = DataSourceManager.GetConditionCode(applicationId, null);
            throw new TwainException("Error getting information about the default source: " + result, result, status);
        }
    }

DataSourceManage类调用,如此

    public void SelectSource(DataSource dataSource)
    {
        DataSource.Dispose();
        DataSource.SetDefault(ApplicationId, _messageHook, dataSource);
    }

但是当我尝试使用SetDefault时,Twain32Native.DsmIdentity总会导致Failure被返回。

我基本上是从SetDefault setDefaultDataSource方法复制pTW_IDENTITY TwainApp::setDefaultDataSource(unsigned int _index) { if(m_DSMState < 3) { cout << "You need to open the DSM first." << endl; return NULL; } else if(m_DSMState > 3) { PrintCMDMessage("A source has already been opened, please close it first\n"); return NULL; } if(_index >= 0 && _index < m_DataSources.size()) { m_pDataSource = &(m_DataSources[_index]); // set the specific data source TW_UINT16 twrc; twrc = _DSM_Entry( &m_MyInfo, 0, DG_CONTROL, DAT_IDENTITY, MSG_SET, (TW_MEMREF) m_pDataSource); switch (twrc) { case TWRC_SUCCESS: break; case TWRC_FAILURE: printError(0, "Failed to get the data source info!"); break; } } else { return NULL; } return m_pDataSource; }

{{1}}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

可能的原因是您的TWAIN DSM版本太低。只有DSM 2.0或更高版本支持设置默认的TWAIN数据源。