منتدى البرمجة يضم كل مايخص البرمجة ولغاتها ... دورات ... شروحات ... نقاشات ... برامج وكتب

الرئيسيــــة استرجاع كلمة المرور دليـل الموقــع أكواد الألــوان

إضافة رد
 
أدوات الموضوع انواع عرض الموضوع
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /30-12-2011, 03:32 PM   #1

gooba
 
الصورة الرمزية gooba

:: عضو مميز ::

gooba غير متواجد حالياً

 رقم العضوية : 32
 تاريخ التسجيل : 14 - 2 - 2009
 المشاركات : 834
 النقاط : gooba شروحات مواضيعgooba شروحات مواضيع
 تقييم المستوى : 27

اوسمتي
افتراضي شرح كيفيه التعامل مع Scanning Device بواسطة VB.net

<*iv align="center"><*iv align="center">



اليوم اعود لكم بطريقه التخاطب مع Scanning Device وتطبيقنا اليوم هوه مع جهاز ( الماسح الضوئى ) او Scanner بواسطه Visual Basic .net


[IMG]http://www.mahamo*o.com/Help/VB_NET_2003/images/vbnet.jpg[/IMG]

+

[IMG]http://www.customercareinfo.in/wp-content/uploa*s/2010/02/HP-Scanner.jpg[/IMG]

المثال وبكل بساطه يحتوى على Class خاص بالآتصال مع Scanning Device فا هذه الملف الوسيط هوه عباره عن استخدام دوال الـ API الخاصه باستخدام بالآتصال مع Scanning Device الموجوده على الجهاز الكمبيوتر وايضا يحتوى المثال على وجهه تطبيق للتعامل مع الـ Class من خلال المستخدم وهوه مثال بسيط جدا ومن غير كوود كتير يعنى كل الى هاتعمله انك هاتستخدم الـ Class دى وبس وبما انى عندى جهاز ماسح ضوئى لدى (Scanner) فا اجريت المثال عليه

اولا انا ها وضح حاجه بسيطه خاصه بـهذا الـ Class

عند انشاء Me*ule جديد



بيكون شكله مثل هذه الصوره



لكن عند وضع كود الـ Class الخاص بـ Scanning Device المستخدم فى المثال


<*iv style="margin:20px; margin-top:5px"> <*iv class="smallfont" style="margin-bottom:2px">كود:

Imports System
Imports System.Runtime.InteropServices
Imports System.Win*ows.Forms
Imports System.Collections
Imports System.Drawing
Imports System.ComponentMo*el
Imports System.Data
Imports System.IO
Imports System.Drawing.Imaging
Imports System.Text



Public Enum TwainComman*
    [Not] = -1
    Null = 0
    TransferRea*y = 1
    CloseRequest = 2
    CloseOk = 3
    DeviceEvent = 4
En* Enum

#Region " Enums "
<Flags()> Frien* Enum TwDG As Short
    Control = &H1
    Image = &H2
    Au*io = &H4
En* Enum

Frien* Enum TwDAT As Short
    Null = &H0
    Capability = &H1
    [Event] = &H2
    I*entity = &H3
    Parent = &H4
    Pen*ingXfers = &H5
    SetupMemXfer = &H6
    SetupFileXfer = &H7
    Status = &H8
    UserInterface = &H9
    XferGroup = &HA
    TwunkI*entity = &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
En* Enum

Frien* Enum TwMSG As Short
    Null = &H0
    [Get] = &H1
    GetCurrent = &H2
    GetDefault = &H3
    GetFirst = &H4
    GetNext = &H5
    [Set] = &H6
    Reset = &H7
    QuerySupport = &H8

    XFerRea*y = &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

    En*Xfer = &H701
    StopFee*er = &H702

    ChangeDirectory = &H801
    CreateDirectory = &H802
    Delete = &H803
    FormatMe*ia = &H804
    GetClose = &H805
    GetFirstFile = &H806
    GetInfo = &H807
    GetNextFile = &H808
    Rename = &H809
    Copy = &H80A
    AutoCaptureDir = &H80B

    PassThru = &H901
En* Enum

Frien* Enum TwRC As Short
    Success = &H0
    Failure = &H1
    CheckStatus = &H2
    Cancel = &H3
    DSEvent = &H4
    NotDSEvent = &H5
    XferDone = &H6
    En*OfList = &H7
    InfoNotSupporte* = &H8
    DataNotAvailable = &H9
En* Enum

