用Vite+Electron搞个微信截图工具(区域截屏工具)

本文介绍了如何使用Electron、Vite和React构建一个截图工具,以提高在多窗口间切换查找信息的效率。开发者首先展示了应用的工作原理,通过主窗口发起截图请求,开启透明全屏的截图窗口,利用Electron的桌面捕获功能截取屏幕并处理图片。接着,文章详细阐述了路由配置、主窗口和截图页面的实现,以及Electron之间的通信方法。最后,提供了源码链接供读者参考和探索。

背景

因为我们日常开发项目的时候,需要和同事对接api文档还有UI图,所以有时候要同时打开多个窗口,并在多个窗口中切换,来选择自己要的信息,如果api文档不多的情况还好,但是有时候就是要做大量的页面,为了提升效率我决定自己做一个截图工具,并把自己要的信息截图钉在窗口上。

在做之前先看看最终展示效果吧:

  • 先是截图
    image.png
  • 截图后的图片展示
    image.png

工具

  • nodejs
  • pnpm
  • electron
  • vite
  • react

实现

原理逻辑

其实也并不难理解,首先是主窗体发起截图请求,然后会打开另一个负责截图透明且全屏的窗体,唤起后透明窗体会让electron截取整个屏幕发给逻辑页面,页面会把图片绘制满屏实现定格效果,然后再用canvas做绘制区域的生成,根据生成出的区域对刚才满屏图片进行裁切导出,最后传递给主窗体去显示还可以存到剪贴板种。

具体的api可以看看官方文档: https://www.electronjs.org/zh/docs/latest/api/desktop-capturer

image.png

路由配置

本次开发使用了electron-vite-react,具体构建和配置就是用它的默认配置就好了,值得注意的是,本次需要要做三个窗体,一个主窗体,一个截屏窗体,一个是图片展示窗体,于是索性就引入react-router-dom了。

image.png
先来安装一下:

git clone https://github.com/electron-vite/electron-vite-react

pnpm add react-router-dom

pnpm add antd

但是要注意的是,我们需要把路由设置成hash模式,不然本地打包时会无法找到。

    import type { FC } from "react";
    import { Routes, Route } from "react-router-dom";
    import { Provider } from "react-redux";
    import { store } from "@/stores";
    import "./index.scss";

    import Home from "@/pages/home";
    import ShotScreen from "@/pages/shotScreen";
    import ViewImage from "@/pages/viewImage";

    const App: FC = () => (
    	<Provider store={store}>
    		<div className="app">
    			<Routes>
    				<Route path="/" element={<Home />}></Route>
    				<Route path="/shotScreen" element={<ShotScreen />}></Route>
    				<Route path="/viewImage" element={<ViewImage />}></Route>
    			</Routes>
 
### 如何将基于 UniApp+Vite+Vue3 的微信小程序运行到微信开发者工具中 #### 项目构建与配置 在开发基于 UniApp、Vite 和 Vue3 的微信小程序时,需要确保项目的正确配置以支持微信开发者工具的运行。以下内容详细描述了如何完成这一过程。 #### 配置 Vite 构建工具 在使用 Vite 构建工具时,必须确保生成的代码能够被微信开发者工具正确解析。默认情况下,Vite 不会生成 sourcemap 文件,这会导致调试过程中无法映射到源码[^3]。因此,需要在 `vite.config.js` 中启用 sourcemap: ```javascript import { defineConfig } from 'vite'; import uni from '@dcloudio/vite-plugin-uni'; export default defineConfig({ plugins: [uni()], build: { sourcemap: true, // 启用 sourcemap }, }); ``` #### 打包微信小程序 为了将项目运行到微信开发者工具中,需要将项目打包为微信小程序格式。执行以下命令进行打包: ```bash npm run build:mp-weixin ``` 此命令会生成一个适合微信小程序的文件夹,通常位于 `dist/build/mp-weixin/` 目录下[^2]。 #### 配置微信开发者工具 将生成的微信小程序目录导入到微信开发者工具中。具体步骤如下: 1. 打开微信开发者工具。 2. 点击“新建项目”按钮。 3. 选择生成的微信小程序目录(如 `dist/build/mp-weixin/`)。 4. 填写小程序的 AppID(如果仅用于调试,可以使用测试号)。 #### 解决常见问题 在将项目运行到微信开发者工具的过程中,可能会遇到一些问题。以下是常见的解决方案: 1. **样式穿透问题**:微信开发者工具不支持某些样式穿透规则。例如,`::v-deep` 可能无效。建议直接在组件内部定义样式[^1]。 2. **`v-html` 渲染问题**:在微信小程序中,`v-html` 会被渲染为 `rich-text` 组件,导致样式不生效。可以通过自定义组件或手动处理 HTML 内容来解决[^1]。 3. **图片大小问题**:如果图片过大,可能导致显示异常。建议通过 CSS 设置图片的最大宽度和高度,例如: ```css image { max-width: 100%; height: auto; } ``` 4. **类型检查问题**:TypeScript 对类型定义较为严格。如果遇到类似“隐式具有 any 类型”的错误,可以通过声明接口或使用泛型来解决[^1]。 #### 示例代码 以下是一个简单的示例,展示如何在微信开发者工具中运行基于 UniApp+Vite+Vue3 的小程序。 ```vue <template> <view class="container"> <text>{{ message }}</text> <button @tap="handleClick">点击我</button> </view> </template> <script setup lang="ts"> import { ref } from 'vue'; const message = ref('Hello UniApp with Vite and Vue3!'); function handleClick() { message.value = '按钮已被点击!'; } </script> <style scoped> .container { text-align: center; margin-top: 50px; } button { background-color: #1aad19; color: white; padding: 10px 20px; border: none; border-radius: 5px; } </style> ``` #### 注意事项 1. 确保项目依赖已正确安装,并且版本兼容。 2. 在微信开发者工具中调试时,注意查看控制台输出的日志信息,以便快速定位问题。 3. 如果需要上传到微信服务器,请确保已正确配置小程序的 AppID 和相关权限。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值