electron 鼠标事件

版本:"electron": "^22.3.27",实现一个在windows下图片点击右键,使用electron打开的功能。

一、注册表操作

注册表工具类

const cp = require("child_process");
const { app } = require('@electron/remote')
export default {
    regKey:'',//菜单一级目录名
    basePath:app.getPath('exe'),
    getSh(code){
        return '"'+this.basePath+' '+code+' %1"'
    },
    runShell(exec,callback) {
        cp.exec(exec, function(err,stdout,stderr){
            if(err){
                console.info(err);
                return
            }
            console.log(stdout)
            callback(stdout)
        });
    },
    //查询注册表
    queryRegGroup(callback) {
        //查询组是否存在
        let sh='reg Query HKEY_CLASSES_ROOT\\*\\shell /v '+this.regKey
        this.runShell(sh,callback)
    },
    //查询添加注册表一级菜单
    openReg(callback) {
        //查询组是否存在
        let sh='reg Query HKEY_CLASSES_ROOT\\*\\shell /v '+this.regKey
        let js=this
        cp.exec(sh, function(err,stdout,stderr){
            if(err){
                js.addRegGroup(callback)
                return
            }
            callback()
        });
    },
    //添加注册表1级
    addRegGroup(callback) {
        //查询组是否存在
        let sh='reg Add HKEY_CLASSES_ROOT\\*\\shell\\'+this.regKey+' /ve /t REG_DWORD /d 0 /f'
        let js=this
        this.runShell(sh,()=>{
            js.addGroupNasp(callback)
        })
    },
    //添加注册表子项(用于扩展二级菜单)
    addGroupNasp(callback){
        let sh='reg Add HKEY_CLASSES_ROOT\\*\\shell\\' + this.regKey +' /v SubCommands /t REG_DWORD /d 0 /f'
        this.runShell(sh,callback)
    },
    //添加二级菜单及索引
    addGroupAndItem(that,regValue,callback){
        let js=this
        let sh='reg Query HKEY_CLASSES_ROOT\\*\\shell\\'+this.regKey+' /v SubCommands -s'
        this.runShell(sh,(innValue)=>{
            if(innValue.includes(regValue.label)){
                callback()
                return
            }
            js.addNaspValue(that,regValue,callback,innValue)
        })
    },
    //添加二级索引
    addNaspValue(that,regValue,callback,innValue){
        let js=this
        let val=this.getNaspValue(that,regValue,innValue)
        let sh='reg Add HKEY_CLASSES_ROOT\\*\\shell\\'+this.regKey+ ' /v SubCommands /t REG_SZ /d "'+val +'" /f'
        this.runShell(sh,()=>{
            js.addItemData(regValue,callback)
        })
    },
    updateNaspValue(val,callback){
        let sh='reg Add HKEY_CLASSES_ROOT\\*\\shell\\'+this.regKey+ ' /v SubCommands /t REG_SZ /d "'+val +'" /f'
        this.runShell(sh,()=>{
            callback()
        })
    },
    getNaspValue(that,regValue,innValue){
        let res=''
        for(let i=0;i<that.options.length;i++){
            if(innValue.includes(that.options[i].label)){
                res+=that.options[i].label+';'
            }
        }
        if(res==''){
            res=regValue.label
        }else{
            res+=regValue.label
        }
        return res
    },
    //添加二级菜单
    addItemData(regValue,callback){
        let js=this
        this.delItemData(regValue.label,()=>{
            //二级菜单
            let sh='reg add HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CommandStore\\shell\\'+regValue.label+ '  /ve /t REG_DWORD /d 0 /f '
            js.runShell(sh,()=>{
                //事件脚本控制
                let sh='reg add HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CommandStore\\shell\\'+regValue.label+'\\command'+ '  /ve /t REG_SZ /d '+regValue.sh+' /f '
                js.runShell(sh,()=>{
                    callback()
                })
            })
        })
    },
    //先删除项
    async delItemData(code,callback){
        let sh='reg delete HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CommandStore\\shell\\'+code+ ' /f'
        await cp.exec(sh, function(err,stdout,stderr){
            callback()
        });
    },
    //删除右键菜单
    closeReg(that,callback){
        let js=this
        let sh='reg delete HKEY_CLASSES_ROOT\\*\\shell\\' + this.regKey + ' /f'
        cp.exec(sh, function(err,stdout,stderr){
            for(let i=0;i<that.options.length;i++){
                js.delItemData(that.options[i].label,()=>{})
            }
            callback(stdout)
        });
    }
}

注:%1是指当前文件的路径。

二、主进程操作

//使用:
    initArgs()
    windows[mainWindow.id]=mainWindow
    require('@electron/remote/main').initialize()
    require('@electron/remote/main').enable(mainWindow.webContents)


function initArgs(){
    if(process.env.NODE_ENV != 'development'){
        let progressArgv =process.argv
        if(progressArgv.length<2){
            return
        }
        if(!progressArgv[2]||progressArgv[2]==''){
            return;
        }
        let message=screenShotUtil.screenshotViewParams(progressArgv[1]+'?path='+progressArgv[2])
        screenShotUtil.openPage(message,windows)
    }
}

在主进程创建窗体时监听注册表的返回的值,包含自定义参数和文件路径。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮雪...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值