优秀的编程知识分享平台

网站首页 > 技术文章 正文

VueJS调用本地Delphi应用程序(vue调用其他js文件中的方法)

nanyue 2024-08-20 17:27:43 技术文章 5 ℃

VueJS调用本地Delphi应用程序本质上与 js 调用本地 exe 程序的原理是相同的。通用的做法是通过在 Windows 注册表中注册自定义URL Protocol 协议,然后通过浏览器执行打开对应的协议即可。

3.1创建 Delphi 窗体应用程序

Delphi 窗体应用程序接受 1 个来自网络调用的参数,并将参数值显示在界面上。

第一步,先创建窗体应用程序,在窗体应用程序中放置一个 Label,其 Caption 属性值为“Web传入的参数”,一个 Edit 控件,其 name 属性值为 Edit1;

第二步,编写窗体的 OnCreate 事件,代码如下:

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 检查命令行参数是否为1,不为1则终止程序的执行
  if Application.ParamCount <> 1 then
  begin
    ShowMessage('参数错误, 格式:democalledbyvue <参数1>');
    Application.Terminate;
  end;
  // 将命令行参数值显示在窗体的 Edit1 控件中
  Edit1.Text:=TIdURI.URLDecode(Application.Params[1]);
end;

URL解码采用了 indy 包中的 TIdURI 类的 URLDecode 方法。

3.2编写自定义URL Protocol 协议

自定义URL Protocol 协议模板:

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\<协议名称>]
@="URL:<协议名称> Protocol Handler"
"URL Protocol"= ""
 
[HKEY_CLASSES_ROOT\<协议名称>\DefaultIcon]
@="<可执行程序>"
 
[HKEY_CLASSES_ROOT\<协议名称>\shell]
@= ""
 
[HKEY_CLASSES_ROOT\<协议名称>\shell\open]
@= ""
 
[HKEY_CLASSES_ROOT\<协议名称>\shell\open\command]
@="\"<可执行程序>\" \"%1\""

将模板文件中的 <协议名称> 和 <可执行程序> 替换为实际名称即可。注:<可执行程序> 为可执行程序文件的全路径名称,其中的路径分隔符 “\” 必须转义,写作 “\\”。

将模板文件保存为 .reg ,双击运行。

示例:

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\democalledbyvue]
@="URL:democalledbyvue Protocol Handler"
"URL Protocol"= ""
 
[HKEY_CLASSES_ROOT\democalledbyvue\DefaultIcon]
@="E:\\workspace_of_codetyphon\\democalledbyvue\\democalledbyvue.exe"
 
[HKEY_CLASSES_ROOT\democalledbyvue\shell]
@= ""
 
[HKEY_CLASSES_ROOT\democalledbyvue\shell\open]
@= ""
 
[HKEY_CLASSES_ROOT\democalledbyvue\shell\open\command]
@="\"E:\\workspace_of_codetyphon\\democalledbyvue\\democalledbyvue.exe\" \"%1\""

3.3编写 VueJS 页面

在 Vue 创建的项目中的页面上添加一个链接、一个文本框、一个按钮控件,实现点击链接后调用 3.1 中创建的应用程序并传递固定的参数,在文本框中输入文本,单击按钮调用 3.1 中创建的应用程序并传递文本框中输入的内容,代码如下:

<template>
  <div style="padding: 24px;">
    <a href="democalledbyvue://这是从Web传递的参数/11570d2c987ef23a609e" >调用本地exe</a>
    <div style="padding: 12px;">
      <InputText type="text" v-model="param" />
    </div>
    <Button label="调用本地exe" @click="call_local_exe"/>
  </div>
</template>

<script>
import {ref} from "vue"
import Button from 'primevue/button'
import InputText from 'primevue/inputtext'

export default {
  name: "IndexPage",
  components: {
    Button,
    InputText,
  },
  setup () {
    const param = ref('')

    function call_local_exe () {
      window.open('democalledbyvue://' + param.value)
    }

    return {
      param, call_local_exe
    }
  }
}
</script>

<style scoped>

</style>

在 js 中关键就是通过自定义协议 democalledbyvue:// 来调用。

3.4 运行效果

Web 页面:

本地应用程序:

从执行结果我们可以看出,每次调用都会打开以一个本地应用程序的实例。

最近发表
标签列表