不是一个真正的答案,虽然评论太长了..
听起来你想从浏览器调用本机代码。这不会取悦很多人,尽管我知道实现这一目标的方法正是一种。它涉及 Internet Explorer 和一个 COM 服务器 (activeX)。 IE 可以创建您需要编写的 activeX 程序的实例。
然后这个 activeX 可以向供应商提供的 DLL 发出命令。但是,问题在于,如果我坐在其中一个终端机上并且有键盘,我也可以打开抽屉。您还需要一种将打开抽屉的意图从服务器传递到客户端的方法。我想您可以使用 WebSockets 来维护客户端和服务器之间的通信通道,您可以通过该通道发出打开抽屉的意图。
这在锁定的情况下可能没问题,尽管我在这里没有考虑也没有提到各种安全问题。
回顾一下,这是一个可能的解决方案:
- 在客户端和服务器之间建立 WebSocket 连接。
- 通过此通道从服务器向客户端浏览器发出命令。
- 在浏览器中捕捉这个命令,然后创建一个 ActiveX 对象。
- 使用 javascript,告诉这个 activeX 对象打开抽屉。
- 在 ActiveX 对象中,通过调用供应商提供的 DLL 中的适当函数来响应打开抽屉的请求。
我对亲自实施这一点感到有点不安(并希望得到丰厚的补偿)。
顺便说一句,您可以通过这种方式控制 MS Office 等其他示例 - 允许您从浏览器中创建电子表格/word 文档/等,使用用户输入的信息填充新文档。
这是我 18 个月前为一个项目编写的一个 JS 文件,用于控制 Excel。
//
// jsExcelObj.js
// 28/08/2012
// the (only Excel) app instance - we only want to have 1
// **** don't access this variable directly ****
var jsExcelApp = null;
/*****************************************************************************
Excel class
*****************************************************************************/
function startExcel()
{
jsExcelApp = new ActiveXObject("Excel.Application");
}
function stopExcel()
{
jsExcelApp.Quit();
delete(jsExcelApp);
jsExcelApp = null;
}
function jsExcelWorkbook(filename)
{
if (jsExcelApp == null)
startExcel(); //jsExcelApp = new ActiveXObject("Excel.Application");
this.mFilename = filename;
this.mExcelSheet = null;
this.mWorkbook = jsExcelApp.Workbooks.Open(filename);
this.close = function()
{
this.mWorkbook.Close(false);
this.mFilename = null;
this.mExcelSheet = null;
this.mWorkbook = null;
}
this.open = function(filename)
{
if (jsExcelApp == null)
startExcel();
if (this.mFilename != null)
this.close();
this.mFilename = filename;
this.mExcelSheet = null;
this.mWorkbook = jsExcelApp.Workbooks.Open(filename);
}
this.setSheet = function(sheetName)
{
this.mExcelSheet = this.mWorkbook.Worksheets(sheetName);
}
this.getCellValue = function(column, row)
{
return this.mExcelSheet.Cells(row, column).value;
}
// returns the cells background colour as a html hex color value - e.g "7a554a"
this.getCellColor = function(column, row)
{
var hexStrVel, r, g, b, decNum;
decNum = this.mExcelSheet.Cells(row, column).Interior.Color;
// get a hexidecimal string representation of the number
hexStrVal = decNum.toString(16);
// pad to 6 bytes long
while (hexStrVal.length < 6)
{
hexStrVal = "0" + hexStrVal;
}
// extract the 3 components
r = hexStrVal.substr(4,2);
g = hexStrVal.substr(2,2);
b = hexStrVal.substr(0,2);
return r+g+b; // return them in reverse order
}
}
使用它很简单:
<script src='script/jsExcelObj.js'></script>
<script>
var fullyQualifiedPathToExcelWorkbook = "C:/someFile.xls";
var mExcel = new jsExcelWorkbook(fullyQualifiedPathToExcelWorkbook);
mExcel.setSheet("Sheet1");
var col1Row1 = mExcel.getCellValue(1, 1);
alert(col1Row1);
mExcel.close();
stopExcel();
</script>
对于这个问题你还会得到什么其他答案,我非常好奇。从我能想到的各个角度来看,这听起来像是穿越雷区的长征..
我会非常认真地考虑使用 C++ 实现我自己的服务器/客户端架构,而忘记使用 HTML/PHP。这可能是因为我知道的太少,也可能是因为我知道的足够多,看到了危险——我不知道!