汉王手写签批控件如何在谷歌、火狐、Edge等浏览器使用

背景

        近日,有网友咨询汉王手写签批控件是否可以通过allWebPlugin中间件技术加载到谷歌、火狐、Edge等浏览器?为此,笔者详细了解了一下汉王手写签批控件,它是一个标准的ActiveX控件,曾经主要在IE浏览器使用,由于微软禁用IE浏览器,导致汉王手写签批控件无法使用。因此,网友希望能在谷歌、火狐、Edge等浏览器上使用这个控件。

        allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品致力于将浏览器插件重新应用到所有浏览器。它不仅可以实现ActiveX控件在现代浏览器上使用,而且集成也非常方便。

准备工作

1、下载allWebPlugin中间件产品,具体如下:

链接:百度网盘 请输入提取码 
提取码:z3q0 

如下图所示,下载allWebPlugin_x86_v2.0.0.20_alpha_演示包_20240908.zip安装包。

安装包截图

​​2、下载汉王手写签批控件,笔者百度网盘放了一份汉王手写签批控件demo实例。具体如下:

链接:百度网盘 请输入提取码 
提取码:z3q0 

如下图所示,下载ESP370ocx正式版-20150515.zip安装包。

下载以上内容,并安装。

汉王手写签批控件demo展示

下面将展示汉王手写签批控件demo html源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>汉王手写签批测试页面</title><style type="text/css">.style1{font-size: xx-large;font-family: 宋体, Arial, Helvetica, sans-serif;color: #FF3399;}.style2{font-size: 16px;font-family: 宋体, Arial, Helvetica, sans-serif;color: #FF3399;}.style3{font-size: 12px;font-family: 宋体, Arial, Helvetica, sans-serif;color: #000000;}.style4{font-size: 12px;font-family: 宋体, Arial, Helvetica, sans-serif;color: #FF0000;}</style><script language="javascript" type="text/javascript">penwidth = 3;var obj;window.onload = function(){   obj = document.getElementById("HWPenSign"); obj.HWSetBkColor(0xE0F8E0);  obj.HWSetCtlFrame(2, 0x000000);}function Button1_onclick() {res = obj.HWInitialize();
}function Button2_onclick() {var stream;stream = obj.HWFinalize();
}function Button3_onclick() {obj.HWClearPenSign();
}function Button6_onclick() {obj.HWSetPenColor(0x000000);   
}function Button7_onclick() {obj.HWSetPenColor(0xFF0000);   
}function Button8_onclick() {obj.HWSetPenColor(0x00FF00);   
}function Button9_onclick() {obj.HWSetPenColor(0x0000FF);   
}function Button10_onclick() {penwidth++;if(penwidth >5)penwidth = 5;obj.HWSetPenWidth(penwidth);   
}function Button11_onclick() {penwidth--;if(penwidth < 1)penwidth = 1;obj.HWSetPenWidth(penwidth);   
}function Button12_onclick() {obj.HWSetPenMode(1);
}function Button13_onclick() {obj.HWSetPenMode(0);
}function Button14_onclick() {var stream;stream = obj.HWGetBase64Stream(2);alert(stream);
}function Button15_onclick() {obj.HWSetFilePath("e:\\sign.jpg"); obj.HWSaveFile();
}function signComplete() {Button14_onclick();
}function signRestart() {;         
}</script></head>
<body><p align="center"><b><span class="style1">汉王手写签批控件Demo</span><br class="style1" /></p><p style="margin-left: 40px"><b><span class="style2">Demo使用说明</span>:</p><p style="margin-left: 40px"><span class="style3"> (1) &quot;初始化设备&quot; :打开设备,汉王手写板进入签字模式。 因为对设备是独占式的访问,所以在重新进行&quot;初始化设备&quot;动作之前,必须确保已经&quot;关闭设备&quot;。对应接口函数为HWInitialize()。<br /><br />(2) &quot;关闭设备&quot;:关闭设备,汉王手写板进入待机模式。对应接口函数为HWFinalize()。</span></p><p style="margin-left: 40px"><span class="style3">(3) &quot;重新签名&quot;: 清空手写控件界面及汉王手写板上的笔迹。对应接口函数为HWClearPenSign()。<br /><br />(4) &quot;笔宽加粗&quot;/&quot;笔宽减细&quot;:调整画笔的粗细,支持5级设置,默认为3级。对应接口函数为HWSetPenWidth()。<br /><br />(5) &quot;画笔颜色&quot;:设置画笔的颜色。默认为黑色。对应接口函数为HWSetPenColor()。<br><br>(6)&quot;压力笔&quot;/&quot;钢笔&quot;:&quot;压力笔&quot;模式下,笔迹会随着压感发生粗细变化。&quot;钢笔&quot;模式下,笔迹粗细不变。对应接口函数为HWSetPenMode()。</span></p><p style="margin-left: 40px"><span class="style3">(7)&quot;保存图像&quot;: 将图像保存至指定路径,对应接口函数为HWSaveFile()。调用此函数之前,请先调用HWSetFilePath()设置保存路径。支持图像格式为:bmp /jpg /png /gif。<br><br>(8)&quot;Base64Stream&quot;: 支持将图像转化为Base64数据流,以便于网络间的传输。</span></p><p style="margin-left: 40px"><span class="style3">各接口函数的参数和返回值详情,请查阅“汉王手写签批控件接口文档.doc”。</span></p><p style="margin-left: 40px"><br class="style1" />           		<b></p><table width="90%" border="0" align="center" cellpadding="3" cellspacing="0">           <tr class="style7"><td width="30%" vAlign="center" height="217" align="right"><P>签字区域:            </P></td>  <td  align="left"><object id="HWPenSign"name="HWPenSign"classid="clsid:E8F5278C-0C72-4561-8F7E-CCBC3E48C2E3"width="600"height="300"></object></td></tr>                       </table><p>&nbsp;
</p> <p>&nbsp;
</p><p style="margin-left: 500px">签名控制: <input id = "button1" type ="button" value="初始化设备" onclick ="return Button1_onclick()" />&nbsp;&nbsp;<input id = "button2" type ="button" value="关闭设备" onclick ="return Button2_onclick()" />&nbsp;&nbsp; <input id="Button3" type="button" value="重新签名" onclick="return Button3_onclick()" /><br><br> 画笔控制:<input id="Button6" type="button" value="黑色" onclick="return Button6_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button7" type="button" value="红色" onclick="return Button7_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button8" type="button" value="绿色" onclick="return Button8_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button9" type="button" value="蓝色" onclick="return Button9_onclick()" /><br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <input id="Button10" type="button" value="笔宽加粗" onclick="return Button10_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button11" type="button" value="笔宽减细" onclick="return Button11_onclick()" /> <br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <input id="Button12" type="button" value="压力笔" onclick="return Button12_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button13" type="button" value="钢笔" onclick="return Button13_onclick()" /><br><br>签名图像:&nbsp;&nbsp;<input id="Button14" type="button" value="Base64Stream" onclick="return Button14_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button15" type="button" value="保存图像" onclick="return Button15_onclick()" /> &nbsp;&nbsp;<br><br>      </p>
</body>
</html>

