思路:c#编写打开钱箱功能,封装成桌面程序;js调用桌面程序,打开钱箱
最近项目需要,需要在web端打开钱箱。开始打算用c#编写一个ActiveX控件,然后用js调用,思路是正确的,可是我之前没编过 ActiveX控件,按照网上的教程写了一个,但是只能在自己的电脑上运行成功,其他的电脑上却没办法运行,这个控件总是被禁止加载安装。各种允许 ActiveX的方法都试过了,就是不行,后来查得大概是因为没有证书,所以没办法加载,但是弄证书感觉又好麻烦,于是就改变了思路:做成桌面程序,然后用js调用。
实践证明做成桌面并用js调用的思路是可行的,但是会弹出程序主界面,因为打开钱箱实际上就是一个后台操作,只要把钱箱打开就行,不需要在屏幕上显示任何窗口。解决这个问题比较简单,创建项目之后删除Form1.cs文件,然后修改Program.cs文件,把打开钱箱的代码写进去,然后main方法直接调用钱箱方法就可以了。
接下来上核心代码:
Program.cs文件代码:
using Microsoft.Win32.SafeHandles;
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace OpenMoneyBox
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
OpenMoneyBox();//main方法直接调用钱箱方法
Environment.Exit(0);//执行完毕后自动退出
}
//下面是打开钱箱的代码,网上找的,直接复制粘贴
[DllImport(“kernel32.dll”, CharSet = CharSet.Auto)]
private static extern IntPtr CreateFile(string lpFileName,
int dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile);
#region 开钱箱
/// <summary>
/// 开钱箱
/// </summary>
public static void OpenMoneyBox()
{
try
{
IntPtr iHandle = CreateFile(“LPT1”, 0x40000000, 0, 0, 3, 0, 0);
if (iHandle.ToInt32() == -1)
{
MessageBox.Show(“没有连接打印机或者打印机端口未打开!”, “错误”, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
SafeFileHandle handle = new SafeFileHandle(iHandle, true);
FileStream fs = new FileStream(handle, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
sw.Write(((char)27).ToString() + “p” + ((char)0).ToString() + ((char)60).ToString() + ((char)255).ToString());
sw.Close();
fs.Close();
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
#endregion
}
}
重新生成文件之后,找到对应的exe文件,我给命名成 OpenMoneyBox.exe,然后放在F盘下。文件位置随便放,只是简捷一些便于js调用。
下面是html代码:
<html>
<head>
<title>RTX</title>
<script>
function Run() {
var objShell = new ActiveXObject(“wscript.shell”);
objShell.Run(” file:///F:/ OpenMoneyBox .exe “);//exe文件路径
objShell = null;
}
</script>
</head>
<body>
<center><a href=# onClick=”javascript:Run()”>打开钱箱</a></center>
</body>
大功告成。
后来也想过把这段代码做成windows服务,尝试了一下,各种报错,要么服务不能启动,要么启动之后不成功的。可能是我不会弄吧,不能简单的照葫芦画瓢。虽然都是.net,也是隔行如隔山,举一反三乍一看很容易,深入学习才能发现其中的大不同。
未经允许不得转载:前端撸码笔记 » web端通过js调用桌面程序打开钱箱的代码(js跟c#结合)