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.mzph.cn/news/836605.shtml

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

相关文章

具身智能论文(二)

目录 1. Code as Policies: Language Model Programs for Embodied Control2. Embodied Agents for Efficient Exploration and Smart Scene Description3. Embodied Agents for Efficient Exploration and Smart Scene Description4. Learning to explore informative traject…

Stateflow基础知识笔记

01--Simulink/Stateflow概述 Stateflow是集成于Simulink中的图形化设计与开发工具&#xff0c;主要 用于针对控制系统中的复杂控制逻辑进行建模与仿真&#xff0c;或者说&#xff0c; Stateflow适用于针对事件响应系统进行建模与仿真。 Stateflow必须与Simulink联合使用&#…

第七届世界通信工程研讨会(WSCE 2024)即将召开!

第七届世界通信工程研讨会&#xff08;WSCE 2024&#xff09;将于2024年9月27-29日在日本东京举行。WSCE 的成立旨在应对通信工程领域所面临的挑战和机遇&#xff0c;尽管该领域已趋于饱和&#xff0c;但其仍保持着强劲的发展势头。本次研讨会旨在加速通信创新并加强该领域专家…

编程技巧:什么是JavaScript递归

什么是递归 程序调用自身的编程技巧称为递归&#xff08;recursion&#xff09; 递归的基本思想是将一个复杂的问题分解成更小、更易于管理的子问题&#xff0c;这些子问题与原始问题相似&#xff0c;但规模更小。 递归的要素 基本情况&#xff08;Base Case&#xff09;&…

Python 编程语言中的 None 到底是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 让我们一起深入了解 Python 中的 None。 什么是 None&#xff1f; 在 Python 编程语言中&#xff0c;None 是一个特殊的常量&#xff0c;它代表了 “无” 或 “没有值”。你可以把它想象成一个空盒子…

Debian常用命令:高效管理与运维的必备指南

在Linux世界中&#xff0c;Debian以其稳定性、安全性和开源精神赢得了广大用户的青睐。作为一个基于Linux的操作系统&#xff0c;Debian拥有丰富且强大的命令行工具&#xff0c;这些命令对于系统管理员和开发者来说至关重要。本文将为您介绍一系列Debian系统中的常用命令&#…

python 自定义包的实现

1. 代码目录 创建自定义包的时候&#xff0c;原理是当 python 检测到一个目录下存在 __init__.py 文件时&#xff0c;python 就会把它当成一个模块(module)。 下面这个例子是网上整理的代码&#xff0c;但是有些小改动&#xff0c;可以直接拿来就用。 看代码结构&#xff1a;…

flink尚硅谷

flink 1 flink基础使用1.1 角色1.2 部署模式&#xff08;抽象&#xff09;1.2.1 会话模式1.2.2 单作业模式1.2.3 应用模式 1.3 运行模式&#xff08;实际 谁来管理资源&#xff09;1.3.1 Stand alone1.3.2 YARN运行模式&#xff08;重点&#xff09; 2. 运行时架构2.1 系统架构…

【Java EE】网络原理——TCP1

目录 1.TCP协议格式 2.TCP协议的特点 3.TCP协议的核心机制&#xff08;十个&#xff09; 3.1确认应答机制 3.2超时重传 3.3连接管理 3.3.1三次握手基本流程&#xff1a; 3.3.2三次握手的意义或者解决的问题&#xff1a;&#xff08;面试题&#xff09; 3.3.3三次握手时…

什么是无人直播?无人直播软件带你探索全新的赚钱模式!

在当今数字化时代&#xff0c;AI技术的迅猛发展正引领着各行各业的深刻变革。其中&#xff0c;AI实景自动无人直播软件以其独特的优势&#xff0c;正成为商家们提升品牌形象、扩大市场影响力的重要工具。本文将详细介绍这款软件的功能特点及其在商业领域的应用价值。全网最新智…

RabbitMQ中间件安装

消息队列 RabbitMQ yum -y update yum -y install epel-release erlang # 安装erlang erl -version # 判断是否安装成功根据官网的的表格判断自己用哪个版本的 RabbitMQ&#xff1a;https://www.rabbitmq.com/docs/which-erlang#r16b03 [rootiZuf6hqrs5cb2ccyuc9nqvZ ~]# er…

【C++历练之路】unordered_map与unordered_set的封装实现

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们已经认识并实现了哈希底层的逻辑&#xff0c;创建出了其开散列。现在我们要进行封装&#xff0c;类比STL中的unordered_set 与 unordered_map。 目录 1. 模拟实现 1.1 哈希表的改造 1.2 unorde…

uabntu pcl spdlog安装位置和版本查看那

查看pcl默认安装版本 pkg-config --modversion pcl_io 查看pcl路径 pkg-config --libs pcl_io

企业计算机服务器中了rmallox勒索病毒怎么破解,rmallox勒索病毒解密工具步骤

科技技术的发展&#xff0c;为企业的生产运营注入了新的活力&#xff0c;越来越多的企业利用网络走向了数字化办公模式&#xff0c;网络也极大地方便了企业的生产运营&#xff0c;大大提高了企业的生产效率&#xff0c;加快了企业发展的步伐。但是网络数据安全问题一直是企业关…

Swift 集合类型

集合类型 一、集合的可变性二、数组&#xff08;Arrays&#xff09;1、数组的简单语法2、创建一个空数组3、创建一个带有默认值的数组4、通过两个数组相加创建一个数组5、用数组字面量构造数组6、访问和修改数组7、数组的遍历 三、集合&#xff08;Sets&#xff09;1、集合类型…

某攻防演练心得之随笔记

最近太忙了&#xff0c;忙于各种奇奇怪怪的事情&#xff0c;有攻防&#xff0c;有应急&#xff0c;有渗透&#xff0c;还成为了一段时间内的“word高级工程师”......有师傅说我现在更新的越来越慢了&#xff0c;是呀&#xff0c;其实我也不知道怎么了&#xff0c;每天各种新闻…

科林Linux_4 信号

#include <signal.h> 信号signal&#xff1a;Linux或Unix系统支持的经典的消息机制&#xff0c;用于处置进程&#xff0c;挂起进程或杀死进程 kill -l #查看系统支持的信号 1~31 Unix经典信号&#xff08;软件开发工程师&#xff09; 32、33信号被系统隐藏&#xf…

加入全球少儿编程运动:Scratch让每个孩子都能成为创造者(Scratch最新版客户端和初/中/高级学习资料整理分享)

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f3e1; 演示环境 &#x1f3e1;&#x1f4d2; 文章内容 &#x1f4d2;&#x1f4dd; 安装与使用&#x1f4dd; 社区与资源 &#x1f388; 获取方式 &#x1f388;⚓️ 相关链接 ⚓️ &#x1f4d6; 介绍 &#x1f4d6; 你知道…

【Linux】- Linux环境变量[8]

目录 环境变量 $符号 自行设置环境变量 环境变量 环境变量是操作系统&#xff08;Windows、Linux、Mac&#xff09;在运行的时候&#xff0c;记录的一些关键性信息&#xff0c;用以辅助系统运行。在Linux系统中执行&#xff1a;env命令即可查看当前系统中记录的环境变量。 …

升级你的网络实验场:体验华为最新ENSP_PRO模拟器,现已对普通用户开放!

随着网络技术的不断发展&#xff0c;网络实验场的重要性越来越凸显。在这个数字化时代&#xff0c;网络工程师和学习者需要一个高效、全面的模拟器来进行网络实验和测试。最新消息称&#xff0c;华为已将其最新的ENSP_PRO模拟器对普通用户开放&#xff0c;为广大网络爱好者和专…