Electron学习笔记(六)

文章目录

      • 相关笔记
      • 笔记说明
    • 七、系统
      • 5、托盘图标
        • (1)、设置托盘图标
        • (2)、托盘图标闪烁
        • (3)、托盘图标菜单
      • 6、剪切板
        • (1)、写入剪切板
        • (2)、读取剪切板
      • 7、系统通知
      • 8、其他
        • (1)、使用系统默认应用打开文件
        • (2)、接收拖拽到窗口中的文件
        • (3)、使用系统字体

相关笔记

  • Electron学习笔记(一)
  • Electron学习笔记(二)
  • Electron学习笔记(三)
  • Electron学习笔记(四)
  • Electron学习笔记(五)
  • Electron学习笔记(六)
  • 使用 electron-vite-vue 构建 electron + vue3 项目并打包

笔记说明

文本为学习《Electron 实战 入门、进阶与性能优化 刘晓伦 著》时所记录的笔记 主要将书本上的案例运行一遍,针对原理部分并无相关记录。笔记记录于 2023年9月。

七、系统

5、托盘图标

(1)、设置托盘图标

更新 index.js 文件内容如下:

const {app,BrowserWindow,Tray} = require('electron');
let path = require('path');
let tray;
let win = null;app.on('ready', function() {win = new BrowserWindow({// ...});// 获取 图标路径let iconPath = path.join(__dirname, 'icon.ico');tray = new Tray(iconPath);// ...
});
(2)、托盘图标闪烁

更新 index.js 文件内容如下:

const {app,BrowserWindow,Tray} = require('electron');
let path = require('path');
let tray;let win = null;
let iconPath = path.join(__dirname, 'icon.ico');
let iconPath2 = path.join(__dirname, 'icon2.ico');
let flag = true;app.on('ready', function() {win = new BrowserWindow({// ...});tray = new Tray(iconPath);// ...
});setInterval(() => {if (flag) {tray.setImage(iconPath2);flag = false;} else {tray.setImage(iconPath);flag = true;}
}, 600)

效果展示:

效果展示

(3)、托盘图标菜单

更新 index.js 文件内容如下:

const { app, BrowserWindow, Tray, Menu } = require('electron');
let path = require('path');
let tray;let win = null;
app.on('ready', function () {win = new BrowserWindow({// ...});let iconPath = path.join(__dirname, 'icon.ico');tray = new Tray(iconPath);// 响应鼠标点击事件tray.on('click', function () {win.show();});// 鼠标右键菜单let menu = Menu.buildFromTemplate([{click() { win.show(); },label: '显示窗口',type: 'normal'}, {click() { app.quit(); },label: '退出应用',type: 'normal'}]);tray.setContextMenu(menu);// ...
});

效果展示:

效果展示


6、剪切板

(1)、写入剪切板

clipboard:该模块渲染进程和主进程都可以直接使用。

文本内容写入:更新 index.html 文件内容如下:

<input type="text" name="" id=""><script>let { clipboard } = require("electron");// 向剪切板写入文本clipboard.writeText("你好Text");  // 向剪切板写入HTML        // clipboard.writeHTML("<h1>你好HTML</h1>");        
</script>

图片内容写入:程序运行后可在word文档或聊天框中粘贴

<body><script>let path = require("path");let { clipboard, nativeImage } = require("electron");let imgPath = path.join(__dirname, "1.jpg");let img = nativeImage.createFromPath(imgPath);clipboard.writeImage(img);</script>
</body>

清空剪切板:

clipboard.clear();

(2)、读取剪切板

读取剪切板内的文本内容:更新 index.html 文件内容如下:

<body><input type="text" name="" id=""><script>let { clipboard } = require("electron");console.log(clipboard.readText());        // 读取剪切板的文本// clipboard.readHTML();        // 读取剪切板的HTML</script>
</body>

读取剪切板内的图片内容

<body><script>let { clipboard } = require("electron");// 获取在系统文件夹里复制的图片文件路径let filePath = clipboard.readBuffer('FileNameW').toString('ucs2')filePath = filePath.replace(RegExp(String.fromCharCode(0), 'g'), '');// 创建一个 img 元素写入页面let imgDom = document.createElement('img')imgDom.src = filePath;document.body.appendChild(imgDom);</script>
</body>

7、系统通知

更新 index.html 文件内容如下:

<body><script>Notification.requestPermission(function (status) {if (status === "granted") {let notification = new Notification('来自Electron程序的消息', {body: '测试系统消息发送'});notification.onclick = function () {alert('用户点击了系统消息');}} else {// 用户拒绝授权}});</script>
</body>

效果展示:

效果展示


8、其他

(1)、使用系统默认应用打开文件

shell:该模块可以被 Electron 中主进程和渲染进程直接使用。

使用 shell 模块打开默认浏览器:

<body><script>const { shell } = require("electron");shell.openExternal('https://www.baidu.com');</script>
</body>

使用 shell 模块打开 word 文档:

<body><script>const { shell } = require("electron");let openFlag = shell.openPath("D:\\桌面\\test.docx");console.log(openFlag);</script>
</body>

使用 shell 模块将文件移入垃圾箱:(说明:经测试,该代码在主进程中有效,但在渲染进程中会报错)

index.js 文件中添加以下内容:

const { shell } = require("electron");
let delFlag = shell.trashItem("D:\\桌面\\test.docx");console.log(delFlag);

关于 shell 模块更多详情参见:https://www.electronjs.org/zh/docs/latest/api/shell


(2)、接收拖拽到窗口中的文件

修改 index.html 文件内容如下:

<body><script>document.addEventListener('dragover', ev => {ev.preventDefault();console.log('请在此处放置文件');});document.addEventListener('drop', ev => {console.log(ev.dataTransfer.files);ev.preventDefault();});</script>
</body>

效果展示:

效果展示


(3)、使用系统字体
<div style="font:caption">这是我的标题</div>
<div style="font:menu">菜单中的字体</div>
<div style="font:message-box">对话框中的字体</div>
<div style="font:status-bar">状态栏中的字体</div>

效果展示:

效果展示


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/692063.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量文本高效编辑神器:轻松拆分每行内容,一键保存更高效!轻松实现批量拆分与保存

文本处理成为我们日常工作中的一项重要任务。然而&#xff0c;面对大量的文本内容&#xff0c;传统的逐行编辑方式往往显得繁琐且效率低下。那么&#xff0c;有没有一种更高效、更便捷的解决方案呢&#xff1f;答案是肯定的——批量文本高效编辑神器&#xff0c;让您的文本处理…

商场学习之微服务

前言 寒假前在新电脑上配置了java环境&#xff0c;maven仓库&#xff0c;node,js&#xff0c;navicat&#xff0c;MySQL&#xff0c;linux&#xff0c;vmware等环境&#xff0c;创建了6个mysql数据库&#xff0c;77张表。 如此多的表&#xff0c;字段&#xff0c;去手写基础…

vue3vue3vue3vue3vue3vue3vue3vue3vue3vue3vue3vue3

纯vue3的语法 一.创建&#xff08;基于vite&#xff09; 1.在指定目录下运行 npm create vuelatest 项目名称&#xff1a;英文小写下划线数字回车表示确定是、否 左右切换路由、pina、单元测试、端到端的测试、开启eslint控制代码质量 先选择no&#xff0c;学的时候自己手动…

数列排序C++

题目&#xff1a; 思路&#xff1a; 创建一个数组a&#xff0c;循环遍历输入&#xff0c;然后使用函数sort进行上升排序&#xff0c;最后循环遍历输出a[i]. #include <bits/stdc.h> using namespace std; int main(){int a[201];int n;cin>>n;//输入for(int i0;i&l…

[数据结构]动画详解单链表

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到动画详解数据结构系列 用通俗易懂的动画的动画使数据结构可视化 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低…

性能远超GPT-4!谷歌发布Med-Gemini医疗模型;李飞飞首次创业瞄准空间智能;疫苗巨头联合OpenAl助力AI医疗...

AI for Science 企业动态速览—— * 谷歌 Med-Gemini 医疗 AI 模型性能远超 GPT-4 * 斯坦福李飞飞首次创业瞄准「空间智能」 * 疫苗巨头 Moderna 与 OpenAl 达成合作 * 美国能源部推动 AI 在清洁能源领域的应用 * 美年健康荣获「2024福布斯中国人工智能创新场景应用企业TOP10」…

【计算机毕业设计】基于微信小程序的校园综合服务

随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园综合服务被用户普遍使用&#xff0c;为方便用户能够可以随时…

(java)websocket服务的两种实现方式

1.基于java注解实现websocket服务器端 1.1需要的类 1.1.1服务终端类 用java注解来监听连接ServerEndpoint、连接成功OnOpen、连接失败OnClose、收到消息等状态OnMessage 1.1.2配置类 把spring中的ServerEndpointExporter对象注入进来 2.1代码示例 2.1.1 maven配置 <…

易图讯科技三维电子沙盘系统

深圳易图讯科技有限公司&#xff08;www.3dgis.top&#xff09;创立于2013年&#xff0c;专注二三维地理信息、三维电子沙盘、电子地图、虚拟现实、大数据、物联网和人工智能技术研发&#xff0c;获得20多项软件著作权和软件检测报告&#xff0c;成功交付并实施了1000多个项目&…

本地电脑hosts强制解析指定IP的方法

网站接入CDN后&#xff0c;很多时候需要本地强制解析回源查看状态&#xff0c;比如查看是不是源服务器故障&#xff0c;网站修改是否正确&#xff0c;网站更新是否及时&#xff0c;故障查看是CDN问题还是源服务器问题&#xff0c;都需要hosts回源。 今天云加速教大家如何本地电…

Python悬置动刚度模拟及复数绘制

Python悬置动刚度模拟及复数绘制 1、复数绘制极坐标图2、动刚度的计算公式3、悬置动刚度的影响因素4、 AVL Excite 悬置动刚度的模拟 1、复数绘制极坐标图 # _*_ coding:UTF-8 _*_import matplotlib.pyplot as plt import numpy as np# 定义复数数组 complexNums [1.5 1.2j,…

SM4-GCM Library代码示例

sm4-gcm加密解密测试代码: fn main() {let key Sm4Key([0u8; 16]);let nonce [0u8; 12];let plaintext b"Hello World!";let ciphertext sm4_gcm::sm4_gcm_encrypt(&key, &nonce, plaintext);println!("Encrypted: {}", hex::encode(&cip…