当前位置: 首页 > news >正文

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.regKeythis.runShell(sh,callback)},//查询添加注册表一级菜单openReg(callback) {//查询组是否存在let sh='reg Query HKEY_CLASSES_ROOT\\*\\shell /v '+this.regKeylet js=thiscp.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=thisthis.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=thislet 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=thislet 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=thisthis.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=thislet 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]=mainWindowrequire('@electron/remote/main').initialize()require('@electron/remote/main').enable(mainWindow.webContents)function initArgs(){if(process.env.NODE_ENV != 'development'){let progressArgv =process.argvif(progressArgv.length<2){return}if(!progressArgv[2]||progressArgv[2]==''){return;}let message=screenShotUtil.screenshotViewParams(progressArgv[1]+'?path='+progressArgv[2])screenShotUtil.openPage(message,windows)}
}

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

http://www.lryc.cn/news/415882.html

相关文章:

  • 网络安全第一次作业(ubuntuan安装nginx以及php部署 and sql注入(less01-08)))
  • 【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】017 - init_sequence_f 各函数源码分析(一)
  • Mojo AI编程语言(十七)跨平台开发:应用广泛适配
  • Python面试题:结合Python技术,如何使用Astropy进行天文数据处理
  • Jpa-多表关联-OneToOne
  • zdpy+vue3+onlyoffice文档系统实战上课笔记 20240805
  • 【Linux 从基础到进阶】Linux 内核参数调优
  • 【Java数据结构】---泛型
  • Java Lambda表达式总结(快速上手图解)
  • 【算法模板】图论:Tarjan算法求割边割点
  • 如何在IDEA上使用JDBC编程【保姆级教程】
  • linux web系统安装常见问题解决,租房系统为案例
  • Linux驱动开发—平台总线模型详解
  • 说一下网络层,传输层,数据链路层做什么的,之间的关系?
  • 解锁AI新纪元:Milvus Cloud与Zilliz Cloud的高可用之道
  • svn安装
  • 【隐私计算篇】混淆电路之深入浅出
  • 基于GRU神经网络的微博分类预测
  • LVS-DR模式集群:案例与概念
  • 拓扑排序:Kahn算法与DFS算法
  • 图像处理 -- Sobel滤波器的实现原理与使用案例
  • 机器学习 第10章-降维与度量学习
  • linux驱动:(7)物理地址到虚拟地址映射
  • 浏览器用户文件夹详解 - Preferences(十)
  • Robot Operating System——电池电量通知
  • 二进制安装docker
  • @SpringBootConfiguration重复加载报错
  • 【SpringBoot】数据验证之分组校验
  • MySQL Galera Cluster 部署与介绍
  • RuoYi-Vue-Plus (XXL-JOB任务调度中心二:配置管理与定时任务编写、执行策略、命令行任务、邮件报警等等