chrome中使用AppEmit调用ocx使用文档,vue调用ocx

chrome中使用AppEmit调用ocx使用文档,vue调用ocx

需求背景

想要在chrome+Vue3项目内调用SDRdCard.ocx神思身份证读取器,因为ocx是IE浏览器内提供的,Vue3不支持IE浏览器。

了解到有安装浏览器插件的方式去实现,但是chrome在2020年12月后不再支持flash(NPAPI),而微软的edge也不支持ActiveX。

所以选了了使用中间件这种方式

  • AppEmit:收费和免费【免费版本,每次启动和第20、40、80…分钟时发消息会有弹窗,不在意的话可以选择】
  • 猿大师:收费

开发步骤

  1. 创建vue3项目

  2. 下载AppEmit

    https://www.appemit.com

  3. 运行AppEmit

    我调用的是SDRdCard.ocx,读取身份证功能,

    • 将SDRdCard.cab解压缩,获得到了 下面几个文件

      Getinfo.dll
      RdCard.dll
      SDRdCard.inf
      SDRdCard.ocx
      termbt.dll
      
    • 编写安装控件bat命令,将复制文件到系统目录,自行修改下面copy命令将解压后的文件都复制到系统目录

      # 安装控件64位.bat
      cd /d "%~dp0"
      copy  SDRdCard.ocx C:\windows\SysWOW64
      copy  RdCard.dll C:\windows\SysWOW64
      copy  Getinfo.dll C:\windows\SysWOW64
      copy  SDRdCard.dll C:\windows\SysWOW64
      copy  termbt.dll C:\windows\SysWOW64
      
      C:\windows\SysWOW64\regsvr32 SDRdCard.ocx
      
      # 安装控件32位.bat
      cd /d "%~dp0"
      
      copy  SDRdCard.ocx C:\windows\System32
      copy  RdCard.dll C:\windows\System32
      copy  Getinfo.dll C:\windows\System32
      copy  SDRdCard.dll C:\windows\System32
      copy  termbt.dll C:\windows\System32
      
      C:\windows\System32\regsvr32 SDRdCard.ocx
      
    • 根据系统位数安装执行不同的bat命令 安装控件64位.bat安装控件32位.bat

      注意:bat命令要和要移动的文件[SDRdCard.cab解压缩获得的文件]在相同目录

    • AppEmit根目录放入SDRdCard.ocx文件

    • 双击运行AppEmit.exe文件,首次运行可使用管理员身份运行

  4. 在运行的AppEmit根目录编写index.htm

    <html>
    <head>
      <title>身份证读取</title>
    </head>
    <body>
    <OBJECT classid=clsid:F1317711-6BDE-4658-ABAA-39E31D3704D3 width=0 height=0 align="center"
            codebase="SDRdCard.cab#version=1,3,6,4" id="SDRdCardDom" HSPACE=0 VSPACE=0>
    </OBJECT>
    <center><h3> 身份证读取演示 </h3></center>
    
    <input type="button" onclick="javascript:OpenCard()" value="OpenPort" />
    <input type="button" onclick="javascript:readCard()" value="readCard" />
    <br>
    <script language="javascript">
    
      function OpenCard() {
        const openRes = SDRdCardDom.OpenPort(); // SDRdCard内的方法
        alert('OpenPort:' + (openRes == 0 ? '成功' : '失败'))
      }
      function readCard() {
        const readcardRes =SDRdCardDom.readcard();// SDRdCard内的方法
        alert('readcard:' + (readcardRes == 0 ? '成功' : '失败'))
        if (readcardRes == 0) {
          alert('身份证号:' + SDRdCardDom.CardNo)
        }
      }
    </script>
    </body>
    </html>
    
  5. 编写vue读取组件

      <template>
        <button @click="resetPage">重新连接</button>
        <div id="AppEmbed1" style="border: solid 2px #F0F0F0; min-width:30px;min-height:20px;width:600px;height:400px" ></div>
      </template>
      <script setup>
      import { onBeforeUnmount, onMounted, ref } from 'vue'
      
      function initAppEmit() {
        // 回调方法-可选
        AE.callbackFunc = [{
          'equ': {
            'service': 'appemit', 'rid': 0, 'clientAuth': 1
          }, 'func': function(res) {
            console.log('✨ websocket连接状态:✨ ', res)
            openPage()
          }
        }]
        // AppEmit默认80端口,可在config.ini内修改
        AE.InitApp('ws://localhost:80/appemit?cid=00000-1&sid=1&flag=1', AE.callbackFunc)
      
      }
      
      // 打开页面
      const openPage = () => {
        const ReqPar = {
          "emit": "open", "Obj": "web", "AppType": 1, "pos": 1, "AppId": 1, "par": {
            "URL": '/index.htm' // *以AppEmit运行目录为根目录,非项目目录*
              , "htmlStr": null
              , "HttpServer_startUrl": null
            	, "embed_object": {//多个object可以设置embed_object为数组
                  "objName": "SDRdCard"
                  , "reg": true    //null 不执行注册   1强制操作 true 未注册则注册  false 卸载注册 (重启AppEmit后,就不能加载dll了)
                  , "asAdmin": 0   //1需要管理员权限注册 0不需要 ,win7管理员身份会有提示确认窗口
                  , "dllFile": "/SDRdCard.ocx" //为了安全,限制为AppEmit文件夹,不能注册或者注销其它文件夹下面的ocx,*所以要将SDRdCard.ocx放在AppEmit运行根目录*
            	}
          }
        };
        AE.OpenApp(ReqPar);
      }
      
      // 重新连接
      function resetPage() {
        AE.CloseApp({}) // 关闭所有
        openPage()
      }
          
      onMounted(() => {
        initAppEmit()
      })
      
      onBeforeUnmount(() => {
        AE.CloseApp({})
      })
      </script>
      <style scoped>
      
      </style>
      ```

      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/559158.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

提升测试效率,专业方案揭秘

提升测试效率是软件开发中一个永恒的主题&#xff0c;它不仅关乎项目能否按期完成&#xff0c;更影响着软件产品的质量与用户体验。随着敏捷开发、持续集成等方法论的普及&#xff0c;如何在有限的时间内进行高效、全面的测试成为了开发者和测试人员面临的挑战。 在传统模式中&…

Windows 平台上面管理服务器程式的高级 QoS 策略

在 Windows 平台上面&#xff0c;目前有两个办法来调整应用程式的 QoS 策略设置&#xff0c;一种是通过程式设置&#xff0c;一种是通过 “Windows 组策略控制”。 在阅读本文之前&#xff0c;您需要先查阅本人以下的几篇文献&#xff0c;作为前情提示&#xff1a; VC Windows…

数据质量与策略:解锁生成式AI潜力的关键步骤

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

每日一题(L2-011):玩转二叉树--建树+层序遍历

与L2-006近乎相同&#xff0c;先建树&#xff0c;然后遍历 #include<bits/stdc.h> using namespace std; int in[35]; int pre[35]; typedef struct Tree{int num;Tree* left;Tree* right; }T;T * build(int in1,int in2,int pre1,int pre2){T * tnew T;t->numpre[pr…

战姬物语部署

一.准备环境 #关闭seliunx和防火墙 setenforce 0 systemctl stop firewalld systemctl disable firewalld #配置源&#xff0c;并安装常用工 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo …

Leetcode 86. 分隔链表

题目链接&#xff1a; 86. 分隔链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/partition-list/description/ 题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出…

深入探究图像增强(C语言实现)

我们将从基础出发使用C语言进行图像处理与分析&#xff0c;重点讨论图像增强和平滑技术。图像增强技术旨在通过增加对比度、亮度和整体清晰度来改善图像的视觉质量。另一方面&#xff0c;图像平滑方法则用于减少噪声并减少图像中的突变&#xff0c;使图像更加均匀和视觉上吸引人…

利用二维码定位技术实现桌面机器人简易定位方案(上篇)

目录 1、前言2、二维码的定位标签识别原理3、生成定位标签3、基于定位标签的物体识别与定位 1、前言 机械手臂尤其是工业场景下大部分的应用是在一个平面&#xff08;桌面&#xff09;内完成一些抓取工作。一般可以用示教方式完成重复步骤。但是示教方式&#xff0c;对于一些活…

过氧化氢滴定方法可用的PFA器皿有哪些?

滴定液:KMnO4标准溶液 试液:H2O2商品液(3%)&#xff0c;H2SO4 (3.0mol/L ) 指示剂:酚酞指示剂 仪器:分析天平&#xff0c;PFA酸式滴定管50mL&#xff0c;PFA 移液管10mL/25mL、PFA 容量瓶250mL、PFA锥形瓶250mL 1、KMnO4标准溶液浓度的标定(见实验:高锰酸钾标准溶液的配制与…

记一次普通的单表查询sql优化,去掉文件排序

一现象&#xff1a; 有空观察了线上某个sql语句执行计划&#xff0c;发现在500多毫秒左右&#xff0c;打算进行下优化。 二步骤&#xff1a; 对查询列assessment_periodic_id、assessment_user_id、create_time添加了组合索引并指定了倒叙。加入create_time 使查询结果不需要在…

阿里云OSS 存储对象的注册与使用

目录 一、什么是阿里云OSS 二、 点击免费试用 2.1 选择第一个&#xff0c;点击免费试用 ​编辑 2.2 登录管理控制台 2.3 进入Bucket 2.4、在阿里云网站上的个人中心配置Accesskey,查询accessKeyId和accessKeySecret。 2.5、进入AccssKey管理页面应该会出现下图提示&…

通用大模型研究重点之五:llama family

LLAMA Family decoder-only类型 LLaMA&#xff08;Large Language Model AI&#xff09;在4月18日公布旗下最大模型LLAMA3&#xff0c;参数高达4000亿。目前meta已经开源了80亿和700亿版本模型&#xff0c;主要升级是多模态、长文本方面工作。 模型特点&#xff1a;采用标准的…

Java面试八股之Java异常处理完成后,Exception对象会发生什么变化

Java异常处理完成后&#xff0c;Exception对象会发生什么变化 这个题的难度在于&#xff0c;看到题之后可能不知道面试官想问什么。在面试中&#xff0c;如果实在没明白&#xff0c;可以让面试官再深入阐述一下。 Java异常处理完成后&#xff0c;Exception对象失去了程序中的…

自定义Blazor单文件Web程序端口

#接 上篇 Mysql快速迁移版的制作过程# 上一篇《Mysql8快速迁移版的制作过程》完成了快速迁移的数据库的准备&#xff0c;今天接着讲基于Blazor的Web程序快速迁移版的制作。 单文件发布的难点不在发布而是因为程序系统默认给了个5001的端口&#xff0c;而是如何能够让用户自定…

Leetcode 11.盛最多水的容器(暴力->双指针)

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。 示例 …

Postman调用OpenApi接口

首先你需要科学上网。。。。。 请求方式&#xff1a;post 请求地址&#xff1a;https://api.openai.com/v1/chat/completions 请求头&#xff1a; Authorization : Bearer key Content-Type : application/json Body : { "messages": [{ "role": &quo…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(1)——功能清单

1.匿名登录 2.服务连接 3.新手引导 4.随机出生点 5.界面布局 6.玩法帮助 7.NPC会话 8.成就系统 9.成就达成 10.用户聊天 11.战斗&信息展示 12.药水使用 13.副本传送 14.玩家死亡 15.超时断开

OpenHarmony 视图缩放组件—subsampling-scale-image-view

简介 深度缩放视图&#xff0c;图像显示&#xff0c;手势平移缩放双击等 效果图&#xff08;旋转、缩放、平移&#xff09; 下载安装 ohpm install ohos/subsampling-scale-image-view OpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何安装 OpenHarmony ohpm 包 使…

Servlet第四篇【request对象常用方法、应用】

什么是HttpServletRequest HttpServletRequest对象代表客户端的请求&#xff0c;当客户端通过HTTP协议访问服务器时&#xff0c;HTTP请求头中的所有信息都封装在这个对象中&#xff0c;开发人员通过这个对象的方法&#xff0c;可以获得客户这些信息。 简单来说&#xff0c;要得…

mysql四种引擎区别

MySQL 提供了多种不同的数据库引擎&#xff0c;其中最常见的有 MyISAM、InnoDB、MEMORY 和 BLACKHOLE。这四个引擎分别有以下特点&#xff1a; 1. MyISAM MyISAM 是 MySQL 的默认引擎。它对于只有较少的修改、大量读取的应用场景具有良好的性能。它不支持事务处理&#xff0c;也…