nw.js 打开一个exe项目,再次点击快捷方式启动已经存在的exe到最前端 open file with existing app

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_30907803/article/details/80446898

技术点:single-instance 和 gui.App.on('open',function({}))  open监听事件

想要像c++可以实现打开一个实例后,再次点击exe文件时,不再创建新的实例,而是把已经打开的实例启动到最前端,需要做以下操作:

1、package.json里面配置 “single-instance”:true

2、在项目的每个页面的js里面 添加open监听事件

var gui = require("nw.gui");
gui.App.on('open', function(cmdline) {
   window.alert('command line: ' + cmdline);//打开的信息
   window.alert(gui.App.argv);//打开传递过来的参数
});
```

3、通过url带参数唤醒客户端

如果客户端未启动,第一次url唤醒客户端时,可通过gui.App.argv数组获取url的信息,其实底层就是cmd命令。通过url protocoll和修改注册表实现的command命令,如下:

;把程序添加到注册表 可以通过链接打开客户端
  Var /GLOBAL protocol
  StrCpy $protocol "xxxfor"


  Var /GLOBAL app
  StrCpy $app "$INSTDIR\xxx\xxx.exe" 


  SetRegView 64
  WriteRegStr HKCR "$protocol" "" "URL:$protocol Protocol"
  WriteRegStr HKCR "$protocol" "URL Protocol" ""
  WriteRegStr HKCR "$protocol\shell\open\command" "" "$\"$app$\" $\"%1$\""
  
  SetRegView 32
  WriteRegStr HKCR "$protocol" "" "URL:$protocol Protocol"
  WriteRegStr HKCR "$protocol" "URL Protocol" ""

  WriteRegStr HKCR "$protocol\shell\open\command" "" "$\"$app$\" $\"%1$\""

nw.js项目里面的index.js入口文件 通过

//第一次url启动客户端
if (gui.App.argv.length != 0 && !global.historyUrl) {//url唤醒的客户端
    callAddToMeetSDK(gui.App.argv[0]);//获取参数
}
 
 
//第二次启动客户端
gui.App.on('open', function(cmdline) {
    console.log(cmdline);//url启动的所有参数
    gui.Window.get().show();//使得客户端显示在最前端
    if(cmdline.indexOf('xxxxx://join/?meetingId=') != -1){
       //url唤醒的sdk
        callAddToMeetSDK(cmdline);//传递参数 做相关操作
       .....
    }
});
注意:开始查资料以为single-instance从0.12版本以后已经启用,官网说明没看清楚,即使启用了,还是可以实现单实例的

启动,官网关于single-instance的版本使用介绍https://nwjs-cn.readthedocs.io/zh_CN/latest/Base/Migration/From%200.12%20to%200.13/index.html。


参考连接:https://blog.csdn.net/zeping891103/article/details/50773200



 
 



猜你喜欢

转载自blog.csdn.net/baidu_30907803/article/details/80446898