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

在Electron应用中控制剪贴板操-复制粘贴

背景

最近给别人做的一个考试防作弊系统,要禁止考生使用复制粘贴,我们使用的Electron做了一个考试客户端,在 Electron 应用中控制复制/粘贴剪贴板操作,通过 electron.clipboard API 来实现。同时,可以通过监听键盘事件(如 Ctrl+C/Ctrl+V)来自定义复制粘贴行为。


实现方法

1. 基本剪贴板控制(读写剪贴板)

Electron 提供了 clipboard 模块,可以访问系统剪贴板:

const { clipboard } = require("electron");// 写入文本到剪贴板
clipboard.writeText("Hello, Electron!");// 读取剪贴板内容
const clipboardText = clipboard.readText();
console.log("剪贴板内容:", clipboardText);
其他剪贴板操作(HTML、图像等):
// 写入 HTML 到剪贴板
clipboard.writeHTML("<b>Bold text</b>");
const htmlContent = clipboard.readHTML();// 写入图片(Buffer)
clipboard.writeImage(nativeImage.createFromPath("image.png"));

2. 监听并自定义复制/粘贴按键

你可以在 webContentswindow 中监听 keydown 事件,拦截 Ctrl+C (复制) 或 Ctrl+V (粘贴):

方法 1:在主进程中使用 webContents(适用于 BrowserWindow)
const { app, BrowserWindow } = require("electron");app.whenReady().then(() => {const win = new BrowserWindow();// 监听键盘事件win.webContents.on("before-input-event", (event, input) => {if (input.control && input.key.toLowerCase() === "c") {console.log("Ctrl+C 被按下!");// 自定义行为:比如先获取选中文本,再写入剪贴板// event.preventDefault(); // 阻止默认行为}if (input.control && input.key.toLowerCase() === "v") {console.log("Ctrl+V 被按下!");// 自定义逻辑:比如只允许粘贴纯文本event.preventDefault();const clipboardText = clipboard.readText();win.webContents.insertText(clipboardText);}});
});
方法 2:在渲染进程(前端)监听

在 HTML 页面里直接用 JavaScript 监听键盘事件:

<script>
document.addEventListener("keydown", (e) => {if (e.ctrlKey && e.key === "c") {console.log("Ctrl+C 按下!");// 自定义复制逻辑e.preventDefault(); // 阻止默认行为navigator.clipboard.writeText("自定义复制内容").then(() => {console.log("已复制自定义内容!");});}if (e.ctrlKey && e.key === "v") {console.log("Ctrl+V 按下!");e.preventDefault(); // 阻止默认行为navigator.clipboard.readText().then((text) => {document.execCommand("insertText", false, text); // 插入文本});}
});
</script>

3. 禁用默认复制/粘贴

如果你想完全禁止用户使用复制或粘贴,可以在 webPreferences 里禁用:

const win = new BrowserWindow({webPreferences: {// 禁用粘贴板访问contextIsolation: true,enableRemoteModule: false,},
});

或者在 renderer.js 里:

document.addEventListener("copy", (e) => {e.preventDefault();  // 禁止复制
});
document.addEventListener("paste", (e) => {e.preventDefault();  // 禁止粘贴
});

4. 典型应用场景

安全控制:限制某些内容的复制(如付费内容)。
增强体验:自动转换复制的格式(如 Markdown → 富文本)。
剪贴板审计:记录用户复制/粘贴行为(企业合规需求)。


如果想让用户右键菜单也能自定义复制粘贴,可以结合 contextMenu API:

const { Menu, MenuItem } = require("electron");
const menu = new Menu();
menu.append(new MenuItem({label: "复制(自定义)",click: () => {clipboard.writeText("这是自定义复制内容");}
}));
win.webContents.on("context-menu", () => menu.popup());
http://www.dtcms.com/a/605490.html

相关文章:

  • IOS如何免费申请开发者证书(uniapp开发)
  • 网站里的动效怎么做国家重点项目建设网站
  • 《MySQL进阶(十一):集群架构与实践专题(一)》
  • github修改用户名和密码
  • 【数据结构入门手札】数据结构基础:从数据到抽象数据类型
  • Redis 大 Key 深度解析:危害、检测与治理实践
  • 最新电子商务购物商城系统源码 三端/H5+微信+安卓
  • MathPrompter:大幅提升大模型数学推理能力的创新方法
  • 如何在团队士气低落时重建信任与动力
  • SAP FICO应收毛利表分享
  • php音乐外链网站源码石家庄自助建站软件
  • Modbus RTU 转 Modbus TCP:借助数据采集提升罗克韦尔PLC工艺参数反馈实时性案例
  • 上海网站推广排名公司甘肃交通建设监理公司网站
  • 【服务器】查看IIS上某个网站的当前连接数
  • 【JavaEE初阶】IP协议-IP地址不够用了咋办?
  • 天洑受邀参加汽车零部件及智能制造产业产学研对接暨江苏省清华大学校友会
  • 内网对抗-隧道技术篇防火墙组策略HTTP反向SSH转发出网穿透CrossC2解决方案
  • vue3搭建项目yarn+vue3+webpack+less+element-plus
  • DVWA 靶场搭建流程
  • 迎接智能自动化:基于Dify工作流打造自主决策测试智能体
  • 如何建一个手机网站运城网址
  • 网站快照优化怎么做旅游网站功能简介
  • 线性代数 - 二阶矩阵的行列式、向量叉积(Cross product)的模长与平行四边形面积的关系
  • 【开题答辩全过程】以 基于 Spark 的音乐数据分析项目为例,包含答辩的问题和答案
  • 【云运维】Kubernetes安装(基于 Docker + Calico)
  • Python编程实战 - Python实用工具与库 - 操作Word:python-docx
  • 【日志处理方案大比拼】 Filebeat+Kafka+Flink+Spark+ES+HDFS VS ELK/AOP/RocketMQ/大厂方案
  • 网站建设需要哪些工具网站策划文案
  • 大学课程免费自学网站asp做留言板网站
  • 牛客周赛Round117--------题解2