VintaSoft Twain .NET SDK 15.1: Руководство для .NET разработчика
В этом разделе
    Как получить информацию обо всех опциях SANE устройства?
    В этом разделе
    Вот C#/VB.NET код, который демонстрирует, как получить информацию обо всех опциях SANE устройства:
    /// <summary>
    /// Displays information about all options of SANE device.
    /// </summary>
    public void DisplayInformationAboutAllOptionsOfSaneDevice()
    {
        // create SANE device manager
        using (Vintasoft.Sane.SaneLocalDeviceManager deviceManager = new Vintasoft.Sane.SaneLocalDeviceManager())
        {
            // open SANE device manager
            deviceManager.Open();
    
            // get count of SANE devices
            int deviceCount = deviceManager.Devices.Count;
            if (deviceCount == 0)
            {
                System.Console.WriteLine("Devices are not found.");
                return;
            }
    
            // select the first SANE device
            Vintasoft.Sane.SaneLocalDevice device = deviceManager.Devices[0];
    
            // open SANE device
            device.Open();
    
            System.Console.WriteLine("Device name: " + device.Name);
    
            // for each option of SANE device
            foreach (Vintasoft.Sane.SaneLocalDeviceOption option in device.Options)
            {
                System.Console.WriteLine(
                    string.Format("- Option Name='{0}', Title='{1}', Description='{2}', Type={3}, Unit={4}, ValueSize={5}, CanSet={6}, CanBeAutomatic={7}, IsActive={8}, Capabilities={9}",
                    option.Name,
                    option.Title,
                    option.Description,
                    option.Type,
                    option.Unit,
                    option.ValueSize,
                    option.CanSet,
                    option.CanBeAutomatic,
                    option.IsActive,
                    option.Capabilities));
    
                object value;
                try
                {
                    value = option.GetValue();
                    System.Console.WriteLine(string.Format("  DefaultValue={0}", value));
                }
                catch (System.Exception ex)
                {
                    System.Console.WriteLine("  Cannot get the default value: " + ex.Message);
                    continue;
                }
    
                switch (option.Type)
                {
                    case Vintasoft.Sane.SaneType.Integer:
                        object supportedIntValues = option.GetSupportedValues();
                        if (supportedIntValues == null)
                        {
                            System.Console.WriteLine("  Supported values are not limited.");
                        }
                        else
                        {
                            if (supportedIntValues is Vintasoft.Sane.SaneIntArray)
                            {
                                Vintasoft.Sane.SaneIntArray array = (Vintasoft.Sane.SaneIntArray)supportedIntValues;
    
                                System.Console.Write("  Supported values: ");
                                for (int i = 0; i < array.Values.Length; i++)
                                {
                                    System.Console.Write(array.Values[i] + " ");
                                }
                                System.Console.WriteLine();
                            }
                            else
                            {
                                Vintasoft.Sane.SaneIntRange range = supportedIntValues as Vintasoft.Sane.SaneIntRange;
    
                                System.Console.WriteLine("  Supported range: Min=" + range.Min + ", Max=" + range.Max + ", Step=" + range.Step);
                            }
                        }
                        break;
    
                    case Vintasoft.Sane.SaneType.Fixed:
                        object supportedFixedValues = option.GetSupportedValues();
                        if (supportedFixedValues == null)
                        {
                            System.Console.WriteLine("  Supported values are not limited.");
                        }
                        else
                        {
                            if (supportedFixedValues is Vintasoft.Sane.SaneFixedArray)
                            {
                                Vintasoft.Sane.SaneFixedArray array = (Vintasoft.Sane.SaneFixedArray)supportedFixedValues;
    
                                System.Console.Write("  Supported values: ");
                                for (int i = 0; i < array.Values.Length; i++)
                                {
                                    System.Console.Write(array.Values[i] + " ");
                                }
                                System.Console.WriteLine();
                            }
                            else
                            {
                                Vintasoft.Sane.SaneFixedRange range = supportedFixedValues as Vintasoft.Sane.SaneFixedRange;
    
                                System.Console.WriteLine("  Supported range: Min=" + range.Min + ", Max=" + range.Max + ", Step=" + range.Step);
                            }
                        }
                        break;
    
                    case Vintasoft.Sane.SaneType.String:
                        object supportedStringValues = option.GetSupportedValues();
                        if (supportedStringValues == null)
                        {
                            System.Console.WriteLine("  Supported values are not limited.");
                        }
                        else
                        {
                            Vintasoft.Sane.SaneStringArray array = supportedStringValues as Vintasoft.Sane.SaneStringArray;
                            if (array != null)
                            {
                                System.Console.Write("  Supported values: ");
                                for (int i = 0; i < array.Values.Length; i++)
                                {
                                    System.Console.Write(string.Format("'{0}' ", array.Values[i]));
                                }
                                System.Console.WriteLine();
                            }
                        }
                        break;
                }
            }
    
    
            // close SANE device
            device.Close();
    
            // close SANE device manager
            deviceManager.Close();
        }
    
        System.Console.ReadLine();
    }
    
    ''' <summary>
    ''' Displays information about all options of SANE device.
    ''' </summary>
    Public Sub DisplayInformationAboutAllOptionsOfSaneDevice()
            ' create SANE device manager
            Using deviceManager As New Vintasoft.Sane.SaneLocalDeviceManager()
                    ' open SANE device manager
                    deviceManager.Open()
    
                    ' get count of SANE devices
                    Dim deviceCount As Integer = deviceManager.Devices.Count
                    If deviceCount = 0 Then
                            System.Console.WriteLine("Devices are not found.")
                            Return
                    End If
    
                    ' select the first SANE device
                    Dim device As Vintasoft.Sane.SaneLocalDevice = deviceManager.Devices(0)
    
                    ' open SANE device
                    device.Open()
    
                    System.Console.WriteLine("Device name: " + device.Name)
    
                    ' for each option of SANE device
                    For Each [option] As Vintasoft.Sane.SaneLocalDeviceOption In device.Options
                            System.Console.WriteLine(String.Format("- Option Name='{0}', Title='{1}', Description='{2}', Type={3}, Unit={4}, ValueSize={5}, CanSet={6}, CanBeAutomatic={7}, IsActive={8}, Capabilities={9}", [option].Name, [option].Title, [option].Description, [option].Type, [option].Unit, _
                                    [option].ValueSize, [option].CanSet, [option].CanBeAutomatic, [option].IsActive, [option].Capabilities))
    
                            Dim value As Object
                            Try
                                    value = [option].GetValue()
                                    System.Console.WriteLine(String.Format("  DefaultValue={0}", value))
                            Catch ex As System.Exception
                                    System.Console.WriteLine("  Cannot get the default value: " & ex.Message)
                                    Continue For
                            End Try
    
                            Select Case [option].Type
                                    Case Vintasoft.Sane.SaneType.[Integer]
                                            Dim supportedIntValues As Object = [option].GetSupportedValues()
                                            If supportedIntValues Is Nothing Then
                                                    System.Console.WriteLine("  Supported values are not limited.")
                                            Else
                                                    If TypeOf supportedIntValues Is Vintasoft.Sane.SaneIntArray Then
                                                            Dim array As Vintasoft.Sane.SaneIntArray = DirectCast(supportedIntValues, Vintasoft.Sane.SaneIntArray)
    
                                                            System.Console.Write("  Supported values: ")
                                                            For i As Integer = 0 To array.Values.Length - 1
                                                                    System.Console.Write(array.Values(i) + " ")
                                                            Next
                                                            System.Console.WriteLine()
                                                    Else
                                                            Dim range As Vintasoft.Sane.SaneIntRange = TryCast(supportedIntValues, Vintasoft.Sane.SaneIntRange)
    
                                                            System.Console.WriteLine((("  Supported range: Min=" + range.Min & ", Max=") + range.Max & ", Step=") + range.[Step])
                                                    End If
                                            End If
                                            Exit Select
    
                                    Case Vintasoft.Sane.SaneType.Fixed
                                            Dim supportedFixedValues As Object = [option].GetSupportedValues()
                                            If supportedFixedValues Is Nothing Then
                                                    System.Console.WriteLine("  Supported values are not limited.")
                                            Else
                                                    If TypeOf supportedFixedValues Is Vintasoft.Sane.SaneFixedArray Then
                                                            Dim array As Vintasoft.Sane.SaneFixedArray = DirectCast(supportedFixedValues, Vintasoft.Sane.SaneFixedArray)
    
                                                            System.Console.Write("  Supported values: ")
                                                            For i As Integer = 0 To array.Values.Length - 1
                                                                    System.Console.Write(array.Values(i) + " ")
                                                            Next
                                                            System.Console.WriteLine()
                                                    Else
                                                            Dim range As Vintasoft.Sane.SaneFixedRange = TryCast(supportedFixedValues, Vintasoft.Sane.SaneFixedRange)
    
                                                            System.Console.WriteLine((("  Supported range: Min=" + range.Min & ", Max=") + range.Max & ", Step=") + range.[Step])
                                                    End If
                                            End If
                                            Exit Select
    
                                    Case Vintasoft.Sane.SaneType.[String]
                                            Dim supportedStringValues As Object = [option].GetSupportedValues()
                                            If supportedStringValues Is Nothing Then
                                                    System.Console.WriteLine("  Supported values are not limited.")
                                            Else
                                                    Dim array As Vintasoft.Sane.SaneStringArray = TryCast(supportedStringValues, Vintasoft.Sane.SaneStringArray)
                                                    If array IsNot Nothing Then
                                                            System.Console.Write("  Supported values: ")
                                                            For i As Integer = 0 To array.Values.Length - 1
                                                                    System.Console.Write(String.Format("'{0}' ", array.Values(i)))
                                                            Next
                                                            System.Console.WriteLine()
                                                    End If
                                            End If
                                            Exit Select
                            End Select
                    Next
    
    
                    ' close SANE device
                    device.Close()
    
                    ' close SANE device manager
                    deviceManager.Close()
            End Using
    
            System.Console.ReadLine()
    End Sub