Frien* Enum TwCC As Short
    Success = &H0
    Bummer = &H1
    LowMemory = &H2
    NoDS = &H3
    MaxConnections = &H4
    OperationError = &H5
    Ba*Cap = &H6
    Ba*Protocol = &H9
    Ba*Value = &HA
    SeqError = &HB
    Ba*Dest = &HC
    CapUnsupporte* = &HD
    CapBa*Operation = &HE
    CapSeqError = &HF
    Denie* = &H10
    FileExists = &H11
    FileNotFoun* = &H12
    NotEmpty = &H13
    PaperJam = &H14
    PaperDoubleFee* = &H15
    FileWriteError = &H16
    CheckDeviceOnline = &H17
En* Enum

Frien* Enum TwOn As Short
    Array = &H3
    [Enum] = &H4
    One = &H5
    Range = &H6
    DontCare = -1
En* Enum

Frien* 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
En* Enum

Frien* Enum TwCap As Short
    XferCount = &H1
    ICompression = &H100
    IPixelType = &H101
    IUnits = &H102
    IXferMech = &H103
En* Enum
#En* Region

Public Class Twain

    Private hwn* As IntPtr
    Private appi* As TwI*entity
    Private src*s As TwI*entity
    Private evtmsg As TwEvent
    Private winmsg_m As WINMSG_S

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSMparent(<[In](), Out()> ByVal origin As TwI*entity, ByVal zeroptr As IntPtr, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, ByRef refptr As IntPtr) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSMi*ent(<[In](), Out()> ByVal origin As TwI*entity, ByVal zeroptr As IntPtr, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal i**s As TwI*entity) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSMstatus(<[In](), Out()> ByVal origin As TwI*entity, ByVal zeroptr As IntPtr, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal *smstat As TwStatus) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSuserif(<[In](), Out()> ByVal origin As TwI*entity, <[In](), Out()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, ByVal guif As TwUserInterface) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSevent(<[In](), Out()> ByVal origin As TwI*entity, <[In](), Out()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, ByRef evt As TwEvent) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSstatus(<[In](), Out()> ByVal origin As TwI*entity, <[In]()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal *smstat As TwStatus) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DScap(<[In](), Out()> ByVal origin As TwI*entity, <[In]()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal capa As TwCapability) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSiinf(<[In](), Out()> ByVal origin As TwI*entity, <[In]()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal imginf As TwImageInfo) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSixfer(<[In](), Out()> ByVal origin As TwI*entity, <[In]()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, ByRef hbitmap As IntPtr) As TwRC
    En* Function

    <DllImport("twain_32.*ll", EntryPoint:="#1")> Private Share* Function DSpxfer(<[In](), Out()> ByVal origin As TwI*entity, <[In]()> ByVal *est As TwI*entity, ByVal *g As TwDG, ByVal *at As TwDAT, ByVal msg As TwMSG, <[In](), Out()> ByVal pxfr As TwPen*ingXfers) As TwRC
    En* Function

    <DllImport("kernel32.*ll", ExactSpelling:=True)> Frien* Share* Function GlobalAlloc(ByVal flags As Integer, ByVal size As Integer) As IntPtr
    En* Function

    <DllImport("kernel32.*ll", ExactSpelling:=True)> Frien* Share* Function GlobalLock(ByVal han*le As IntPtr) As IntPtr
    En* Function

    <DllImport("kernel32.*ll", ExactSpelling:=True)> Frien* Share* Function GlobalUnlock(ByVal han*le As IntPtr) As Boolean
    En* Function

    <DllImport("kernel32.*ll", ExactSpelling:=True)> Frien* Share* Function GlobalFree(ByVal han*le As IntPtr) As IntPtr
    En* Function

    <DllImport("user32.*ll", ExactSpelling:=True)> Private Share* Function GetMessagePos() As Integer
    En* Function

    <DllImport("user32.*ll", ExactSpelling:=True)> Private Share* Function GetMessageTime() As Integer
    En* Function

    <DllImport("g*i32.*ll", ExactSpelling:=True)> Private Share* Function GetDeviceCaps(ByVal hDC As IntPtr, ByVal nIn*ex As Integer) As Integer
    En* Function

    <DllImport("g*i32.*ll", CharSet:=CharSet.Auto)> Private Share* Function CreateDC(ByVal sz*river As String, ByVal sz*evice As String, ByVal szoutput As String, ByVal *evmo*e As IntPtr) As IntPtr
    En* Function
    <DllImport("g*i32.*ll", ExactSpelling:=True)> Private Share* Function DeleteDC(ByVal h*c As IntPtr) As Boolean
    En* Function

    Private Const CountryUSA As Short = 1
    Private Const LanguageUSA As Short = 13

    Public Sub New()
        appi* = New TwI*entity()
        appi*.I* = IntPtr.Zero
        appi*.Version.MajorNum = 1
        appi*.Version.MinorNum = 1
        appi*.Version.Language = LanguageUSA
        appi*.Version.Country = CountryUSA
        appi*.Version.Info = "Twain 1.0"
        appi*.ProtocolMajor = TwProtocol.Major
        appi*.ProtocolMinor = TwProtocol.Minor
        appi*.Supporte*Groups = CType(TwDG.Image Or TwDG.Control, Integer)
        appi*.Manufacturer = "MKA-SOFT"
        appi*.Pro*uctFamily = "Freeware"
        appi*.Pro*uctName = "EasyTwain"

        src*s = New TwI*entity()
        src*s.I* = IntPtr.Zero

        evtmsg.EventPtr = Marshal.AllocHGlobal(Marshal.SizeOf(winmsg_m))
    En* Sub

    Public Sub Dispose()
        Marshal.FreeHGlobal(evtmsg.EventPtr)
    En* Sub

    Protecte* Overri*es Sub Finalize()
        Marshal.FreeHGlobal(evtmsg.EventPtr)
    En* Sub

    Public Sub Init(ByVal hwn*p As IntPtr)
        Finish()
        Dim rc As TwRC = DSMparent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.OpenDSM, hwn*p)
        If (rc = TwRC.Success) Then
            rc = DSMi*ent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.I*entity, TwMSG.GetDefault, src*s)
            If (rc = TwRC.Success) Then
                hwn* = hwn*p
            Else
                rc = DSMparent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, hwn*p)
            En* If
        En* If
    En* Sub

    Public Sub [Select]()
        Dim rc As TwRC
        '        CloseSrc()
        If Equals(appi*.I*, IntPtr.Zero) = True Then
            Init(hwn*)
            If Equals(appi*.I*, IntPtr.Zero) = True Then
                Return
            En* If
        En* If
        rc = DSMi*ent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.I*entity, TwMSG.UserSelect, src*s)
    En* Sub

    Public Sub Acquire()
        Dim rc As TwRC
        '        CloseSrc()
        If Equals(appi*.I*, IntPtr.Zero) = True Then
            Init(hwn*)
            If Equals(appi*.I*, IntPtr.Zero) = True Then
                Return
            En* If
        En* If

        rc = DSMi*ent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.I*entity, TwMSG.OpenDS, src*s)
        If (rc <> TwRC.Success) Then
            Return
        En* If

        Dim cap As TwCapability = New TwCapability(TwCap.XferCount, 1)
        rc = DScap(appi*, src*s, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap)
        If (rc <> TwRC.Success) Then
            CloseSrc()
            Return
        En* If

        Dim guif As TwUserInterface = New TwUserInterface()
        guif.ShowUI = 1
        guif.Mo*alUI = 1
        guif.ParentHan* = hwn*
        rc = DSuserif(appi*, src*s, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif)
        If (rc <> TwRC.Success) Then
            CloseSrc()
            Return
        En* If
    En* Sub

    Public Function TransferPictures() As ArrayList
        Dim pics As ArrayList = New ArrayList()
        If Equals(src*s.I*, IntPtr.Zero) Then
            Return pics
        En* If

        Dim rc As TwRC
        Dim hbitmap As IntPtr = IntPtr.Zero
        Dim pxfr As TwPen*ingXfers = New TwPen*ingXfers()

        Do
            pxfr.Count = 0
            hbitmap = IntPtr.Zero

            Dim iinf As TwImageInfo = New TwImageInfo()
            rc = DSiinf(appi*, src*s, TwDG.Image, TwDAT.ImageInfo, TwMSG.Get, iinf)
            If (rc <> TwRC.Success) Then
                CloseSrc()
                Return pics
            En* If

            rc = DSixfer(appi*, src*s, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, hbitmap)
            If (rc <> TwRC.XferDone) Then
                CloseSrc()
                Return pics
            En* If

            rc = DSpxfer(appi*, src*s, TwDG.Control, TwDAT.Pen*ingXfers, TwMSG.En*Xfer, pxfr)
            If (rc <> TwRC.Success) Then
                CloseSrc()
                Return pics
            En* If

            pics.A**(hbitmap)
        Loop While (pxfr.Count <> 0)

        rc = DSpxfer(appi*, src*s, TwDG.Control, TwDAT.Pen*ingXfers, TwMSG.Reset, pxfr)
        Return pics
    En* Function

    Public Function PassMessage(ByVal m As Message) As TwainComman*
        If Equals(src*s.I*, IntPtr.Zero) Then
            Return TwainComman*.Not
        En* If

        Dim pos As Integer = GetMessagePos()

        winmsg_m.hwn* = m.HWn*
        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(appi*, src*s, TwDG.Control, TwDAT.Event, TwMSG.ProcessEvent, evtmsg)
        If (rc = TwRC.NotDSEvent) Then
            Return TwainComman*.Not
        En* If

        If (evtmsg.Message = CType(TwMSG.XFerRea*y, Short)) Then
            Return TwainComman*.TransferRea*y
        En* If

        If (evtmsg.Message = CType(TwMSG.CloseDSReq, Short)) Then
            Return TwainComman*.CloseRequest
        En* If
        If (evtmsg.Message = CType(TwMSG.CloseDSOK, Short)) Then
            Return TwainComman*.CloseOk
        En* If
        If (evtmsg.Message = CType(TwMSG.DeviceEvent, Short)) Then
            Return TwainComman*.DeviceEvent
        En* If

        Return TwainComman*.Null
    En* Function

    Public Sub CloseSrc()
        Dim rc As TwRC
        If Not Equals(src*s.I*, IntPtr.Zero) Then
            Dim guif As TwUserInterface = New TwUserInterface()
            rc = DSuserif(appi*, src*s, TwDG.Control, TwDAT.UserInterface, TwMSG.DisableDS, guif)
            rc = DSMi*ent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.I*entity, TwMSG.CloseDS, src*s)
        En* If
    En* Sub

    Public Sub Finish()
        Dim rc As TwRC
        CloseSrc()
        If Not Equals(appi*.I*, IntPtr.Zero) Then
            rc = DSMparent(appi*, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, hwn*)
        En* If
        appi*.I* = IntPtr.Zero
    En* Sub

    Public Share* Rea*Only 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
        En* Get
    En* Property

    <StructLayout(LayoutKin*.Sequential, Pack:=4)> Frien* Structure WINMSG_S
        Public hwn* 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
    En* Structure
En* Class

Public Class TwProtocol
    Public Const Major As Short = 1
    Public Const Minor As Short = 9
En* Class


<StructLayout(LayoutKin*.Sequential, Pack:=2, CharSet:=CharSet.Ansi)> Frien* Class TwI*entity
    Public I* As IntPtr
    Public Version As TwVersion
    Public ProtocolMajor As Short
    Public ProtocolMinor As Short
    Public Supporte*Groups As Integer
    <MarshalAs(Unmanage*Type.ByValTStr, SizeConst:=34)> Public Manufacturer As String
    <MarshalAs(Unmanage*Type.ByValTStr, SizeConst:=34)> Public Pro*uctFamily As String
    <MarshalAs(Unmanage*Type.ByValTStr, SizeConst:=34)> Public Pro*uctName As String
En* Class

<StructLayout(LayoutKin*.Sequential, Pack:=2, CharSet:=CharSet.Ansi)> Frien* Structure TwVersion
    Public MajorNum As Short
    Public MinorNum As Short
    Public Language As Short
    Public Country As Short
    <MarshalAs(Unmanage*Type.ByValTStr, SizeConst:=34)> Public Info As String
En* Structure

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Class TwUserInterface
    Public ShowUI As Short
    Public Mo*alUI As Short
    Public ParentHan* As IntPtr
En* Class

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Class TwStatus
    Public Con*itionCo*e As Short
    Public Reserve* As Short
En* Class

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Structure TwEvent
    Public EventPtr As IntPtr
    Public Message As Short
En* Structure

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Class TwImageInfo
    Public XResolution As Integer
    Public YResolution As Integer
    Public ImageWi*th As Integer
    Public ImageLength As Integer
    Public SamplesPerPixel As Short
    <MarshalAs(Unmanage*Type.ByValArray, SizeConst:=8)> Public BitsPerSample() As Short
    Public BitsPerPixel As Short
    Public Planar As Short
    Public PixelType As Short
    Public Compression As Short
En* Class

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Class TwPen*ingXfers
    Public Count As Short
    Public EOJ As Integer
En* Class

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Structure TwFix32
    Public Whole As Short
    Public Frac As Short

    Public Function ToFloat() As Single
        Return CType(Whole + (CType(Frac, Single) / 65536.0F), Single)
    En* Function

    Public Sub FromFloat(ByVal f As Single)
        Dim i As Integer = CType(((f * 65536.0F) + 0.5F), Integer)
        Whole = CType(i / 2 ^ 16, Short)
        Frac = CType(i & &HFFFF, Short)
    En* Sub
En* Structure

<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Class TwCapability
    Public Cap As Short
    Public ConType As Short
    Public Han*le As IntPtr
    Public Sub TwCapability(ByVal capIn As TwCap)
        Cap = CType(capIn, Short)
        ConType = -1
    En* Sub

    Public Sub New(ByVal capIn As TwCap, ByVal sval As Short)
        Cap = CType(capIn, Short)
        ConType = CType(TwOn.One, Short)
        Han*le = Twain.GlobalAlloc(&H42, 6)
        Dim pv As IntPtr = Twain.GlobalLock(Han*le)
        Marshal.WriteInt16(pv, 0, CType(TwType.Int16, Short))
        Marshal.WriteInt32(pv, 2, CType(sval, Integer))
        Twain.GlobalUnlock(Han*le)
    En* Sub

    Public Sub Dispose()
        If Not Equals(Han*le, IntPtr.Zero) Then
            Twain.GlobalFree(Han*le)
        En* If
    En* Sub

    Protecte* Overri*es Sub Finalize()
        If Not Equals(Han*le, IntPtr.Zero) Then
            Twain.GlobalFree(Han*le)
        En* If
    En* Sub
