前言
本博客介紹二維碼掃描槍對(duì)接声搁,本博客僅僅寫(xiě)寫(xiě)實(shí)現(xiàn)過(guò)程刽漂,僅僅是給學(xué)習(xí)者作為一個(gè)了解僻焚,二維碼掃描槍需要相關(guān)硬件廠家做好一些dll動(dòng)態(tài)鏈接庫(kù)芹枷,當(dāng)然也有一些不需要dll動(dòng)態(tài)鏈接庫(kù)衅疙,動(dòng)態(tài)鏈接庫(kù)的需要廠家提供,各有不同杖狼,所以本博客僅僅是作為學(xué)習(xí)參考炼蛤。
DLL動(dòng)態(tài)鏈接庫(kù)和ActiveX的相關(guān)概念
DLL是Dynamic Link Library的縮寫(xiě),意為動(dòng)態(tài)鏈接庫(kù)。DLL是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫(kù)焕毫。
ActiveX是Microsoft對(duì)于一系列策略性面向?qū)ο蟪绦蚣夹g(shù)和工具的稱(chēng)呼,其中主要的技術(shù)是組件對(duì)象模型(COM)室埋。在有目錄和其它支持的網(wǎng)絡(luò)中嗽上,COM變成了分布式COM(DCOM)次舌。
二維碼生成
現(xiàn)在要實(shí)現(xiàn)的功能是這樣的,網(wǎng)站打開(kāi)按鈕兽愤,就啟動(dòng)掃描槍?zhuān)瑨呙瓒S碼之后彼念,網(wǎng)站自動(dòng)跳轉(zhuǎn)一個(gè)頁(yè)面
頁(yè)面上,我們可以用jquery一些插件生成一個(gè)二維碼浅萧,二維碼里可以放一個(gè)查詢(xún)的id就好逐沙。
定義一個(gè)div,來(lái)放二維碼
<div name="tQrcode" id="tQrcode" style="margin-left: 100px;"></div>
引入jquery生成二維碼的插件jquery.qrcode.js洼畅,腳本實(shí)現(xiàn)
<script language="javascript">
$(function(){
$("div[name='tQrcode']").each(function(index,element){
createtQrcode(element);
})
});
//生成辦件二維碼
function createtQrcode(obj){
var qrcode = $(obj).qrcode({
text: '${t.seq}',//加上統(tǒng)一查詢(xún)碼
width: 100,
height: 100,
colorDark : '#000000',
colorLight : '#ffffff',
correctLevel:3
});
var canvas = $(obj).children("canvas");
var img = canvas[0].toDataURL("image/png")
$(obj).html("<img src='" + img + "'>")
}
</script>
驅(qū)動(dòng)安裝和dll注冊(cè)
1.先確認(rèn)電腦是否有安裝過(guò)VC庫(kù)
若沒(méi)有吩案,需安裝
2、安裝udp_and_vcom_drv_x86x64V2.0.1.msi
3帝簇、注冊(cè)COM組件
根據(jù)電腦多少位將【掃描槍Dll注冊(cè).zip】的所有dll復(fù)制到
32位:C:\WINDOWS\system32或者64位:C:\ WINDOWS\SysWOW64
在CMD下運(yùn)行下面命令注冊(cè)COM組件 regsvr32 NLcpfw_Com.dll
regsvr32 NLcpfw_Com.dll或者regsvr32 C:\Windows\SysWOW64\NLcpfw_Com.dll
4徘郭、安裝驅(qū)動(dòng)【USB-COM-Driver-x32.msi 適用于32位操作系統(tǒng)】/【USB-COM-x64.msi 適用于64位操作系統(tǒng)】
5、把【approveUnit.txt】放C盤(pán)根目錄下丧肴,然后修改如下圖的三個(gè)位置的數(shù)字残揉,改為設(shè)備管理器里的端口號(hào)。端口號(hào)在設(shè)備管理器里能看到芋浮,右鍵“我的電腦”--管理--設(shè)備管理器抱环,
6、測(cè)試
若發(fā)現(xiàn)串口號(hào)是com4的話途样,則需繼續(xù)修改C盤(pán)目錄下的approveUnit文件
最后測(cè)試是否可以正確讀取二維碼信息江醇,若可以正確讀取,則在下面空白框中自動(dòng)顯示所讀取數(shù)據(jù)
注意問(wèn)題:
硬件對(duì)接的必須用ie瀏覽器何暇,先設(shè)為受信任站點(diǎn)陶夜,在進(jìn)去自定義級(jí)別設(shè)置支持ActiveX控件
掃描槍對(duì)接
頁(yè)面加上這些代碼
<div style="display:none"><!-- 掃描搶 -->
<object id="idtPort" classid="CLSID:xxx" codebase="com.cab#version=1,0,0,1"></object>
</div>
觸發(fā)函數(shù),掃描槍掃二維碼后裆站,獲取的數(shù)據(jù)dataStr
<script language="javascript" event="ReadDataEvent(lParam)" for="idtPort">
var len = idtPort.get_data_len();
var arr = idtPort.get_data(len);
var vbarray = new VBArray(arr);
var jsarray = vbarray.toArray();
for(var i=0;i<jsarray.length;i++)
{
jsarray[i]=String.fromCharCode(jsarray[i]);
}
var dataStr = jsarray.join("");
//掃描二維碼后直接跳到相應(yīng)的辦件頁(yè)面
toApprovePageHZ(dataStr);
</script>
掃描槍的一些腳本
//關(guān)閉掃描槍端口
function ClosePort()
{
var ret = idtPort.close();
if(ret == 0)
{
//alert("關(guān)閉掃描槍成功");
}else {
//alert("關(guān)閉掃描槍失敗");
}
}
//打開(kāi)掃描槍端口
function OpenPort()
{
var PorNum = initByFile();
var PortType = "com";
if(PorNum==null || PorNum=="")
{
PorNum = "1";
}
//var newfilepath = PorNum+";baud=115200";
var newfilepath = "com="+PorNum+";baud=000";
var ret = idtPort.open(PortType,newfilepath);
if(ret == 0)
{
alert("打開(kāi)掃描槍成功");
}
else
{
alert("二維碼掃描槍接口打開(kāi)失敗条辟,錯(cuò)誤碼"+ret);
}
}
//把十進(jìn)制數(shù)換成相應(yīng)的16進(jìn)制
function d2x(x)
{
var temp = 0;
var ftable = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
x = x.split(",");
for (var i = 0; i < x.length; i++)
{
temp = parseInt(x[i]);
x[i] = ftable[Math.floor(temp / 16)] + ftable[temp % 16];
}
return x.join("");
}
//讀C盤(pán)下的COM口配置文件
function initByFile(){
var filePath = "c:\\approveUnit.txt";
var sRet = "3";
try {
var fso=new ActiveXObject("Scripting.FileSystemObject");
var reading=1;
var f=fso.OpenTextFile(filePath,reading);
f.ReadLine();
f.ReadLine();
f.ReadLine();
sRet = f.ReadLine();
f.close();
} catch(err) {
sRet = "3";
//alert("文件:"+filePath+"(第4行二維描描槍號(hào))不存在或讀取出錯(cuò)了!"+err);
}
return sRet;
}