+ Reply to Thread
Results 1 to 2 of 2

Thread: Command line twain

  1. #1
    superbem is offline VB.NET Forum Newbie superbem is on a distinguished programming path ahead
    .NET Framework
    .NET 3.0
    Join Date
    May 2007
    Posts
    22
    Reputation
    43

    Default Command line twain

    I'm trying to make a command line twain for a scanner take the image and save it with the configurations I want, but I'm in dificulties with the basic.
    I'm trying to put all the commands in the load form of the following code (I think it have all functions related to twain_32.dll).

    Is someone interested to help me finish this?

    HTML Code:
    Imports System
    Imports System.Collections
    Imports System.Runtime.InteropServices
    Imports System.Windows.Forms
    Imports System.Text
    Imports System.Drawing
    Imports System.ComponentModel
    
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Dim d As New TwainLib.Twain
    
            'Dim d As New System.IntPtr
            'd = 21
    
            Dim b As New TwainLib.Twain
            b.Init(Handle)
            b.Select()
            'b.SelectDefault()
            b.Acquire()
            'b.Acquire(TwainLib.TwSS.TwSS_A4, , , TwainLib.TwColourType.twBW)
            ' b.TransferPictures()
            Dim a As New TwainLib.TwainCommand
            a = TwainLib.TwainCommand.TransferReady
            MsgBox(a)
            'aaa.Acquire()
    
            'aaa.TransferPictures()
            Dim a1 As New TwainLib.no
            'a1 = 1
            MsgBox(a1.ToString)
            b.Dispose()
            ' d.Dispose()
        End Sub
    End Class
    
    Namespace TwainLib
    
        Public Enum TwainCommand
            [Not] = -1
            Null = 0
            TransferReady = 1
            CloseRequest = 2
            CloseOk = 3
            DeviceEvent = 4
            Failure = 5
        End Enum
    
        Public Class Twain
    
            Private hwnd As IntPtr
            Private appid As no
            Private srcds As no
            Private evtmsg As TwEvent
            Private winmsg_m As WINMSG_S
    
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMparent(<[In](), Out()> ByVal origin As no, ByVal zeroptr As IntPtr, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByRef refptr As IntPtr) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMident(<[In](), Out()> ByVal origin As no, ByVal zeroptr As IntPtr, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal idds As no) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMstatus(<[In](), Out()> ByVal origin As no, ByVal zeroptr As IntPtr, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal dsmstat As TwStatus) As TwRC
            End Function
    
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSuserif(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByVal guif As TwUserInterface) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSevent(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByRef evt As TwEvent) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSstatus(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal dsmstat As TwStatus) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DScap(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal capa As TwCapability) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSiinf(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imginf As TwImageInfo) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSixfer(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, ByRef hbitmap As IntPtr) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSpxfer(<[In](), Out()> ByVal origin As no, <[In]()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal pxfr As TwPendingXfers) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSilayout(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imglo As TwImageLayout) As TwRC
            End Function
            <DllImport("twain_32.dll", EntryPoint:="#1")> Private Shared Function DSMlayout(<[In](), Out()> ByVal origin As no, <[In](), Out()> ByVal dest As no, ByVal dg As TwDG, ByVal dat As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imglo As IntPtr) As TwRC
            End Function
    
    
            <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalAlloc(ByVal flags As Integer, ByVal size As Integer) As IntPtr
            End Function
            <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalLock(ByVal handle As IntPtr) As IntPtr
            End Function
            <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalUnlock(ByVal handle As IntPtr) As Boolean
            End Function
            <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalFree(ByVal handle As IntPtr) As IntPtr
            End Function
    
            <DllImport("user32.dll", ExactSpelling:=True)> Private Shared Function GetMessagePos() As Integer
            End Function
            <DllImport("user32.dll", ExactSpelling:=True)> Private Shared Function GetMessageTime() As Integer
            End Function
    
            <DllImport("gdi32.dll", ExactSpelling:=True)> Private Shared Function GetDeviceCaps(ByVal hDC As IntPtr, ByVal nIndex As Integer) As Integer
            End Function
            <DllImport("gdi32.dll", CharSet:=CharSet.Auto)> Private Shared Function CreateDC(ByVal szdriver As String, ByVal szdevice As String, ByVal szoutput As String, ByVal devmode As IntPtr) As IntPtr
            End Function
            <DllImport("gdi32.dll", ExactSpelling:=True)> Private Shared Function DeleteDC(ByVal hdc As IntPtr) As Boolean
            End Function
    
            Private Const CountryUSA As Short = 1
            Private Const LanguageUSA As Short = 13
    
            Public Sub New()
                appid = New no
                appid.Id = IntPtr.Zero
                appid.Version.MajorNum = 1
                appid.Version.MinorNum = 1
                appid.Version.Language = LanguageUSA
                appid.Version.Country = CountryUSA
                appid.Version.Info = "TWAIN Scanner"
                appid.ProtocolMajor = TwProtocol.Major
                appid.ProtocolMinor = TwProtocol.Minor
                appid.SupportedGroups = CType(TwDG.Image Or TwDG.Control, Integer)
                appid.Manufacturer = "Kod Efisien Sdn Bhd"
                appid.ProductFamily = "TWAIN 32 Scanner"
                appid.ProductName = "ScanSoft"
    
                srcds = New no
                srcds.Id = IntPtr.Zero
    
                evtmsg.EventPtr = Marshal.AllocHGlobal(Marshal.SizeOf(winmsg_m))
            End Sub
    
            Public Sub Dispose()
                Marshal.FreeHGlobal(evtmsg.EventPtr)
            End Sub
    
            Protected Overrides Sub Finalize()
                Marshal.FreeHGlobal(evtmsg.EventPtr)
            End Sub
    
            Public Sub Init(ByVal hwndp As IntPtr)
                Finish()
                Dim rc As TwRC = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.OpenDSM, hwndp)
                If (rc = TwRC.Success) Then
                    rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.GetDefault, srcds)
                    If (rc = TwRC.Success) Then
                        hwnd = hwndp
                    Else
                        rc = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, hwndp)
                    End If
                End If
            End Sub
    
            Public Sub [Select](Optional ByRef Model As String = "")
                Dim rc As TwRC
                CloseSrc()
                If Equals(appid.Id, IntPtr.Zero) = True Then
                    Init(hwnd)
                    If Equals(appid.Id, IntPtr.Zero) = True Then
                        Return
                    End If
                End If
                rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.UserSelect, srcds)
                Model = srcds.ProductName.ToString
            End Sub
    
            Public Sub [SelectDefault](Optional ByRef Model As String = "")
                Dim rc As TwRC
                CloseSrc()
                If Equals(appid.Id, IntPtr.Zero) = True Then
                    Init(hwnd)
                    If Equals(appid.Id, IntPtr.Zero) = True Then
                        Return
                    End If
                End If
                rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.GetDefault, srcds)
                Model = srcds.ProductName.ToString
            End Sub
    
            Public Sub Acquire(Optional ByVal PaperSize As TwSS = TwSS.TwSS_A4, Optional ByVal XScale As Single = 1, _
            Optional ByVal YScale As Single = 1, Optional ByVal SColor As TwColourType = TwColourType.twRGB, _
            Optional ByVal TopMargin As Single = 0.0, Optional ByVal LeftMargin As Single = 0.0, _
            Optional ByVal RightMargin As Single = 0.0, Optional ByVal BottomMargin As Single = 0.0, _
            Optional ByVal FrameNumber As Integer = 1, Optional ByVal PageNumber As Integer = 1, _
            Optional ByVal DocumentNumber As Integer = 1)
    
                Dim rc As TwRC
                CloseSrc()
                If Equals(appid.Id, IntPtr.Zero) = True Then
                    Init(hwnd)
                    If Equals(appid.Id, IntPtr.Zero) = True Then
                        Return
                    End If
                End If
    
                rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.OpenDS, srcds)
                If (rc <> TwRC.Success) Then
                    Return
                End If
    
                'Set Unit to Pixels
                Dim Pixels As TwUnit = TwUnit.twPIXELS
                Dim capUnit As TwCapability = New TwCapability(TwCap.IUnits, Pixels, TwType.Int16)
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capUnit)
                If rc <> TwRC.Success Then
                    CloseSrc()
                    Return
                End If
    
                ''Set X Resolution
                'Dim XResolution As Single = 1
                'Dim capX As TwCapability = New TwCapability(TwCap.XResolution, XResolution, TwType.Fix32)
    
                'rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capX)
                'If rc <> TwRC.Success Then
                '    CloseSrc()
                '    Return
                'End If
    
                ''Set Y Resolution
                'Dim capY As TwCapability = New TwCapability(TwCap.YResolution, YResolution, TwType.Fix32)
    
                'rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capY)
                'If rc <> TwRC.Success Then
                '    CloseSrc()
                '    Return
                'End If
    
                Dim xcap As TwCapability = New TwCapability(TwCap.XScaling, XScale, TwType.Fix32)
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, xcap)
                If rc <> TwRC.Success Then
                    CloseSrc()
                    Return
                End If
    
                xcap = New TwCapability(TwCap.YScaling, YScale, TwType.Fix32)
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, xcap)
                If rc <> TwRC.Success Then
                    CloseSrc()
                    Return
                End If
    
    
                Dim ps As TwCapability = New TwCapability(TwCap.SupportedSizes, PaperSize, TwType.Int16)
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, ps)
                If rc <> TwRC.Success Then
                    CloseSrc()
                    Return
                End If
    
                'Set Layout
                Dim Layout As TwImageLayout = New TwImageLayout
                rc = DSilayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Get, Layout)
                If rc <> TwRC.Success Then
                    CloseSrc()
                    Return
                End If
                If TopMargin > 0 Then
                    Layout.Frame.Top.FromFloat(CSng(TopMargin))
                End If
                If LeftMargin > 0 Then
                    Layout.Frame.Left.FromFloat(CSng(LeftMargin))
                End If
                If RightMargin > 0 Then
                    Layout.Frame.Right.FromFloat(CSng(RightMargin))
                End If
                If BottomMargin > 0 Then
                    Layout.Frame.Bottom.FromFloat(CSng(BottomMargin))
                End If
                Layout.FrameNumber = 1
                Layout.PageNumber = 1
                Layout.DocumentNumber = 1
                rc = Me.DSilayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Set, Layout)
                If rc <> TwRC.Success Then
                    CloseSrc()
                    Return
                End If
    
                'Dim ptr1 As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Layout))
                'Marshal.StructureToPtr(Layout, ptr1, False)
    
                'rc = Me.DSMlayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Get, ptr1)
                'If rc <> TwRC.Success Then
                '    CloseSrc()
                '    Return
                'End If
                ''Dim ptr2 As IntPtr = ptr1
                'Marshal.PtrToStructure(ptr1, Layout)
                'If TopMargin > 0 Then
                '    Layout.Frame.Top.FromFloat(CSng(TopMargin))
                'End If
                'If LeftMargin > 0 Then
                '    Layout.Frame.Left.FromFloat(CSng(LeftMargin))
                'End If
                'If RightMargin > 0 Then
                '    Layout.Frame.Right.FromFloat(CSng(RightMargin))
                'End If
                'If BottomMargin > 0 Then
                '    Layout.Frame.Bottom.FromFloat(CSng(BottomMargin))
                'End If
                'Layout.FrameNumber = 1
                'Layout.PageNumber = 1
                'Layout.DocumentNumber = 1
                'Marshal.StructureToPtr(Layout, ptr1, True)
    
                'rc = Me.DSMlayout(appid, srcds, TwDG.Image, TwDAT.ImageLayout, TwMSG.Set, ptr1)
    
                'If rc <> TwRC.Success Then
                '    CloseSrc()
                '    Return
                'End If
    
                'Scan Colour
                Dim Ccap As TwCapability = New TwCapability(TwCap.IPixelType, SColor, TwType.UInt16)
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, Ccap)
                If (rc <> TwRC.Success) Then
                    CloseSrc()
                    Return
                End If
    
                Dim cap As TwCapability = New TwCapability(TwCap.XferCount, 1, TwType.Int16)
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap)
                If (rc <> TwRC.Success) Then
                    CloseSrc()
                    Return
                End If
    
                Dim guif As TwUserInterface = New TwUserInterface
                guif.ShowUI = 1
                guif.ModalUI = 1
                guif.ParentHand = hwnd
                rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif)
                If (rc <> TwRC.Success) Then
                    CloseSrc()
                    Return
                End If
    
            End Sub
    
            Public Function TransferPictures() As ArrayList
                Dim pics As ArrayList = New ArrayList
                If Equals(srcds.Id, IntPtr.Zero) Then
                    Return pics
                End If
    
                Dim rc As TwRC
                Dim hbitmap As IntPtr = IntPtr.Zero
                Dim pxfr As TwPendingXfers = New TwPendingXfers
    
                Do
                    pxfr.Count = 0
                    hbitmap = IntPtr.Zero
    
                    Dim iinf As TwImageInfo = New TwImageInfo
                    rc = DSiinf(appid, srcds, TwDG.Image, TwDAT.ImageInfo, TwMSG.Get, iinf)
                    If (rc <> TwRC.Success) Then
                        CloseSrc()
                        Return pics
                    End If
    
                    'StartScan
                    rc = DSixfer(appid, srcds, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, hbitmap)
                    If (rc <> TwRC.XferDone) Then
                        CloseSrc()
                        Return pics
                    End If
    
                    rc = DSpxfer(appid, srcds, TwDG.Control, TwDAT.PendingXfers, TwMSG.EndXfer, pxfr)
                    If (rc <> TwRC.Success) Then
                        CloseSrc()
                        Return pics
                    End If
    
                    pics.Add(hbitmap)
                Loop While (pxfr.Count <> 0)
    
                rc = DSpxfer(appid, srcds, TwDG.Control, TwDAT.PendingXfers, TwMSG.Reset, pxfr)
                Return pics
            End Function
    
            Public Function PassMessage(ByVal m As Message) As TwainCommand
                If Equals(srcds.Id, IntPtr.Zero) Then
                    Return TwainCommand.Not
                End If
    
                Dim pos As Integer = GetMessagePos()
    
                winmsg_m.hwnd = m.HWnd
                winmsg_m.message = m.Msg
                winmsg_m.wParam = m.WParam
                winmsg_m.lParam = m.LParam
                winmsg_m.time = GetMessageTime()
                winmsg_m.x = pos 'CType(pos, Short)
                winmsg_m.y = Int(pos / 2 ^ 16) 'CType(Int(pos / 2 ^ 16), Short)
    
                Marshal.StructureToPtr(winmsg_m, evtmsg.EventPtr, False)
                evtmsg.Message = 0
    
                Dim rc As TwRC = DSevent(appid, srcds, TwDG.Control, TwDAT.Event, TwMSG.ProcessEvent, evtmsg)
                If (rc = TwRC.NotDSEvent) Then
                    Return TwainCommand.Not
                End If
    
                If (rc = TwRC.Failure) Then
                    Return TwainCommand.Failure
                End If
    
                If (evtmsg.Message = CType(TwMSG.XFerReady, Short)) Then
                    Return TwainCommand.TransferReady
                End If
    
                If (evtmsg.Message = CType(TwMSG.CloseDSReq, Short)) Then
                    Return TwainCommand.CloseRequest
                End If
                If (evtmsg.Message = CType(TwMSG.CloseDSOK, Short)) Then
                    Return TwainCommand.CloseOk
                End If
                If (evtmsg.Message = CType(TwMSG.DeviceEvent, Short)) Then
                    Return TwainCommand.DeviceEvent
                End If
    
                Return TwainCommand.Null
            End Function
    
            Public Sub CloseSrc()
                Dim rc As TwRC
                If Not Equals(srcds.Id, IntPtr.Zero) Then
                    Dim guif As TwUserInterface = New TwUserInterface
                    rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.DisableDS, guif)
                    rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.no, TwMSG.CloseDS, srcds)
                End If
            End Sub
    
            Public Sub Finish()
                Dim rc As TwRC
                CloseSrc()
                If Not Equals(appid.Id, IntPtr.Zero) Then
                    rc = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, hwnd)
                End If
                appid.Id = IntPtr.Zero
            End Sub
    
            Public Shared ReadOnly Property ScreenBitDepth() As Integer
                Get
                    Dim screenDC As IntPtr = CreateDC("DISPLAY", Nothing, Nothing, IntPtr.Zero)
                    Dim bitDepth As Integer = GetDeviceCaps(screenDC, 12)
                    bitDepth *= GetDeviceCaps(screenDC, 14)
                    DeleteDC(screenDC)
                    Return bitDepth
                End Get
            End Property
    
            <StructLayout(LayoutKind.Sequential, Pack:=4)> Friend Structure WINMSG_S
                Public hwnd As IntPtr
                Public message As Integer
                Public wParam As IntPtr
                Public lParam As IntPtr
                Public time As Integer
                Public x As Integer
                Public y As Integer
            End Structure
        End Class
    End Namespace
    
    Namespace TwainLib
    
        Public Class TwProtocol
            Public Const Major As Short = 1
            Public Const Minor As Short = 9
        End Class
    
    #Region " Enums "
        <Flags()> Friend Enum TwDG As Short
            Control = &H1
            Image = &H2
            Audio = &H4
        End Enum
    
        Friend Enum TwDAT As Short
            Null = &H0
            Capability = &H1
            [Event] = &H2
            no = &H3
            Parent = &H4
            PendingXfers = &H5
            SetupMemXfer = &H6
            SetupFileXfer = &H7
            Status = &H8
            UserInterface = &H9
            XferGroup = &HA
            no = &HB
            CustomDSData = &HC
            DeviceEvent = &HD
            FileSystem = &HE
            PassThru = &HF
    
            ImageInfo = &H101
            ImageLayout = &H102
            ImageMemXfer = &H103
            ImageNativeXfer = &H104
            ImageFileXfer = &H105
            CieColor = &H106
            GrayResponse = &H107
            RGBResponse = &H108
            JpegCompression = &H109
            Palette8 = &H10A
            ExtImageInfo = &H10B
    
            SetupFileXfer2 = &H301
        End Enum
    
        Friend Enum TwMSG As Short
            Null = &H0
            [Get] = &H1
            GetCurrent = &H2
            GetDefault = &H3
            GetFirst = &H4
            GetNext = &H5
            [Set] = &H6
            Reset = &H7
            QuerySupport = &H8
    
            XFerReady = &H101
            CloseDSReq = &H102
            CloseDSOK = &H103
            DeviceEvent = &H104
    
            CheckStatus = &H201
    
            OpenDSM = &H301
            CloseDSM = &H302
    
            OpenDS = &H401
            CloseDS = &H402
            UserSelect = &H403
    
            DisableDS = &H501
            EnableDS = &H502
            EnableDSUIOnly = &H503
    
            ProcessEvent = &H601
    
            EndXfer = &H701
            StopFeeder = &H702
    
            ChangeDirectory = &H801
            CreateDirectory = &H802
            Delete = &H803
            FormatMedia = &H804
            GetClose = &H805
            GetFirstFile = &H806
            GetInfo = &H807
            GetNextFile = &H808
            Rename = &H809
            Copy = &H80A
            AutoCaptureDir = &H80B
    
            PassThru = &H901
        End Enum
    
        Friend Enum TwRC As Short
            Success = &H0
            Failure = &H1
            CheckStatus = &H2
            Cancel = &H3
            DSEvent = &H4
            NotDSEvent = &H5
            XferDone = &H6
            EndOfList = &H7
            InfoNotSupported = &H8
            DataNotAvailable = &H9
        End Enum
    
        Friend Enum TwCC As Short
            Success = &H0
            Bummer = &H1
            LowMemory = &H2
            NoDS = &H3
            MaxConnections = &H4
            OperationError = &H5
            BadCap = &H6
            BadProtocol = &H9
            BadValue = &HA
            SeqError = &HB
            BadDest = &HC
            CapUnsupported = &HD
            CapBadOperation = &HE
            CapSeqError = &HF
            Denied = &H10
            FileExists = &H11
            FileNotFound = &H12
            NotEmpty = &H13
            PaperJam = &H14
            PaperDoubleFeed = &H15
            FileWriteError = &H16
            CheckDeviceOnline = &H17
        End Enum
    
        Friend Enum TwOn As Short
            Array = &H3
            [Enum] = &H4
            One = &H5
            Range = &H6
            DontCare = -1
        End Enum
    
        Friend Enum TwType As Short
            Int8 = &H0
            Int16 = &H1
            Int32 = &H2
            UInt8 = &H3
            UInt16 = &H4
            UInt32 = &H5
            Bool = &H6
            Fix32 = &H7
            Frame = &H8
            Str32 = &H9
            Str64 = &HA
            Str128 = &HB
            Str255 = &HC
            Str1024 = &HD
            Str512 = &HE
        End Enum
    
        Friend Enum TwCap As Short
            XferCount = &H1
            ICompression = &H100
            IPixelType = &H101
            IUnits = &H102
            IXferMech = &H103
            BitDepth = &H112B
            ImageFileFormat = &H110C
            XResolution = &H1118
            YResolution = &H1119
            ImageWidth = &H1116
            ImageLength = &H1117
            SupportedSizes = &H1122
            XScaling = &H1124
            YScaling = &H1125
    
        End Enum
    
        Public Enum TwSS As Short
            TwSS_None = &H0
            TwSS_A4 = &H1
            TwSS_B5Letter = &H2
            TwSS_USLetter = &H3
        End Enum
    
    
        Public Enum TwColourType As Short
            twBW = 0
            twGREY = 1
            twRGB = 2
        End Enum
    
        Public Enum TwUnit As Short
            tw_PICAS = 2
            twCENTIMETERS = 1
            twINCHES = 0
            twPIXELS = 5
            twPOINTS = 3
            twTWIPS = 4
        End Enum
    
    #End Region
    
        <StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Ansi)> Friend Class no
            Public Id As IntPtr
            Public Version As TwVersion
            Public ProtocolMajor As Short
            Public ProtocolMinor As Short
            Public SupportedGroups As Integer
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public Manufacturer As String
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public ProductFamily As String
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public ProductName As String
        End Class
    
        <StructLayout(LayoutKind.Sequential, Pack:=2, CharSet:=CharSet.Ansi)> Friend Structure TwVersion
            Public MajorNum As Short
            Public MinorNum As Short
            Public Language As Short
            Public Country As Short
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=34)> Public Info As String
        End Structure
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwUserInterface
            Public ShowUI As Short
            Public ModalUI As Short
            Public ParentHand As IntPtr
        End Class
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwStatus
            Public ConditionCode As Short
            Public Reserved As Short
        End Class
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Structure TwEvent
            Public EventPtr As IntPtr
            Public Message As Short
        End Structure
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwImageInfo
            Public XResolution As Int32
            Public YResolution As Int32
            Public ImageWidth As Int32
            Public ImageLength As Int32
            Public SamplesPerPixel As Int16
            <MarshalAs(UnmanagedType.ByValArray, SizeConst:=8)> Public BitsPerSample() As Short
            Public BitsPerPixel As Int16
            Public Planar As Boolean
            Public PixelType As Int16
            Public Compression As Short
        End Class
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwPendingXfers
            Public Count As Short
            Public EOJ As Integer
        End Class
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Structure TwFix32
            Public Whole As System.Int16
            Public Frac As System.UInt32
    
            Public Function ToFloat() As Single
                Dim frac_sng As Single
                frac_sng = System.Convert.ToSingle(Frac)
                Return CType(Whole + (CType(frac_sng, Single) / 65536.0F), Single)
            End Function
    
            Public Sub FromFloat(ByVal f As Single)
                Dim i As Int32 = CType(((f * 65536.0F) + 0.5F), Int32)
                Whole = System.Convert.ToInt16(i / 2 ^ 16)
                Frac = System.Convert.ToUInt32((i Or &HFFFF))
            End Sub
    
        End Structure
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Structure TwFrame
            Public Left As TwFix32
            Public Top As TwFix32
            Public Right As TwFix32
            Public Bottom As TwFix32
        End Structure
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwImageLayout
            Public Frame As TwFrame
            Public DocumentNumber As Integer
            Public PageNumber As Integer
            Public FrameNumber As Integer
        End Class
    
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class TwCapability
            Public Cap As Short
            Public ConType As Short
            Public Handle As IntPtr
            Public Sub TwCapability(ByVal capIn As TwCap)
                Cap = CType(capIn, Short)
                ConType = -1
            End Sub
    
            Public Sub New(ByVal capIn As TwCap, ByVal sval As Short, ByVal TWType As TwType)
                Cap = CType(capIn, Short)
                ConType = CType(TwOn.One, Short)
                Handle = Twain.GlobalAlloc(&H42, 6)
                Dim pv As IntPtr = Twain.GlobalLock(Handle)
                Marshal.WriteInt16(pv, 0, CType(TWType, Short))
                Marshal.WriteInt32(pv, 2, CType(sval, Short))
                Twain.GlobalUnlock(Handle)
            End Sub
    
            Public Sub Dispose()
                If Not Equals(Handle, IntPtr.Zero) Then
                    Twain.GlobalFree(Handle)
                End If
            End Sub
    
            Protected Overrides Sub Finalize()
                If Not Equals(Handle, IntPtr.Zero) Then
                    Twain.GlobalFree(Handle)
                End If
            End Sub
        End Class
    
    
    End Namespace
    
    Namespace ScanSoft
        <StructLayout(LayoutKind.Sequential, Pack:=2)> Friend Class BITMAPINFOHEADER
            Public biSize As Integer
            Public biWidth As Integer
            Public biHeight As Integer
            Public biPlanes As Short
            Public biBitCount As Short
            Public biCompression As Integer
            Public biSizeImage As Integer
            Public biXPelsPerMeter As Integer
            Public biYPelsPerMeter As Integer
            Public biClrUsed As Integer
            Public biClrImportant As Integer
        End Class
    
    
        Public Class scanToImage
    
            <DllImport("gdi32.dll", ExactSpelling:=True)> Friend Shared Function SetDIBitsToDevice(ByVal hdc As IntPtr, _
    ByVal xdst As Integer, _
    ByVal ydst As Integer, _
    ByVal width As Integer, _
    ByVal height As Integer, _
    ByVal xsrc As Integer, _
    ByVal ysrc As Integer, _
    ByVal start As Integer, _
    ByVal lines As Integer, _
    ByVal bitsptr As IntPtr, _
    ByVal bmiptr As IntPtr, _
    ByVal color As Integer) As Integer
            End Function
            <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalLock(ByVal handle As IntPtr) As IntPtr
            End Function
            <DllImport("kernel32.dll", ExactSpelling:=True)> Friend Shared Function GlobalFree(ByVal handle As IntPtr) As IntPtr
            End Function
            <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> Public Shared Sub OutputDebugString(ByVal outstr As String)
            End Sub
    
            Dim bmi As BITMAPINFOHEADER
            Dim bmprect As Rectangle
            Dim dibhand As IntPtr
            Dim bmpptr As IntPtr
            Dim pixptr As IntPtr
    
            Public Sub New(ByVal dibhandp As IntPtr)
                bmprect = New Rectangle(0, 0, 0, 0)
                dibhand = dibhandp
                bmpptr = GlobalLock(dibhand)
                pixptr = GetPixelInfo(bmpptr)
    
            End Sub
    
            Protected Function GetPixelInfo(ByVal bmpptr As IntPtr) As IntPtr
                bmi = New BITMAPINFOHEADER
                Marshal.PtrToStructure(bmpptr, bmi)
                bmprect.X = bmprect.Y = 0
                bmprect.Width = bmi.biWidth
                bmprect.Height = bmi.biHeight
    
    
                If (bmi.biSizeImage = 0) Then
                    bmi.biSizeImage = Int((((bmi.biWidth * bmi.biBitCount) + 31) & Hex(Not (31))) / 2 ^ 3) * bmi.biHeight
                End If
    
                Dim p As Integer = bmi.biClrUsed
                If ((p = 0) And (bmi.biBitCount <= 8)) Then
                    p = Int(1 * 2 ^ bmi.biBitCount)
                End If
                p = (p * 4) + bmi.biSize + CType(bmpptr.ToInt32, Integer)
                Return New IntPtr(p)
            End Function
    
            Public Function ImgToBitmap(ByVal dibhandp As IntPtr) As Bitmap
                bmprect = New Rectangle(0, 0, 0, 0)
                dibhand = dibhandp
                bmpptr = GlobalLock(dibhand)
                pixptr = GetPixelInfo(bmpptr)
                Dim TempBMP As Bitmap = New Bitmap(bmprect.Width, bmprect.Height)
                Dim TempGrap As Graphics = Graphics.FromImage(TempBMP)
                Dim hdc As IntPtr = TempGrap.GetHdc
                SetDIBitsToDevice(hdc, 0, 0, bmprect.Width, bmprect.Height, 0, 0, 0, bmprect.Height, pixptr, bmpptr, 0)
                TempGrap.ReleaseHdc(hdc)
                TempGrap.Dispose()
                GlobalFree(dibhand)
                dibhand = IntPtr.Zero
                Return (TempBMP)
            End Function
        End Class
    End Namespace

  2. #2
    superbem is offline VB.NET Forum Newbie superbem is on a distinguished programming path ahead
    .NET Framework
    .NET 3.0
    Join Date
    May 2007
    Posts
    22
    Reputation
    43

    Default

    Please someone help, I can't figure why I can't put the scanner to acquire image.

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts