`
bill1
  • 浏览: 1726 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

ActiveX(VB6)+JavaScript让IE浏览器与光标阅读器交互

 
阅读更多
Option Explicit
On Error Resume Next
Implements IObjectSafety
Dim Device As Long
Dim IsReading As Boolean
Dim MyList As String '鉴定计划中包含的所有准考证号码
Dim MyListed As String '已经读取过的准考证号码
Dim MyCount As Integer '读卡记数
Dim MyText As String '设备读取字符
Dim strlen As Long
 
'控件初始化
Private Sub UserControl_Initialize()
    Device = 0
    IsReading = False
    MyTimer.Interval = 50
    MyCount = 0
    MyText = ""
    getMyList ("")
End Sub
'取得控件版本
Public Sub getVersion()
    MsgBox "光标阅读机控件V 1.0.1"
End Sub
Private Sub cmdRead_Click()
     
    If IsReading Then
        OMR_StopRead
        OMR_StopMotor
        cmdRead.Caption = "阅 读"
        MyTimer.Enabled = False
        IsReading = False
    Else
        If OMR_ReadNoWait() = 0 Then    'OK
            cmdRead.Caption = "停止阅读"
            MyTimer.Enabled = True
            IsReading = True
        Else
            txtResult.Text = Space(100)
            strlen = OMR_CRetMess(OMR_GetLastError(), txtResult.Text)
            MsgBox txtResult.Text, vbCritical, "阅读失败"
        End If
    End If
End Sub
'-----------读卡设备断开--------------
Private Sub Command1_Click()
    cmdInstall.Enabled = True
    Command1.Enabled = False
    cmdRead.Enabled = False
    OMR_StopRead
    OMR_StopMotor
    OMR_Close
    txtResult.Text = txtResult.Text & Chr(13) & Chr(10) & "读卡设备断开!"
    txtResult.SelStart = Len(txtResult)
End Sub
Private Sub MyTimer_Timer()
    Dim sResultStr As String
    Dim lResultNum As Long
    Dim sUserID As String   '准考证号码
     
    MyTimer.Enabled = False
    Select Case OMR_IsReading()
    Case 0:     '阅读完毕
        sResultStr = Space(1000)
        lResultNum = OMR_GetResult(sResultStr, True)
        MyText = Mid(sResultStr, 1, 300) '取得有效文本
         
        If Check1 = Checked Then
            OMR_StopMotor
            cmdRead.Caption = "阅 读"
            MyTimer.Enabled = False
            IsReading = False
            txtResult.Text = txtResult.Text & "【" & MyText
            txtResult.Text = txtResult.Text & "】正确答案读取成功!"
            txtResult.SelStart = Len(txtResult)
            If (Option1.Value = True) Then '理论回调
                UserControl.Parent.Script.setRightRecord (MyText)
            ElseIf (Option2.Value = True) Then '实操回调
                UserControl.Parent.Script.setRightRecord1 (MyText)
            ElseIf (Option3.Value = True) Then '外语回调
                UserControl.Parent.Script.setRightRecord2 (MyText)
            End If
        Else
            sUserID = Mid(sResultStr, 2, 19) '取得准考证号码
            txtResult.Text = txtResult.Text & Chr(13) & Chr(10) & "【" & sUserID
            txtResult.Text = txtResult.Text & "】"
            txtResult.SelStart = Len(txtResult)
            '----------判断是否是正确的准考证----------
            If (InStr(sUserID, " ") > 0) Then
                OMR_StopMotor
                cmdRead.Caption = "阅 读"
                MyTimer.Enabled = False
                IsReading = False
                txtResult.Text = txtResult.Text & "ERROR 1:准考证填写错误!"
                txtResult.SelStart = Len(txtResult)
                UserControl.Parent.Script.myAlert ("ERROR 1:准考证填写错误!")
            ElseIf (InStr(MyList, sUserID) <= 0) Then
                OMR_StopMotor
                cmdRead.Caption = "阅 读"
                MyTimer.Enabled = False
                IsReading = False
                txtResult.Text = txtResult.Text & "ERROR 2:准考证不存在!"
                txtResult.SelStart = Len(txtResult)
                UserControl.Parent.Script.myAlert ("ERROR 2:准考证不存在!")
            ElseIf (InStr(MyListed, sUserID) > 0) Then
                OMR_StopMotor
                cmdRead.Caption = "阅 读"
                MyTimer.Enabled = False
                IsReading = False
                txtResult.Text = txtResult.Text & "ERROR 3:准考证号码重复!"
                txtResult.SelStart = Len(txtResult)
                UserControl.Parent.Script.myAlert ("ERROR 3:准考证号码重复!")
            Else
                MyListed = MyListed & "," & sUserID '记录已经读取的准考证号码
                MyCount = MyCount + 1 '累计读取卡片数
                Label2.Caption = MyCount   '显示读卡数
                If Left(sResultStr, 1) = "O" Then
                    If OMR_ReadNoWait() = 0 Then    'OK
                        cmdRead.Caption = "停止阅读"
                        MyTimer.Enabled = True
                        IsReading = True
                         
                        '-------------------回调js--------------
                        If (Option1.Value = True) Then '理论回调
                            UserControl.Parent.Script.setReadText (sResultStr)
                        ElseIf (Option2.Value = True) Then '实操回调
                            UserControl.Parent.Script.setReadText1 (sResultStr)
                        ElseIf (Option3.Value = True) Then '外语回调
                            UserControl.Parent.Script.setReadText2 (sResultStr)
                        End If
                         
                    Else
                        MsgBox "阅读失败", vbCritical, "警告"
                    End If
                Else
                    OMR_StopMotor
                    cmdRead.Caption = "阅 读"
                    MyTimer.Enabled = False
                    IsReading = False
                    sResultStr = Space(100)
                    strlen = OMR_CRetMess(OMR_GetLastError(), sResultStr)
                    txtResult.Text = sResultStr
                End If
                 
            End If
        End If
    Case -1:    '阅读失败
        cmdRead.Caption = "阅 读"
        MyTimer.Enabled = False
        IsReading = False
        sResultStr = Space(100)
        strlen = OMR_CRetMess(OMR_GetLastError(), sResultStr)
        txtResult.Text = sResultStr
        MsgBox sResultStr, vbCritical, "阅读失败"
         
    Case 1:     '正在阅读
    End Select
     
    '-----------------IsReading时启动timer----------------
    If IsReading Then
        MyTimer.Enabled = True
    End If
End Sub
'-----------------取得所有的准考证号码-----------------
Public Sub getMyList(str)
    If Len(str) > 0 Then
        MyList = str
    Else
        MyList = Text1.Text
    End If
End Sub
'-----------------初始化设备并加载格式文件-------------------
Public Sub cmdInstall_Click()
    cmdInstall.Enabled = False
    Device = OMR_Installed(0)
    Select Case Device
    Case Is = 0:
        'MsgBox "初始化失败", vbInformation
        txtResult.Text = "连接读卡设备失败!"
        cmdInstall.Enabled = True
    Case Is > 0:
        'MsgBox "OMR初始化成功", vbInformation
        txtResult.Text = "连接读卡设备成功!"
        OMR_Clear   '需调用多个格式文件时,仅在第一次时调用  OMR_Clear
        If OMR_LoadForm("C:\KSCJ200.sht", "") <> 0 Then
            MsgBox "不能装载格式文件--C:\KSCJ200.sht", vbCritical, "警告"
            cmdInstall.Enabled = True
        Else
            'MsgBox "装载格式文件成功", vbInformation, "提示"
            txtResult.Text = txtResult.Text & Chr(13) & Chr(10) & "加载格式文件成功!"
            cmdRead.Enabled = True
            Command1.Enabled = True
            cmdInstall.Enabled = False
        End If
         
    Case Else:
        MsgBox "请设置您的OMR设备类型", vbInformation
        cmdInstall.Enabled = True
    End Select
End Sub
Public Function Script(code As String) As String
    Dim obj As Object
    Set obj = CreateObject("MSScriptControl.ScriptControl")
    obj.AllowUI = True
    obj.Language = "JavaScript"
    Script = obj.Eval(code)
End Function
Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _
    Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)
     
    Dim Rc      As Long
    Dim rClsId  As udtGUID
    Dim IID     As String
    Dim bIID()  As Byte
     
    pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _
    INTERFACESAFE_FOR_UNTRUSTED_DATA
     
    If (riid <> 0) Then
        CopyMemory rClsId, ByVal riid, Len(rClsId)
         
        bIID = String$(MAX_GUIDLEN, 0)
        Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
        Rc = InStr(1, bIID, vbNullChar) - 1
        IID = Left$(UCase(bIID), Rc)
         
        Select Case IID
        Case IID_IDispatch
            pdwEnabledOptions = IIf(m_fSafeForScripting, _
            INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)
            Exit Sub
        Case IID_IPersistStorage, IID_IPersistStream, _
            IID_IPersistPropertyBag
            pdwEnabledOptions = IIf(m_fSafeForInitializing, _
            INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)
            Exit Sub
        Case Else
            Err.Raise E_NOINTERFACE
            Exit Sub
        End Select
    End If
End Sub
Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _
    Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long)
    Dim Rc          As Long
    Dim rClsId      As udtGUID
    Dim IID         As String
    Dim bIID()      As Byte
     
    If (riid <> 0) Then
        CopyMemory rClsId, ByVal riid, Len(rClsId)
         
        bIID = String$(MAX_GUIDLEN, 0)
        Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
        Rc = InStr(1, bIID, vbNullChar) - 1
        IID = Left$(UCase(bIID), Rc)
         
        Select Case IID
        Case IID_IDispatch
            If ((dwEnabledOptions And dwOptionsSetMask) <> _
                INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then
                Err.Raise E_FAIL
                Exit Sub
            Else
                If Not m_fSafeForScripting Then
                    Err.Raise E_FAIL
                End If
                Exit Sub
            End If
             
        Case IID_IPersistStorage, IID_IPersistStream, _
            IID_IPersistPropertyBag
            If ((dwEnabledOptions And dwOptionsSetMask) <> _
                INTERFACESAFE_FOR_UNTRUSTED_DATA) Then
                Err.Raise E_FAIL
                Exit Sub
            Else
                If Not m_fSafeForInitializing Then
                    Err.Raise E_FAIL
                End If
                Exit Sub
            End If
             
        Case Else
            Err.Raise E_NOINTERFACE
            Exit Sub
        End Select
    End If
End Sub

 

分享到:
评论

相关推荐

    VB6+IE activex_截全屏源码

    标题“VB6+IE activex_截全屏源码”涉及到的是使用Visual Basic 6 (VB6) 和 Internet Explorer ActiveX 控件来实现全屏截图的功能。ActiveX 是微软开发的一种技术,允许开发者创建可以在不同应用程序之间共享的组件...

    大量VB6+SQLSERVER实例

    《大量VB6+SQLSERVER实例》是一份宝贵的资源集合,主要涵盖了使用Visual Basic 6(VB6)与Microsoft SQL Server数据库进行开发的各种实践案例。这些实例对于深入理解VB6与SQL Server的集成应用,以及提升在实际项目...

    vb6+Sybase+Oracle

    标题中的“vb6+Sybase+Oracle”表明这是一个关于使用Visual Basic 6(VB6)编程语言与Sybase和Oracle数据库交互的项目。这个项目可能涉及到数据库连接、数据查询、数据更新以及用户界面的设计等核心内容。让我们深入...

    activex与js交互

    在IT领域,ActiveX与JavaScript(JS)交互是一种在客户端Web应用中常见技术,尤其在老版本的Internet Explorer浏览器中广泛使用。ActiveX是微软推出的一种技术,它允许开发人员创建能够与网页交互的控件,而...

    ActiveX组件与JavaScript交互

    ### ActiveX组件与JavaScript交互详解 #### 一、概述 ActiveX组件是一种可以在网页或桌面应用程序中运行的小型可执行程序,它支持多种语言编写,包括C++等。JavaScript是广泛应用于网页开发的一种脚本语言。本文将...

    非ie内核浏览器activex支持插件

    3. **跨内核支持**:插件的目的是实现跨内核的兼容性,这通常涉及到对ActiveX对象的重新实现或者在非IE浏览器中创建一个代理对象,使得调用ActiveX控件的JavaScript代码能在非IE内核环境中运行。 4. **安全问题**:...

    ActiveX获取PC硬件信息,IE浏览器

    本文将深入探讨如何利用ActiveX在IE浏览器中获取PC的硬件信息。 首先,ActiveX控件可以访问本地文件系统。通过调用特定的API函数,ActiveX可以读取、写入或管理用户计算机上的文件,这在需要与本地数据交互的应用...

    VB6嵌入谷歌浏览器

    在VB6(Visual Basic 6)中嵌入谷歌浏览器,主要涉及到的是ActiveX技术的应用,以及与WebBrowser控件的交互。以下将详细介绍这个过程,包括相关知识点和步骤。 首先,VB6是一个经典的Windows应用程序开发环境,它...

    IE浏览器activex修改及添加可信任站点BAT

    标题中的“IE浏览器activex修改及添加可信任站点BAT”指的是一个使用批处理(BAT)文件来管理和配置Internet Explorer(IE)浏览器的方案,主要涉及ActiveX控件的管理以及安全设置的调整。ActiveX是微软开发的一种...

    IE浏览器控制ActiveX组件

    总之,"IE浏览器控制ActiveX组件"是一种过时但仍然存在于某些特定场景的技术,它允许网页与IE浏览器更深度的交互,但同时也带来了安全风险。随着Web技术的发展,现代Web开发已经倾向于使用更安全、更标准化的解决...

    VB6+VsflexGrid做的程序

    该程序是基于VB6开发的,使用了VsflexGrid控件来实现数据的显示、编辑、保存、查询和打印功能,涵盖了VB与ADO(ActiveX Data Objects)的数据库交互技术。VsflexGrid是一款灵活的数据网格控件,允许用户在界面上以...

    精彩编程与编程技巧-如何在网页上使用 vb6 制作的 ActiveX 控件?...

    由于ActiveX控件主要针对Internet Explorer设计,因此在非IE浏览器中可能无法正常工作。此外,现代浏览器对插件的支持正在逐渐减少,转而支持更安全的HTML5技术。 为了提高安全性,可以通过设置控件的安全级别来...

    大量VB6+SQL 数据库实例源码

    本资源“大量VB6+SQL 数据库实例源码”提供了一系列完整的VB源码实例,帮助初学者和编程新手掌握如何在VB6中与SQL数据库进行交互。 1. **VB6与SQL连接基础** - ADO(ActiveX Data Objects)是VB6中常用的数据库...

    谷歌浏览器js打开IE浏览器.rar

    本示例“谷歌浏览器js打开IE浏览器.rar”提供了一个解决方案,它允许用户在谷歌浏览器(Chrome)中通过JavaScript代码启动IE浏览器。这主要适用于那些需要在现代浏览器环境下触发旧版IE兼容模式的场景。 JavaScript...

    VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用

    VB6的ActiveX EXE是为了解决跨平台和跨语言通信的问题,它创建了一个可执行文件,可以作为其他应用程序的组件进行交互。 在VB.NET中调用VB6的ActiveX EXE,主要依赖于COM(Component Object Model)互操作性。COM是...

    vb获得ie浏览器地址

    在Windows XP和Windows 2000操作系统上,VB可以很容易地与IE浏览器交互,因为这两个系统都内置了对ActiveX技术的支持。ActiveX是微软开发的一种组件对象模型,允许不同应用程序之间共享功能,其中包括与IE浏览器的...

    vb6实现安全多线程的ActiveX组件

    标题“vb6实现安全多线程的ActiveX组件”揭示了这个压缩包包含的是一个针对Visual Basic 6(VB6)开发的ActiveX组件,该组件特别设计用于在多线程环境中确保程序的安全运行。ActiveX是微软的一种技术,允许开发者...

    IE浏览器源码

    9. **安全与兼容性**:由于IE浏览器的市场份额和历史遗留问题,源码中会涉及很多兼容性和安全性的考虑,如ActiveX控件的管理、跨域策略等。 10. **调试与测试**:源码中通常包含调试工具和测试框架,以便于开发者...

    进销存(源代码,VB6+ADO).rar

    ADO是微软的数据库访问技术,它为VB6提供了一种简单且高效的方式与各种数据库进行交互。ADO模型包括Recordset、Connection、Command等对象,允许开发者执行SQL查询、操作数据、处理结果集等。在这个进销存系统中,...

    vb.net+access 学生信息管理系统

    2. **数据连接与操作**:VB.NET通过ADO.NET(ActiveX Data Objects .NET)库与Access数据库进行交互。这涉及创建数据库连接字符串,打开和关闭连接,执行SQL查询(如SELECT, INSERT, UPDATE, DELETE)来读写数据。 ...

Global site tag (gtag.js) - Google Analytics