En* Class





Public Class TwainHan*ler
    Inherits System.Win*ows.Forms.Form
    Implements IMessageFilter

    Private msgfilter As Boolean
    Private tw As Twain
    Frien* WithEvents Button1 As System.Win*ows.Forms.Button
    Private picnumber As Integer = 0

    Public FilePath As String
    Public FileName As String

    <DllImport("g*i32.*ll", ExactSpelling:=True)> Frien* Share* Function SetDIBitsToDevice(ByVal h*c As IntPtr, ByVal x*st As Integer, ByVal y*st As Integer, ByVal wi*th 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
    En* Function
    <DllImport("kernel32.*ll", ExactSpelling:=True)> Frien* Share* Function GlobalLock(ByVal han*le As IntPtr) As IntPtr
    En* Function
    <DllImport("kernel32.*ll", ExactSpelling:=True)> Frien* Share* Function GlobalFree(ByVal han*le As IntPtr) As IntPtr
    En* Function
    <DllImport("kernel32.*ll", CharSet:=CharSet.Auto)> Public Share* Sub OutputDebugString(ByVal outstr As String)
    En* Sub



    Public Sub New()
        InitializeComponent()
        tw = New Twain()
        tw.Init(Me.Han*le)
    En* Sub

    Protecte* Overloa*s Overri*es Sub Dispose(ByVal *isposing As Boolean)
        If *isposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            En* If
        En* If
        MyBase.Dispose(*isposing)
    En* Sub
    Private components As System.ComponentMo*el.IContainer



    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
        Dim cm* As TwainComman* = tw.PassMessage(m)
        If (cm* = TwainComman*.Not) Then
            Return False
        En* If

        Select Case cm*
            Case TwainComman*.CloseRequest
                En*ingScan()
                tw.CloseSrc()
            Case TwainComman*.CloseOk
                En*ingScan()
                tw.CloseSrc()
            Case TwainComman*.DeviceEvent
            Case TwainComman*.TransferRea*y
                Dim pics As ArrayList = tw.TransferPictures()
                En*ingScan()
                tw.CloseSrc()
                picnumber += 1
                Dim i As Integer
                For i = 0 To pics.Count - 1 Step 1
                    Dim img As IntPtr = CType(pics(i), IntPtr)
                    Dim *ibhan* As IntPtr
                    Dim bmpptr As IntPtr
                    Dim pixptr As IntPtr
                    *ibhan* = img
                    bmpptr = GlobalLock(*ibhan*)
                    pixptr = GetPixelInfo(bmpptr)
                    If Not G*ip.SaveDIBAs(FilePath & "\" & FileName, bmpptr, pixptr) Then
                        FileName = ""
                    En* If
                    GlobalFree(*ibhan*)
                    *ibhan* = IntPtr.Zero
                Next
            Case TwainComman*.Null
                En*ingScan()
                tw.CloseSrc()
        En* Select

        Return True
    En* Function

    Protecte* Function GetPixelInfo(ByVal bmpptr As IntPtr) As IntPtr
        Dim Bmi As BITMAPINFOHEADER
        Dim bmprect As Rectangle
        Bmi = New BITMAPINFOHEADER()
        Marshal.PtrToStructure(bmpptr, Bmi)

        If (Bmi.biSizeImage = 0) Then
            Bmi.biSizeImage = Int((((Bmi.biWi*th * Bmi.biBitCount) + 31) & Hex(Not (31))) / 2 ^ 3) * Bmi.biHeight
        En* If

        Dim p As Integer = Bmi.biClrUse*
        If ((p = 0) An* (Bmi.biBitCount <= 8)) Then
            p = Int(1 * 2 ^ Bmi.biBitCount)
        En* If
        p = (p * 4) + Bmi.biSize + CType(bmpptr.ToInt32, Integer)
        Return New IntPtr(p)
    En* Function


    Private Sub En*ingScan()
        If (msgfilter) Then
            Application.RemoveMessageFilter(Me)
            msgfilter = False
            Me.Enable* = True
            Me.Activate()
        En* If
    En* Sub



    Public Function ScanIt(ByVal TheFilePath As String) As String
        tw.Select()
        If (Not msgfilter) Then
            Me.Enable* = False
            msgfilter = True
            Application.A**MessageFilter(Me)
        En* If
        FilePath = TheFilePath
        FileName = Format(Now, "Scan") + ".jpg"
        '   FileName = Format(Now, "yyyyMM**hhmmss") + ".jpg"
        tw.Acquire()

        Do While Me.Enable* = False
            Application.DoEvents()
        Loop
        '  tw.CloseSrc()

        Return FileName
    En* Function


    Private Sub InitializeComponent()
        Me.Suspen*Layout()
        '
        'TwainHan*ler
        '
        Me.ClientSize = New System.Drawing.Size(197, 106)
        Me.Name = "TwainHan*ler"
        Me.ResumeLayout(False)

    En* Sub

    Private Sub TwainHan*ler_Loa*(ByVal sen*er As System.Object, ByVal e As System.EventArgs) Han*les MyBase.Loa*

    En* Sub
En* Class


Public Class G*ip
    <DllImport("g*iplus.*ll", ExactSpelling:=True)> Frien* Share* Function G*ipCreateBitmapFromG*iDib(ByVal bminfo As IntPtr, ByVal pix*at As IntPtr, ByRef image As IntPtr) As Integer
    En* Function
    <DllImport("g*iplus.*ll", ExactSpelling:=True, CharSet:=CharSet.Unico*e)> Frien* Share* Function G*ipSaveImageToFile(ByVal image As IntPtr, ByVal filename As String, <[In]()> ByRef clsi* As Gui*, ByVal encparams As IntPtr) As Integer
    En* Function
    <DllImport("g*iplus.*ll", ExactSpelling:=True)> Frien* Share* Function G*ipDisposeImage(ByVal image As IntPtr) As Integer
    En* Function

    'private static ImageCo*ecInfo[] co*ecs = ImageCo*ecInfo.GetImageEnco*ers();
    Private Share* co*ecs() As ImageCo*ecInfo = ImageCo*ecInfo.GetImageEnco*ers()

    'private static bool GetCo*ecClsi*( string filename, out Gui* clsi* )
    Private Share* Function GetCo*ecClsi*(ByVal filename As String, ByRef clsi* As Gui*) As Boolean
        clsi* = Gui*.Empty
        Dim ext As String = Path.GetExtension(filename)
        'Checking string for null
        If IsNothing(ext) Then
            Return False
        En* If
        ext = "*" + ext.ToUpper()
        Dim co*ec As ImageCo*ecInfo
        For Each co*ec In co*ecs
            If (co*ec.FilenameExtension.In*exOf(ext) >= 0) Then
                clsi* = co*ec.Clsi*
                Return True
            En* If
        Next
        Return False
    En* Function

    'public static bool SaveDIBAs( string picname, IntPtr bminfo, IntPtr pix*at )
    Public Share* Function SaveDIBAs(ByVal picname As String, ByVal bminfo As IntPtr, ByVal pix*at As IntPtr) As Boolean
        Dim s* As SaveFileDialog = New SaveFileDialog()

        s*.FileName = picname

        Dim clsi* As Gui*
        If Not GetCo*ecClsi*(s*.FileName, clsi*) Then
            MessageBox.Show("Unknown picture format for extension " + Path.GetExtension(s*.FileName), "Image Co*ec", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        En* If

        Dim img As IntPtr = IntPtr.Zero
        Dim st As Integer = G*ipCreateBitmapFromG*iDib(bminfo, pix*at, img)
        If (st <> 0) Or (Equals(img, IntPtr.Zero)) Then
            Return False
        En* If

        st = G*ipSaveImageToFile(img, s*.FileName, clsi*, IntPtr.Zero)
        G*ipDisposeImage(img)
        Return st = 0
    En* Function

En* Class



<StructLayout(LayoutKin*.Sequential, Pack:=2)> Frien* Class BITMAPINFOHEADER
    Public biSize As Integer
    Public biWi*th 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 biClrUse* As Integer
    Public biClrImportant As Integer
En* Class

فا هوه سوف يتغير شكله الى هذا الشكل




ولكن اذا دققنا جيدا فى الكود سنلاحظ استخدام بعض من الـ Name Space الخاصه بـ Win*ows Form وهذا لآستخدام ما بهم من Objects فى هذا الملف الوسيط
وكامثال بيسط لدنيا مثل ( MessageBox Function ) وهيه من ضمن محتويات الـ Name Space الخاص بـ Win*ows Form

انا حبيت بس اوضح النقطه دى الى اخونا المبتدئين علشان لو كانوا عارفين او متعودين ان شكل الـ Me*ule لما بيتكتب فيه كود بيكون شكله غير الى فى المثال منعنا للدهشه

نيجى بقى لشرح وجهات المثال

دى صوره المثال قبل اداء مهمته



بالنبداء بأستخدام المثال بالضغط على Get Photo

ثم ننتقل الى وجهه اختيار نوع جهاز الماسح الضوئى الموجود تعريفه على الكمبيوتر فا هوه يعرض الاجهزه المعرفه على النظام ولكن يجب عليك اختيار الجهاز الموصل حاليا ليكى يتم استخدامه



بعد اختيار الجهاز المطلوب استخدامه فى هذه العلميه يظهر لنا الوجهه الخاصه بجهاز الماسح الضوئى الذى تم اختياره من قبل
ومن ثم سوف نضغط على زر Preview لكن نرى الصوره قبل عمل Scan لها



وبعد ذالك نقوم بتحديد الصوره ثم الضغط على Scan لبداء العمليه المطلوبه



وبعد الانتهاء من علميه الـ Scanning سوف يتم تخزين الصوره فى هذا المسار

<*iv style="margin:20px; margin-top:5px"> <*iv class="smallfont" style="margin-bottom:2px">كود:
C:\
باسم Scan

ومن ثم سيتم عرضه فى PictureBox الموجود على الـ Form بهذه الشكل




الآن وقد تم عمل المشروع كما يجب ومثلما نريد .

يمكننا استخدام وتطبيق هذا الموضوع فى البرامج التى تعتمد على صوره بيانات شخصيه فا يمكنك الأن وضع صور شخصيه بكل سهوله للمستخدم وبطريقه مباشره والكثير والكثير من المشاريع والتطبيقات التى تحتاج مثل هذا المثال لتقويته بشكل افضل .

ملاحظات

- تم عمل هذا المثال بأستخدام Visual Stu*io .net 2008 واستخدام جهاز Scanner HP G2710
وعلى نظام Win*ows 7

-انا لم اجرب هذا الـ Class لآستخدام WebCamera فا ياريت حد يجرب نفس الطريقه على WebCamera بس يكون متوصله USB ويقولنا على النتيجه


والآن الى تحميل المثال

[فقط الأعضاء المسجلين والمفعلين يمكنهم رؤية الوصلات . إضغط هنا للتسجيل]

========================

وفى نهايه الموضوع ارجو ان يكون الموضوع




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /13-02-2014, 06:02 PM   #2

egypt4egypt90
 
الصورة الرمزية egypt4egypt90

:: عضو جديد ::

egypt4egypt90 غير متواجد حالياً

 رقم العضوية : 66658
 تاريخ التسجيل : 13 - 2 - 2014
 المشاركات : 1
 النقاط : egypt4egypt90 is on a distinguished road
 تقييم المستوى : 0

افتراضي رد: شرح كيفيه التعامل مع Scanning Device بواسطة VB.net

الملف محذوف ارجو اعادة رفعه




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /03-05-2014, 07:11 PM   #3

oppokeNub
 
الصورة الرمزية oppokeNub

مخالف

oppokeNub غير متواجد حالياً

 رقم العضوية : 57149
 تاريخ التسجيل : 5 - 9 - 2013
 الإقامة : Armenia
 المشاركات : 6
 النقاط : oppokeNub is on a distinguished road
 تقييم المستوى : 0

افتراضي Test, just a test

Hello. An* Bye.




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /03-05-2014, 07:17 PM   #4

oppokeNub
 
الصورة الرمزية oppokeNub

مخالف

oppokeNub غير متواجد حالياً

 رقم العضوية : 57149
 تاريخ التسجيل : 5 - 9 - 2013
 الإقامة : Armenia
 المشاركات : 6
 النقاط : oppokeNub is on a distinguished road
 تقييم المستوى : 0

افتراضي Test, just a test

Hello. An* Bye.




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /19-10-2017, 06:23 AM   #5

Zezooooo
 
الصورة الرمزية Zezooooo

:: عضو جديد ::

Zezooooo غير متواجد حالياً

 رقم العضوية : 69796
 تاريخ التسجيل : 19 - 10 - 2017
 المشاركات : 1
 النقاط : Zezooooo is on a distinguished road
 تقييم المستوى : 0

افتراضي رد: شرح كيفيه التعامل مع Scanning Device بواسطة VB.net

الملف محذوف, الرجاء إعادة رفعه, وشكراآ




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /06-01-2018, 12:34 AM   #6

انجى العطور
 
الصورة الرمزية انجى العطور

:: عضو جديد ::

انجى العطور غير متواجد حالياً

 رقم العضوية : 69981
 تاريخ التسجيل : 6 - 1 - 2018
 المشاركات : 1
 النقاط : انجى العطور is on a distinguished road
 تقييم المستوى : 0

افتراضي رد: شرح كيفيه التعامل مع Scanning Device بواسطة VB.net

أإسـ عٍ ـد الله أإأوٍقـآتَكُـم بكُـل خَ ـيرٍ

دآإئمـاَ تَـبهَـرٍوٍنآآ بَمَ ـوٍآضيعكـ

أإلتي تَفُـوٍح مِنهآ عَ ـطرٍ أإلآبدآع وٍأإلـتَمـيُزٍ

لك الشكر من كل قلبي




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /18-01-2018, 09:59 AM   #7

hossamthawrt77
 
الصورة الرمزية hossamthawrt77

مخالف

hossamthawrt77 غير متواجد حالياً

 رقم العضوية : 70013
 تاريخ التسجيل : 18 - 1 - 2018
 المشاركات : 7
 النقاط : hossamthawrt77 is on a distinguished road
 تقييم المستوى : 0

Thumbs up رد: شرح كيفيه التعامل مع Scanning Device بواسطة VB.net

جيد




  رد مع اقتباس
منتديات ساسو سوفت - Sasosoft Forums
قديم منذ /03-02-2018, 04:11 PM   #8

غلا الطيب
 
الصورة الرمزية غلا الطيب

:: عضو جديد ::

غلا الطيب غير متواجد حالياً

 رقم العضوية : 70041
 تاريخ التسجيل : 3 - 2 - 2018
 المشاركات : 1
 النقاط : غلا الطيب is on a distinguished road
 تقييم المستوى : 0

افتراضي رد: شرح كيفيه التعامل مع Scanning Device بواسطة VB.net

كل الشكر لكـِ ولهذا المرور الجميل

الله يعطيكـِ العافيه يارب




  رد مع اقتباس
إضافة رد

مواقع النشر (المفضلة)

الكلمات الدلالية (Tags)
التعامل, device, بواسطة, scanning, vb.net, كيفيه

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
NI Device Drivers 2018 version 18.5 apple2000 منتدى البرامج المحمولة 0 01-08-2018 03:58 PM
A*obe Animate CC an* Mobile Device Packaging CC 2018 apple2000 منتدى البرامج المحمولة 0 16-07-2018 04:10 PM
NI Device Drivers version 16.8 (August 2016) rollroy12 منتدى البرامج المحمولة 0 10-06-2018 12:48 AM
NI Device Drivers version 16.8 (August 2016) 170910 rollroy منتدى البرامج العام 0 10-09-2017 09:50 AM
الصور ليك حل مشكلة Bluetooth Peripheral Device osama منتدى الهاردوير والصيانة وتبادل الخبرات 0 20-11-2013 09:38 PM

RSS RSS 2.0 XML MAP

الساعة الآن 02:45 AM.


Powered by vBulletin Version 3.8.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd

جميع المشاركات المنشورة فى المنتدى لا تعبر عن وجه نظر الإدارة

Please dont post any copyrighted materials like cracks , serials , nulled products .. ETC