allWebPlugin中间件集成步骤

第一步:导入js相关文件

导入jquery.min.js,allWebPlugin.Common.js,allWebPlugin.UI.js文件。

 <script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/allWebPlugin.Common.js"></script><script type="text/javascript" src="js/allWebPlugin.UI.js"></script>  

第二步:替换<object>页面元素代码

将网页中<object>元素替换成<canvas>元素。如下图所示:

<td  align="left">
<!--object id="HWPenSign"name="HWPenSign"classid="clsid:E8F5278C-0C72-4561-8F7E-CCBC3E48C2E3"width="600"height="300"></object-->
<canvas id="pluginUI" width="600" height="300">
<p class="error">Sorry, It looks as though your browser does not support the canvas tag.</p>
</canvas>
</td>

第三步:拷贝控件创建方法

拷贝控件创建方法CreateContainer及CreatePlugin,将其放到网页onload事件里面,方便页面加载时,创建控件对象。其中createProxyPlugin方法创建控件对象,需要传入控件的classid或者ProgID。

function CreateContainer(){var canvas = document.getElementById('pluginUI');var license = "9y4LEm/V6Su9+CP9ION3CqBZzsnSyJW2BIOmkgGdrKd6LsGVXCWlcRBxGfVF1XOPzC9WxlN0wrsQJJzy/Sb5YUhnxibuGY6cwTXP6MALEUEQFzXbytCCYZ8yuWbKwaSdWw5/nsk02HtT/EqxC9jsQEwXfCiLGpeyww5MszBO4EV6/Whk4dpno9z1IP+gYlZ5emPuZWPcA0xfdPfMd8CdZ7O2Y1kH4iqJRcUDZpZLQZzRaaxD4GC6rmYjAT+0hOxf741S1EV6EjTzdZdllR2Gc3/ho/O+lqeG77Lq/sI7eGuRrB92QT4P/dmWmDpM0Qg9AAAA8AEAAQMCpzvCVYrodJHnQlzcchghAVhG8HkPd/M3WbD7ikYNYSMNpadQHw22md/os+H8in1qcUBIUHlshxFEKT84jEPIP39iTN7E4IqEACvPF8duWkErP8vRvrSSxA67jQEesJV2RkXphVUw20qAYDXse5UBsLuIlpsfae59Q3VuDFyGZ9K7Rj3fGG7lMrQxhNPj0IkDKfsa/4S2vDl43A4JLdGE8PyHMOxOGWIBwAzTQvOIA2gT2bC8bUP2HnHz//04r8CZ848wnMgZ8ifdtBGgPIIvhvhNvdHNW3d7GDWIFz7migklvNukCsVNhNjck73Co8JMQppp5n4RY5Ck0DdBVe1iogABAYICCgGCMEGy6w+KRf1qX5NoDdyEKnrHfuE5hco4f/fwKsNo3Dwo1sUFB9hbxusOUSAAyYDfvQWc4CdxoSf7kM4ojInlHHvTw0ppKCFV7H17iDOXdJFKZmkjeFCeubn3VezepCvW1+Z9s84M2uILZgIGw7eIQ/je0Bz+qEWyiqWbA4QYiTHzUwQtZyntNcqYpS0PxXXmV9I21wh48DIV/9DTeZW5OZwRcHivVXFaqW2uxngqGdbw1xyJ9AMhrGdt9S2R2rd1jzNq7ddiKN09TCt806vlF1zGAxb5zq6WjwPxeG7aoE33cTRnEg5WvNM4puhmYOWYi61D8j8lzXheUCJGpsw39CoAAAEOAAAAAUFXUEY=";	var installPackageUrl = "http://127.0.0.1:6651/install/allwebPlugin_x86_v2.0.1.16_20240806.exe";var installPackageVersion = "2.0.0.16";	hostCnt = new PluginHostCnt();if(hostCnt.IsInstall() == false){//未安装,需要手动安装if(confirm("allWebPlugin中间件未安装或未启动,是否立即安装?")){window.open(installPackageUrl, '_blank');}}else{//已安装,检测是否需要版本更新if(hostCnt.IsNewVersion(installPackageVersion) == false){if(hostCnt.createContainer(canvas,"PluginContainer",license,true) == true){	//hostCnt.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件hostCnt.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand;OnOLECommand");CreatePlugin();}}else{//需要升级alert("检测到升级包,立即升级。");hostCnt.UpdateVersion(installPackageUrl).then(function(data){if(data.code == 0){	//检测是否安装成功var checkInstall = setInterval(function(){if(hostCnt.GetVersion() == installPackageVersion){window.location.reload();clearTimeout(checkInstall);}}, 1000);}else{window.open(installPackageUrl, '_blank');//直接下载包,手动安装}}).catch(function(strErr){window.open(installPackageUrl, '_blank');//直接下载包,手动安装});}}
}function CreatePlugin(){if(hostCnt == null)return;obj = hostCnt.createProxyPlugin("{E8F5278C-0C72-4561-8F7E-CCBC3E48C2E3}");
}

第四步:运行效果

到此,汉王手写签批控件就集成完了。运行效果如下:

汉王手写签批执行效果
汉王手写签批手写效果

 

集成allWebPlugin完整代码

 为了方便大家了解allWebPlugin中间件技术,现将集成实例代码提供出来,如下如所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>汉王手写签批测试页面</title><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><style type="text/css">.style1{font-size: xx-large;font-family: 宋体, Arial, Helvetica, sans-serif;color: #FF3399;}.style2{font-size: 16px;font-family: 宋体, Arial, Helvetica, sans-serif;color: #FF3399;}.style3{font-size: 12px;font-family: 宋体, Arial, Helvetica, sans-serif;color: #000000;}.style4{font-size: 12px;font-family: 宋体, Arial, Helvetica, sans-serif;color: #FF0000;}</style><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/allWebPlugin.Common.js"></script><script type="text/javascript" src="js/allWebPlugin.UI.js"></script>   
<script language="javascript" type="text/javascript">penwidth = 3;var obj;var hostCnt = null;
window.onload = function(){   //obj = document.getElementById("HWPenSign");CreateContainer();obj.HWSetBkColor(0xE0F8E0);  obj.HWSetCtlFrame(2, 0x000000);}
function CreateContainer(){var canvas = document.getElementById('pluginUI');var license = "9y4LEm/V6Su9+CP9ION3CqBZzsnSyJW2BIOmkgGdrKd6LsGVXCWlcRBxGfVF1XOPzC9WxlN0wrsQJJzy/Sb5YUhnxibuGY6cwTXP6MALEUEQFzXbytCCYZ8yuWbKwaSdWw5/nsk02HtT/EqxC9jsQEwXfCiLGpeyww5MszBO4EV6/Whk4dpno9z1IP+gYlZ5emPuZWPcA0xfdPfMd8CdZ7O2Y1kH4iqJRcUDZpZLQZzRaaxD4GC6rmYjAT+0hOxf741S1EV6EjTzdZdllR2Gc3/ho/O+lqeG77Lq/sI7eGuRrB92QT4P/dmWmDpM0Qg9AAAA8AEAAQMCpzvCVYrodJHnQlzcchghAVhG8HkPd/M3WbD7ikYNYSMNpadQHw22md/os+H8in1qcUBIUHlshxFEKT84jEPIP39iTN7E4IqEACvPF8duWkErP8vRvrSSxA67jQEesJV2RkXphVUw20qAYDXse5UBsLuIlpsfae59Q3VuDFyGZ9K7Rj3fGG7lMrQxhNPj0IkDKfsa/4S2vDl43A4JLdGE8PyHMOxOGWIBwAzTQvOIA2gT2bC8bUP2HnHz//04r8CZ848wnMgZ8ifdtBGgPIIvhvhNvdHNW3d7GDWIFz7migklvNukCsVNhNjck73Co8JMQppp5n4RY5Ck0DdBVe1iogABAYICCgGCMEGy6w+KRf1qX5NoDdyEKnrHfuE5hco4f/fwKsNo3Dwo1sUFB9hbxusOUSAAyYDfvQWc4CdxoSf7kM4ojInlHHvTw0ppKCFV7H17iDOXdJFKZmkjeFCeubn3VezepCvW1+Z9s84M2uILZgIGw7eIQ/je0Bz+qEWyiqWbA4QYiTHzUwQtZyntNcqYpS0PxXXmV9I21wh48DIV/9DTeZW5OZwRcHivVXFaqW2uxngqGdbw1xyJ9AMhrGdt9S2R2rd1jzNq7ddiKN09TCt806vlF1zGAxb5zq6WjwPxeG7aoE33cTRnEg5WvNM4puhmYOWYi61D8j8lzXheUCJGpsw39CoAAAEOAAAAAUFXUEY=";	var installPackageUrl = "http://127.0.0.1:6651/install/allwebPlugin_x86_v2.0.1.16_20240806.exe";var installPackageVersion = "2.0.0.16";	hostCnt = new PluginHostCnt();if(hostCnt.IsInstall() == false){//未安装,需要手动安装if(confirm("allWebPlugin中间件未安装或未启动,是否立即安装?")){window.open(installPackageUrl, '_blank');}}else{//已安装,检测是否需要版本更新if(hostCnt.IsNewVersion(installPackageVersion) == false){if(hostCnt.createContainer(canvas,"PluginContainer",license,true) == true){	//hostCnt.UI.ForceShowUI(false);//创建时隐藏插件,需要调用这句,隐藏插件hostCnt.RegisterEvent("OnCreated;OnCommand;OnRibbonCtrlCommand;OnOLECommand");CreatePlugin();}}else{//需要升级alert("检测到升级包,立即升级。");hostCnt.UpdateVersion(installPackageUrl).then(function(data){if(data.code == 0){	//检测是否安装成功var checkInstall = setInterval(function(){if(hostCnt.GetVersion() == installPackageVersion){window.location.reload();clearTimeout(checkInstall);}}, 1000);}else{window.open(installPackageUrl, '_blank');//直接下载包,手动安装}}).catch(function(strErr){window.open(installPackageUrl, '_blank');//直接下载包,手动安装});}}
}function CreatePlugin(){if(hostCnt == null)return;//{6888ECA8-57D0-6E0E-9B9B-F1FF9B2DBD86} allWebOffice//{C7F277DC-6C47-AB2C-FB6A-070DC8BE7533} suwellreader//{D89F482C-5045-4DB5-8C53-D2C9EE71D025} 老东家iWebOffice2015//{9BE31822-FDAD-461B-AD51-BE1D1C159921}  VLC//{082ECC40-38F1-4E8F-82D3-216009A96686}  RSignReaderobj = hostCnt.createProxyPlugin("{E8F5278C-0C72-4561-8F7E-CCBC3E48C2E3}");
}function Button1_onclick() {res = obj.HWInitialize();
}function Button2_onclick() {var stream;stream = obj.HWFinalize();
}function Button3_onclick() {obj.HWClearPenSign();
}function Button6_onclick() {obj.HWSetPenColor(0x000000);   
}function Button7_onclick() {obj.HWSetPenColor(0xFF0000);   
}function Button8_onclick() {obj.HWSetPenColor(0x00FF00);   
}function Button9_onclick() {obj.HWSetPenColor(0x0000FF);   
}function Button10_onclick() {penwidth++;if(penwidth >5)penwidth = 5;obj.HWSetPenWidth(penwidth);   
}function Button11_onclick() {penwidth--;if(penwidth < 1)penwidth = 1;obj.HWSetPenWidth(penwidth);   
}function Button12_onclick() {obj.HWSetPenMode(1);
}function Button13_onclick() {obj.HWSetPenMode(0);
}function Button14_onclick() {var stream;stream = obj.HWGetBase64Stream(2);alert(stream);
}function Button15_onclick() {obj.HWSetFilePath("e:\\sign.jpg"); obj.HWSaveFile();
}function signComplete() {Button14_onclick();
}function signRestart() {;         
}</script></head>
<body><p align="center"><b><span class="style1">汉王手写签批控件Demo</span><br class="style1" /></p><p style="margin-left: 40px"><b><span class="style2">Demo使用说明</span>:</p><p style="margin-left: 40px"><span class="style3"> (1) &quot;初始化设备&quot; :打开设备,汉王手写板进入签字模式。 因为对设备是独占式的访问,所以在重新进行&quot;初始化设备&quot;动作之前,必须确保已经&quot;关闭设备&quot;。对应接口函数为HWInitialize()。<br /><br />(2) &quot;关闭设备&quot;:关闭设备,汉王手写板进入待机模式。对应接口函数为HWFinalize()。</span></p><p style="margin-left: 40px"><span class="style3">(3) &quot;重新签名&quot;: 清空手写控件界面及汉王手写板上的笔迹。对应接口函数为HWClearPenSign()。<br /><br />(4) &quot;笔宽加粗&quot;/&quot;笔宽减细&quot;:调整画笔的粗细,支持5级设置,默认为3级。对应接口函数为HWSetPenWidth()。<br /><br />(5) &quot;画笔颜色&quot;:设置画笔的颜色。默认为黑色。对应接口函数为HWSetPenColor()。<br><br>(6)&quot;压力笔&quot;/&quot;钢笔&quot;:&quot;压力笔&quot;模式下,笔迹会随着压感发生粗细变化。&quot;钢笔&quot;模式下,笔迹粗细不变。对应接口函数为HWSetPenMode()。</span></p><p style="margin-left: 40px"><span class="style3">(7)&quot;保存图像&quot;: 将图像保存至指定路径,对应接口函数为HWSaveFile()。调用此函数之前,请先调用HWSetFilePath()设置保存路径。支持图像格式为:bmp /jpg /png /gif。<br><br>(8)&quot;Base64Stream&quot;: 支持将图像转化为Base64数据流,以便于网络间的传输。</span></p><p style="margin-left: 40px"><span class="style3">各接口函数的参数和返回值详情,请查阅“汉王手写签批控件接口文档.doc”。</span></p><p style="margin-left: 40px"><br class="style1" />           		<b></p><table width="90%" border="0" align="center" cellpadding="3" cellspacing="0">           <tr class="style7"><td width="30%" vAlign="center" height="217" align="right"><P>签字区域:            </P></td>  <td  align="left"><!--object id="HWPenSign"name="HWPenSign"classid="clsid:E8F5278C-0C72-4561-8F7E-CCBC3E48C2E3"width="600"height="300"></object--><canvas id="pluginUI" width="600" height="300"><p class="error">Sorry, It looks as though your browser does not support the canvas tag.</p></canvas></td></tr>                       </table><p>&nbsp;
</p> <p>&nbsp;
</p><p style="margin-left: 500px">签名控制: <input id = "button1" type ="button" value="初始化设备" onclick ="return Button1_onclick()" />&nbsp;&nbsp;<input id = "button2" type ="button" value="关闭设备" onclick ="return Button2_onclick()" />&nbsp;&nbsp; <input id="Button3" type="button" value="重新签名" onclick="return Button3_onclick()" /><br><br> 画笔控制:<input id="Button6" type="button" value="黑色" onclick="return Button6_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button7" type="button" value="红色" onclick="return Button7_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button8" type="button" value="绿色" onclick="return Button8_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button9" type="button" value="蓝色" onclick="return Button9_onclick()" /><br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <input id="Button10" type="button" value="笔宽加粗" onclick="return Button10_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button11" type="button" value="笔宽减细" onclick="return Button11_onclick()" /> <br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <input id="Button12" type="button" value="压力笔" onclick="return Button12_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button13" type="button" value="钢笔" onclick="return Button13_onclick()" /><br><br>签名图像:&nbsp;&nbsp;<input id="Button14" type="button" value="Base64Stream" onclick="return Button14_onclick()" />&nbsp;&nbsp;&nbsp;<input id="Button15" type="button" value="保存图像" onclick="return Button15_onclick()" /> &nbsp;&nbsp;<br><br>      </p>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; char** readBinaryWatch(int turnedOn, int* returnSize) {char** ans malloc(sizeof(char*) * 12 * 60);*returnSize 0;for (int i 0; i < 1024; i) {int h i >> 6, m i & 63; // 用位运算取出高 4 位和低 6 位if (h &…

Laravel邮件发送:从配置到发邮件的指南!

Laravel邮件发送功能如何实现&#xff1f;怎么使用Laravel发信&#xff1f; Laravel作为一款流行的PHP框架&#xff0c;提供了强大且易用的邮件发送功能。AokSend将详细介绍如何从配置到实际发送邮件的全过程&#xff0c;帮助你快速掌握Laravel邮件发送的技巧。 Laravel邮件发…

对 JavaScript 原型的理解

笔者看了一些有关 JavaScript 原型的文章有感而发&#xff0c;就将所感所悟画了下来如果有理解错误和不足的地方&#xff0c;欢迎各位大佬指出&#xff0c;笔者感激不尽

2024华韵视听大会 “发现佛山”文旅影视产业调研活动-娅米的阳光城堡

9月13日上午&#xff0c;作为“2024华韵视听大会”系列活动之一&#xff0c;“发现佛山”文旅影视产业调研活动在佛山市高明区举行。来自“长风破浪”青年音乐人唱享计划及青年影视人扶持计划&#xff08;下简称“长风破浪”计划&#xff09;的青年唱作人左其铂、陈柏川和青年歌…

2024年超好用的公司加密软件分享|十款企业防泄密软件推荐

在数字化时代&#xff0c;企业数据的安全性变得尤为重要。随着网络攻击和数据泄露事件的频发&#xff0c;企业需要采取有效的措施来保护敏感信息。加密软件作为一种重要的数据保护工具&#xff0c;能够帮助企业防止数据泄露和未经授权的访问。本文将为您推荐十款2024年超好用的…

【梯度下降算法学习笔记】

梯度下降单参数求解 经过之前的学习我们来引入梯度下降的理念 α \alpha α为学习率 w 1 w 初 − α ∂ J ( w ) ∂ w w_1w_初-\alpha\frac{\partial J(w)}{\partial w} w1​w初​−α∂w∂J(w)​ w 2 w 1 − α ∂ J ( w 1 ) ∂ w 1 w_2w_1-\alpha\frac{\partial J(w_1)}…

【车载以太网】【SOME/IP】Wireshark 解析

目录 ​​​​​​​Wireshark 官方插件 相关代码: 启用协议插件 Lua插件 测试数据包 Wireshark 下载链接:Wireshark Go DeepSOMEIP插件介绍:https://www.wireshark.org/docs/dfref/s/someip.html官方插件 Wireshark从3.2版本开始支持SOME/IP,启用相应的插件即可以…

pikachu XXE(XML外部实体注入)通关

靶场&#xff1a;pikachu 环境: 系统&#xff1a;Windows10 服务器&#xff1a;PHPstudy2018 靶场&#xff1a;pikachu 关卡提示说&#xff1a;这是一个接收xml数据的api 常用的Payload 回显 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY …

.NET内网实战:通过命令行解密Web.config

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧。 02基本介绍 03编码实现 在.NET应用系统中&#xff0c;保护数据库连接字符串的安全性至关重要。.NET 提供了一种通过 DataProtectionC…

ACM digital library的高级检索

内容来自ACM Digital Library的高级检索 (tsinghua.edu.cn) 1.搜索源 默认的是ACM出版的全文数据库(检索免费&#xff0c;阅读付费需订阅&#xff0c;通过各学校校园网免费阅读全文&#xff09; The ACM Guide to Computing literature用于检索计算机学科文献&#xff0c;除…

B端管理系统要提升,观摩优秀作品是捷径之一。

观摩优秀的作品可以帮助B端管理系统的设计团队不断学习和进步&#xff0c;从而提升系统的设计水平和用户体验&#xff0c;为企业的发展和竞争力提供有力的支持。 这里分享一批国外的优秀B端系统界面&#xff0c;供大家欣赏。

【vue】vue3+ts对接科大讯飞大模型3.5智能AI

如今ai步及生活的方方面面,你是否也想在自己的网站接入ai呢&#xff1f;今天分享科大讯飞大模型3.5智能AI对接。 获取APPID、APISecret、APIKey 讯飞开放平台注册登录控制台创建自己的应用复制备用 准备工作做好,直接开始上代码了。 源码参考 <script setup lang"t…

软件自动定时启动器-添加可执行文件软件,设置启动的时间,也可以设置关闭的时间-供大家学习研究参考

点击添加软件&#xff0c;可以添加可执行文件软件&#xff0c;设置启动的时间&#xff0c;也可以设置关闭的时间 注意&#xff0c;时间为00&#xff1a;00&#xff1a;00 等于没设置&#xff0c;这个时间不在设置范围&#xff0c;其他任何时间都可以。 下载地址&#xff1a; h…

飞驰云联FTP替代方案:安全高效文件传输的新选择

FTP协议广泛应用各行业的文件传输场景中&#xff0c;由于FTP应用获取门槛低、使用普遍&#xff0c;因此大部分企业都习惯使用FTP进行文件传输。然而面临激增的数据量和网络安全威胁的不断演变&#xff0c;FTP在传输安全性与传输性能上有所欠缺&#xff0c;无法满足企业现在的高…

tomcat服务器

tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器。Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样&#xff0c;具有处理 HTML 页面的功能&#xff0c;然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx&#x…

【自动驾驶】控制算法(九)深度解析车辆纵向控制 | 从算法基础到 Carsim 仿真实践

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

计算机网络33——文件系统

1、chmod 2、chown 需要有root权限 3、link 链接 4、unlink 创建临时文件&#xff0c;用于非正常退出 5、vi vi可以打开文件夹 ../是向外一个文件夹 6、ls ls 可以加很多路径&#xff0c;路径可以是文件夹&#xff0c;也可以是文件 ---------------------------------…

python植物大战僵尸项目源码【免费】

植物大战僵尸是一款经典的塔防游戏&#xff0c;玩家通过种植各种植物来抵御僵尸的进攻。 源码下载地址&#xff1a; 植物大战僵尸项目源码 提取码: 8muq

Broadcast:Android中实现组件及进程间通信

目录 一&#xff0c;Broadcast和BroadcastReceiver 1&#xff0c;简介 2&#xff0c;广播使用 二&#xff0c;静态注册和动态注册 三&#xff0c;无序广播和有序广播 1&#xff0c;有序广播的使用 2&#xff0c;有序广播的截断 3&#xff0c;有序广播的信息传递 四&am…

基于Python flask的淘宝商品数据分析可视化系统,包括大屏和主题分析,还有回归预测

背景介绍 随着电子商务的迅猛发展&#xff0c;平台上积累了大量的用户行为和商品交易数据。这些数据蕴含着极大的商业价值&#xff0c;可以为市场趋势预测、商品优化以及用户行为分析提供重要的参考。淘宝作为全球最大的在线购物平台之一&#xff0c;拥有海量的商品和用户数据…