VintaSoft Twain .NET SDK 15.3: Руководство для .NET разработчика
Vintasoft.WpfTwain Namespace / Device Class / PerformTwainCommand(TwainDataGroup,UInt16,TwainMessage,IntPtr) Method
Синтаксис Example Требования Смотрите также
В этом разделе
    PerformTwainCommand(TwainDataGroup,UInt16,TwainMessage,IntPtr) Метод (Device)
    В этом разделе
    Выполняет команду TWAIN.
    Синтаксис
    'Declaration
    
    Public Function PerformTwainCommand( _
    ByVal group
    Идентификатор группы данных команды.
    As TwainDataGroup, _
    ByVal dataArgumentType
    Тип объекта, который необходимо передать в качестве параметра данных.
    As UShort, _
    ByVal twainMessage
    Тип сообщения, которое должно быть отправлено на устройство.
    As TwainMessage, _
    ByRef data
    Указатель на данные команды.
    As IntPtr _
    ) As TwainReturnCode

    Parameters

    group
    Идентификатор группы данных команды.
    dataArgumentType
    Тип объекта, который необходимо передать в качестве параметра данных.
    twainMessage
    Тип сообщения, которое должно быть отправлено на устройство.
    data
    Указатель на данные команды.

    Return Value

    Код возврата TWAIN.
    Пример

    Вот C#/VB.NET код, который демонстрирует, как получить значение возможности XferCount с помощью команды TWAIN.

    
    ''' <summary>
    ''' Contains information about TWAIN capability.
    ''' </summary>
    <System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack:=2)>
    Private Class TwainCapability
        Friend Cap As System.UInt16
        Friend ConType As System.Int16
        Friend Handle As System.IntPtr
    End Class
    
    ''' <summary>
    ''' Contains information about single TWAIN value.
    ''' </summary>
    <System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack:=2)>
    Private Class TwainOneValue
        Friend ItemType As Short
        Friend Item As System.UInt32
    End Class
    
    ''' <summary>
    ''' Performs a TWAIN command for getting value of XferCount capability.
    ''' </summary>
    Public Shared Sub GetXferCountValueUsingTwainCommand(device As Vintasoft.Twain.Device)
        ' open the device
        device.Open()
    
        ' create TWAIN capability
        Dim twainCapability As New TwainCapability()
        twainCapability.Cap = CUShort(Vintasoft.Twain.DeviceCapabilityId.XferCount)
        twainCapability.ConType = CShort(Vintasoft.Twain.TwainValueContainerType.OneValue)
        twainCapability.Handle = System.IntPtr.Zero
    
        ' create container in not managed memory for TWAIN capability
        Dim twainCapabilitySize As Integer = System.Runtime.InteropServices.Marshal.SizeOf(twainCapability)
        Dim twainCapabilityPtr As System.IntPtr = System.IntPtr.Zero
        Try
            twainCapabilityPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(twainCapabilitySize)
            System.Runtime.InteropServices.Marshal.StructureToPtr(twainCapability, twainCapabilityPtr, True)
    
            ' perform TWAIN command
            Dim result As Vintasoft.Twain.TwainReturnCode = device.PerformTwainCommand(Vintasoft.Twain.TwainDataGroup.Control, CUShort(Vintasoft.Twain.TwainDataArgumentType.Capability), Vintasoft.Twain.TwainMessage.[Get], twainCapabilityPtr)
            ' if command is performed successfully
            If result = Vintasoft.Twain.TwainReturnCode.Success Then
                ' get value of TWAIN capability
                System.Runtime.InteropServices.Marshal.PtrToStructure(twainCapabilityPtr, twainCapability)
    
                ' get value of XferCount capability
                Dim twainOneValue As New TwainOneValue()
                System.Runtime.InteropServices.Marshal.PtrToStructure(twainCapability.Handle, twainOneValue)
                ' ouput value of XferCount capability
                System.Console.WriteLine(String.Format("XferCount: Type={0}, Value={1}", twainOneValue.ItemType, CInt(twainOneValue.Item)))
            Else
                ' if command is failed
                System.Console.WriteLine(String.Format("Error: {0}", result))
            End If
        Finally
            If twainCapabilityPtr <> System.IntPtr.Zero Then
                If twainCapability.Handle <> System.IntPtr.Zero Then
                    System.Runtime.InteropServices.Marshal.FreeHGlobal(twainCapability.Handle)
                End If
                System.Runtime.InteropServices.Marshal.FreeHGlobal(twainCapabilityPtr)
            End If
        End Try
    
        ' close the device
        device.Close()
    End Sub
    
    
    
    /// <summary>
    /// Contains information about TWAIN capability.
    /// </summary>
    [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 2)]
    class TwainCapability
    {
        internal System.UInt16 Cap;
        internal System.Int16 ConType;
        internal System.IntPtr Handle;
    }
    
    /// <summary>
    /// Contains information about single TWAIN value.
    /// </summary>
    [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 2)]
    class TwainOneValue
    {
        internal short ItemType;
        internal System.UInt32 Item;
    }
    
    /// <summary>
    /// Performs a TWAIN command for getting value of XferCount capability.
    /// </summary>
    public static void GetXferCountValueUsingTwainCommand(Vintasoft.Twain.Device device)
    {
        // open the device
        device.Open();
    
        // create TWAIN capability
        TwainCapability twainCapability = new TwainCapability();
        twainCapability.Cap = (System.UInt16)Vintasoft.Twain.DeviceCapabilityId.XferCount;
        twainCapability.ConType = (System.Int16)Vintasoft.Twain.TwainValueContainerType.OneValue;
        twainCapability.Handle = System.IntPtr.Zero;
    
        // create container in not managed memory for TWAIN capability
        int twainCapabilitySize = System.Runtime.InteropServices.Marshal.SizeOf(twainCapability);
        System.IntPtr twainCapabilityPtr = System.IntPtr.Zero;
        try
        {
            twainCapabilityPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(twainCapabilitySize);
            System.Runtime.InteropServices.Marshal.StructureToPtr(twainCapability, twainCapabilityPtr, true);
    
            // perform TWAIN command
            Vintasoft.Twain.TwainReturnCode result = device.PerformTwainCommand(
                Vintasoft.Twain.TwainDataGroup.Control,
                (ushort)Vintasoft.Twain.TwainDataArgumentType.Capability,
                Vintasoft.Twain.TwainMessage.Get,
                ref twainCapabilityPtr);
            // if command is performed successfully
            if (result == Vintasoft.Twain.TwainReturnCode.Success)
            {
                // get value of TWAIN capability
                System.Runtime.InteropServices.Marshal.PtrToStructure(twainCapabilityPtr, twainCapability);
    
                // get value of XferCount capability
                TwainOneValue twainOneValue = new TwainOneValue();
                System.Runtime.InteropServices.Marshal.PtrToStructure(twainCapability.Handle, twainOneValue);
                // ouput value of XferCount capability
                System.Console.WriteLine(string.Format("XferCount: Type={0}, Value={1}", twainOneValue.ItemType, (System.Int32)twainOneValue.Item));
            }
            // if command is failed
            else
            {
                System.Console.WriteLine(string.Format("Error: {0}", result));
            }
        }
        finally
        {
            if (twainCapabilityPtr != System.IntPtr.Zero)
            {
                if (twainCapability.Handle != System.IntPtr.Zero)
                    System.Runtime.InteropServices.Marshal.FreeHGlobal(twainCapability.Handle);
                System.Runtime.InteropServices.Marshal.FreeHGlobal(twainCapabilityPtr);
            }
        }
    
        // close the device
        device.Close();
    }
    
    

    Требования

    Целевые платформы: .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

    Смотрите также