解決Electron透明窗口點擊不影響其他應用

遇到的問題:

在electron透明窗口點擊,影響窗口下的應用接受不到點擊事件

解決方案:

CSS+IgnoreMouseEvents

實現原理:

主進程默認設置禁用目標窗口鼠標事件(禁用之后能檢測到mousemove),UI進程檢測頁面的的mousemove事件,判斷是否是透明區域,如果是透明區域則禁用鼠標事件,如果不是透明區域則關閉(渲染進程根節點設置point-events: none, 需要檢測的界面設置point-events: unset)

實現代碼:

下面是渲染進程下面👇

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Electron透明窗口示例</title><style>body {pointer-events: none;}.container {width: 500px;height: 500px;display: flex;justify-content: center;align-items: center;pointer-events: none;}.targetArea {width: 250px;height: 250px;background-color: #000;pointer-events: auto;text-align: center;line-height: 250px;color: #fff;font-size: 20px;}</style>
</head>
<body><div class="container"><div class="targetArea">目標區域</div></div><script src="./renderer1.js" type="module"></script>
</body>
</html>
const { ipcRenderer } = require('electron');(function() {try {console.log('🐊 Smart mouse events injection started');// 智能鼠標事件穿透實現function setupSmartMouseEvents() {console.log('🐊 Setting up smart mouse events...');// 監聽鼠標移動事件window.addEventListener("mousemove", (event) => {try {// 關鍵判斷:如果鼠標在透明區域(event.target是document.documentElement)const isInTransparentArea = event.target === document.documentElement;console.log(isInTransparentArea ? '不透明區域' : '透明區域')if (isInTransparentArea) {// 在透明區域:啟用鼠標事件穿透ipcRenderer.send('set-ignore-mouse-events', true);} else {// 在內容區域:禁用鼠標事件穿透,讓當前窗口處理事件ipcRenderer.send('set-ignore-mouse-events', false);}} catch (error) {console.error('🐊 Error in mousemove handler:', error);}});// 初始設置:啟用穿透try {ipcRenderer.send('set-ignore-mouse-events', true);console.log('🐊 Initial mouse penetration enabled');} catch (error) {console.error('🐊 Error setting initial mouse penetration:', error);}}// DOM加載完成后設置鼠標事件if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', setupSmartMouseEvents);} else {setupSmartMouseEvents();}} catch (error) {console.error('🐊 Error in smart mouse events injection:', error);}
})()

下面是主進程代碼👇

這里是主進程代碼
function createWindow() {// 創建瀏覽器窗口mainWindow = new BrowserWindow({width: 800,height: 600,frame: false,transparent: true,webPreferences: {nodeIntegration: true,contextIsolation: false,enableRemoteModule: true}});// 加載應用的 index.htmlmainWindow.loadFile('src/mousevent.html');// 設置全局引用global.mainWindow = mainWindow;ipcMain.on('set-ignore-mouse-events', (event, value) => {console.log('set-ignore-mouse-events', value)mainWindow.setIgnoreMouseEvents(value, { forward: true });});
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93201.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 泛型(Generics)詳解

泛型是 C# 2.0 引入的核心特性&#xff0c;它允許在定義類、接口、方法、委托等時使用未指定的類型參數&#xff0c;在使用時再指定具體類型。這種機制可以顯著提高代碼的復用性、類型安全性和性能。一、泛型的核心概念類型參數化泛型允許將類型作為 "參數" 傳遞給類…

Spring中存在兩個相同的Bean是否會報錯?

第一種情況&#xff1a;使用XML的方式設置Bean&#xff0c;這種情況在Spring啟動時就會報錯&#xff0c;因為ID在Spring中是Bean的唯一標識&#xff0c;Spring容器在啟動時會校驗唯一性&#xff0c;一旦發現重復就會報錯。但是如果是在兩個不同的XML文件中定義兩個相同的Bean&a…

【新手入門】Android基礎知識(一):系統架構

目 錄 Android 系統架構圖 1. 應用 2. JAVA API 框架 3. 原生 C/C 庫 4. Android 運行時&#xff08;Android Runtime&#xff09; 5. 硬件抽象層 (HAL) 6. Linux 內核 參考資料 Android 系統架構圖 Android底層內核空間以Linux Kernel作為基石&#xff0c;上層用戶空…

晶振電路的負載電容、電阻參數設計

系列文章目錄 文章目錄系列文章目錄前言一、晶振主要參數二、有源與無源區別三、無源晶振四、有源晶振總結前言 在硬件電路的設計中&#xff0c;晶振電路是必不可少的&#xff0c;它充當了整個電路心臟的作用。在這個晶振電路的設計中負載電容、電阻參數的選型是很重要的&…

電腦上練打字用什么軟件最好:10款打字軟件評測

現在孩子們在電腦上練打字&#xff0c;軟件一搜一大把&#xff0c;可好多家長和老師都犯愁&#xff1a;到底哪個管用&#xff1f;我帶200多個小學生練過字&#xff0c;前前后后試了十款軟件&#xff0c;今天就掏心窩子說說——有的看著花哨其實沒用&#xff0c;有的專業是專業但…

第五天~提取Arxml的模板信息

?? ARXML模板信息提取:解鎖汽車軟件的樂高魔法 在汽車電子的世界里,AUTOSAR(汽車開放系統架構)如同無形的神經系統,而ARXML文件正是承載這套神經系統藍圖的數字載體。當工程師們需要批量創建或修改ECU(電子控制單元)配置時,模板信息提取便成為了一項至關重要的核心技…

react+antd+vite自動引入組件、圖標等

前言&#xff1a;react在使用antd的時候&#xff0c;也是需要每個組件都在界面上按需引入的&#xff0c;那能不能自動生成&#xff0c;按需使用呢&#xff1f;我們這里說一說這個。安裝插件&#xff0c;組件按需引入unplugin-antd-resolverunplugin-auto-importnpm install unp…

深度學習與遙感入門(六)|輕量化 MobileNetV2 高光譜分類

系列回顧&#xff1a; &#xff08;一&#xff09;CNN 基礎&#xff1a;高光譜圖像分類可視化全流程 &#xff08;二&#xff09;HybridNet&#xff08;CNNTransformer&#xff09;&#xff1a;提升全局感受野 &#xff08;三&#xff09;GCN 入門實戰&#xff1a;基于光譜 KNN…

第4節 神經網絡從公式簡化到卷積神經網絡(CNN)的進化之路

?? 深度學習的"玄學進化史" 從CNN用卷積層池化層處理圖片,循環網絡RNN如何利用上下文處理序列數據,到注意力機制讓Transformer橫空出世,現在的大語言模型已經能寫能畫能決策!每個新技巧都讓人驚呼"還能這么玩",難怪說深度學習像玄學——但這玄學,…

最新去水印小程序系統 前端+后端全套源碼 多套模版 免授權(源碼下載)

最新去水印小程序系統 前端后端全套源碼 多套模版 免授權 源碼下載&#xff1a;https://download.csdn.net/download/m0_66047725/91669468 更多資源下載&#xff1a;關注我

TCP Socket 編程實戰:實現簡易英譯漢服務

前言&#xff1a;TCP&#xff08;傳輸控制協議&#xff09;是一種面向連接、可靠的流式傳輸協議&#xff0c;與 UDP 的無連接特性不同&#xff0c;它通過三次握手建立連接、四次揮手斷開連接&#xff0c;提供數據確認、重傳機制&#xff0c;保證數據有序且完整傳輸。本文將基于…

CF566C Logistical Questions Solution

Description 給定一棵 nnn 個點的樹 TTT&#xff0c;點有點權 aia_iai?&#xff0c;邊有邊權 www. 定義 dist?(u,v)\operatorname{dist}(u,v)dist(u,v) 為 u→vu\to vu→v 的簡單路徑上的邊權和. 找到一個節點 uuu&#xff0c;使得 W∑i1ndist?(u,i)32aiW\sum\limits_{i1}^n…

聊天室全棧開發-保姆級教程(Node.js+Websocket+Redis+HTML+CSS)

前言 最近在學習websocket全雙工通信&#xff0c;想要做一個聯機小游戲&#xff0c;做游戲之前先做一個聊天室練練手。 跟著本篇博客&#xff0c;可以從0搭建一個屬于你自己的聊天室。 準備階段 什么人適合學習本篇文章&#xff1f; 答&#xff1a;前端開發者&#xff0c;有一…

后臺管理系統-2-vue3之路由配置和Main組件的初步搭建布局

文章目錄1 路由搭建1.1 路由創建(router/index.js)1.2 路由組件(views/Main.vue)1.3 路由引入并注冊(main.js)1.4 路由渲染(App.vue)2 element-plus的應用2.1 完整引入并注冊(main.js)2.2 示例應用(App.vue)3 ElementPlusIconsVue的應用3.1 圖標引入并注冊(main.js)3.2 示例應用…

使用 Let’s Encrypt 免費申請泛域名 SSL 證書,并實現自動續期

使用 Let’s Encrypt 免費申請泛域名 SSL 證書&#xff0c;并實現自動續期 目錄 使用 Let’s Encrypt 免費申請泛域名 SSL 證書&#xff0c;并實現自動續期 &#x1f6e0;? 環境準備&#x1f4a1; 什么是 Let’s Encrypt&#xff1f;&#x1f9e0; Let’s Encrypt 證書頒發原…

一鍵自動化:Kickstart無人值守安裝指南

Kickstart文件實現自動安裝1. Kickstart文件概述1.1 定義與作用Kickstart文件是Red Hat系Linux發行版&#xff08;如RHEL、CentOS、Fedora&#xff09;用于實現自動化安裝的配置文件&#xff0c;采用純文本格式保存。它通過預設安裝參數的方式&#xff0c;使系統安裝過程無需人…

深度解讀 Browser-Use:讓 AI 驅動瀏覽器自動化成為可能

目錄 一、什么是 Browser-Use&#xff1f; 二、Browser-Use 的核心功能 1. AI 與瀏覽器的鏈接橋梁 2. 無代碼 / 低代碼操作界面 3. 支持多家 LLM 4. 開發體驗簡潔 可快速上手 三、核心價值與適用場景 四、與 Playwright 的結合使用 五、總結與展望 https://github.com…

React.memo、useMemo 和 React.PureComponent的區別

useMemo 和 React.memo 都是 React 提供的性能優化工具&#xff0c;但它們的作用和使用場景有顯著不同。以下是兩者的全面對比&#xff1a; 一、核心區別總結特性useMemoReact.memo類型React Hook高階組件(HOC)作用對象緩存計算結果緩存組件渲染結果優化目標避免重復計算避免不…

Lumerical INTERCONNECT ------ CW Laser 和 OPWM 組成的系統

Lumerical INTERCONNECT ------ CW Laser 和 OPWM 組成的系統 引言 正文 引言 這里我們來簡單介紹一下 CW Laser 與 OSA 組成的簡單系統結構的仿真。 正文 我們構建一個如下圖所示的仿真結構。 我們將 CWL 中的 power 設置為 1 W。 然后直接運行仿真查看結果如下: 雖然 …

想漲薪30%?別只盯著大廠了!轉型AI產品經理的3個通用方法,人人都能學!

在AI產品經理剛成為互聯網公司香餑餑的時候&#xff0c;剛做產品1年的月月就規劃了自己的轉型計劃&#xff0c;然后用3個月時間成功更換賽道&#xff0c;轉戰AI產品經理&#xff0c;漲薪30%。 問及她有什么上岸秘訣&#xff1f;她也復盤總結了3個踩坑經驗和正確路徑&#xff0c…