linux版本微信打开关闭快捷键

news/2025/11/12 18:07:31/文章来源:https://www.cnblogs.com/liwanliangblog/p/19214928

安装相关依赖:

sudo apt install libx11-dev libdbus-1-dev wmctrl

复制源代码,编译:

g++ -std=c++11 -o wechat wechat.cpp

deepin系统设置全局快捷键
image

源码:

//g++ -std=c++11 -o wechat wechat.cpp
//这是一个通过alt+w实现微信显示和隐藏的c++语言程序
//sudo apt install wmctrl
//libx11-dev libdbus-1-dev 
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#include <sys/wait.h>class WeChatController {
private:std::vector<std::string> executeCommand(const std::string& cmd) {std::vector<std::string> result;FILE* pipe = popen(cmd.c_str(), "r");if (!pipe) return result;char buffer[128];while (fgets(buffer, sizeof(buffer), pipe) != nullptr) {std::string line(buffer);if (!line.empty() && line.back() == '\n') {line.pop_back();}result.push_back(line);}pclose(pipe);return result;}std::string getWeChatPid() {auto pids = executeCommand("pgrep -x wechat");return pids.empty() ? "" : pids[0];}std::vector<std::string> getWeChatWindows() {return executeCommand("xdotool search --class 'wechat'");}std::string getActiveWindow() {auto windows = executeCommand("xdotool getactivewindow");return windows.empty() ? "" : windows[0];}void activateWeChatTrayIcon() {std::string wechat_pid = getWeChatPid();if (wechat_pid.empty()) {exit(1);}auto items = executeCommand("qdbus org.kde.StatusNotifierWatcher /StatusNotifierWatcher org.kde.StatusNotifierWatcher.RegisteredStatusNotifierItems");for (const auto& item : items) {if (item.find(wechat_pid) != std::string::npos) {size_t pos = item.find('/');if (pos != std::string::npos) {std::string item_name = item.substr(0, pos);std::string cmd = "dbus-send --session --type=method_call --dest=\"" + item_name + "\" /StatusNotifierItem org.kde.StatusNotifierItem.Activate int32:0 int32:0";system(cmd.c_str());break;}}}}public:void run() {// 获取微信窗口和当前活动窗口auto wechat_windows = getWeChatWindows();std::string current_window = getActiveWindow();bool found = false;std::string active_wechat_window;// 检查当前活动窗口是否是微信窗口for (const auto& window_id : wechat_windows) {if (current_window == window_id) {found = true;active_wechat_window = window_id;break;}}// 切换逻辑if (found) {// 微信窗口是当前活动窗口,关闭它if (system("which wmctrl > /dev/null 2>&1") == 0) {std::string cmd = "wmctrl -ic " + active_wechat_window;system(cmd.c_str());} else {// 备用方案:发送 Alt+F4std::string cmd = "xdotool key --window " + active_wechat_window + " alt+F4";system(cmd.c_str());}} else {// 微信窗口不是当前活动窗口,激活第一个微信窗口if (!wechat_windows.empty()) {std::string cmd = "xdotool windowactivate " + wechat_windows[0];system(cmd.c_str());activateWeChatTrayIcon();} else {std::cout << "未找到微信窗口" << std::endl;}}}
};int main() {WeChatController controller;controller.run();return 0;
}

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

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

相关文章

如何在 .NET 中使用 SIMD

目录什么是 SIMDSIMD 基础 APISystem.Runtime.Intrinsics 命名空间如何理解向量的大小跨平台实现方式SIMD 指令集的使用System.Numerics 命名空间中的 SIMD 支持Vector<T> 结构体Vector2、Vector3 和 Vector4 结…

Linux shell映射表(变量的变量)

前言全局说明一、说明 1.1 环境: Ubuntu 22.04二、映射表 declare -A ARCH_MAP=(["arm"]="arm-linux-gnueabihf"["aarch64"]="aarch64-linux-gnu"["mips"]="m…

前端 GIT 使用技巧

Hello World本文来自博客园,作者:南宫影,转载请注明原文链接:https://www.cnblogs.com/nangongying/p/19214917

详细介绍:显卡算力过高导致PyTorch不兼容的救赎指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025/11/13

2025/11/13循环不变量原则: 循环不变量原则是算法设计与证明中用于确保循环逻辑正确性的核心思想,指在循环执行的每一轮前后,都保持一个固定的、为真的命题(不变量)。 这个命题明确了循环变量、数据结构或窗口的核…

Linux《网络基础》 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

《程序员修炼之道》阅读笔记4

按合约设计 按合约设计(Design by Contract,DBC)是一种基于合约的软件开发方法,它借鉴了现实世界中合约的概念,明确模块之间的权利与责任。在软件系统中,每个函数或方法都有其特定的职责,DBC通过定义前条件、后…

记一次 .NET 某医联体管理系统 崩溃分析

一:背景 1. 讲故事 这段时间都在跑外卖,感觉好久都没写文章了,今天继续给大家带来一篇崩溃类的生产事故,这是微信上有位老朋友找到我的,让我帮忙看下为啥崩溃了,dump也在手,接下来就可以一顿分析。 二:崩溃分析…

如何构建可信智能 Data Agent?推荐 Aloudata Agent 分析决策智能体

企业构建可信智能的 Data Agent 需以强大的数据底座为支撑,统一指标语义层和 NoETL 数据工程成为关键摘要: 在 AI 与大数据深度融合的当下,数据分析民主化日渐火热。Aloudata Agent 分析决策智能体依托于统一的指标…

Java 集合-Set

Java 集合 - Set 详解 集合(Set)是用于存储和处理无重复元素的高效数据结构,映射表(Map)则类似目录,支持通过键值快速查询和获取对应值。例如检验某人是否在论文答辩名单中,用 Set 实现比线性表更高效;若需存储…

#题解#牛客:牛牛的构造#DP#构造#

传送门 分析 1.容易发现的一件事,当n,n-1,n-2......2,1排列时是满足条件的(i,j)对最多的n排列 2.我们用递推的想法求每一个n的最大(i,j)对数ans[n] ans[0] = 0;int pre = 0;int x = 0;for (int i = 1; i <= …

Machine Learning - SVM Part 2: The Radial Kernel

Machine Learning - SVM Part 2: The Radial Kernel

2025-11-12 ZYZ28-NOIP-aoao round 2 hetao1733837的record

2025-11-12 ZYZ28-NOIP-aoao round 2 hetao1733837的record比赛链接:比赛详情 - ZYZ28-NOIP-aoao round 2 - ZYZOJ 比赛背景 昨天双十一,ZYZ著名NOI Cu选手@[TaoRan](用户详情 - TaoRan - ZYZOJ)爆出了惊天大瓜——…

2025/11/12

2025/11/12滑动窗口的核心是通过维护一个动态调整的 “窗口”(连续子区间),用 O (n) 时间复杂度替代暴力枚举的 O (n),避免重复计算。 其核心逻辑是用左右指针界定窗口范围,根据问题条件移动指针收缩或扩展窗口,…

redis stream介绍

介绍 redis stream是一种类似日志追加的数据结构。可用来记录和实时处理事件。适用场景:事件溯源 传感器监控 通知性能 新增 O(1) 访问单个节点是O(n),n是ID的长度 redis stream使用radix trees实现 基础 XADD 新增条…

Java 线性表、栈、队列和优先队列

Java 线性表、栈、队列和优先队列 选择合适的数据结构和算法是开发高性能软件的关键。数据结构是按特定形式组织数据的集合,不仅存储数据,还支持数据的访问与处理操作。 在面向对象思想中,数据结构被视为容器或容器…

2025/11/11

2025/11/11全流程开发逻辑 从前端表单设计、后端 Servlet 处理、DAO 层数据库操作,到 MySQL 表结构设计,完整覆盖了 “用户交互 -> 业务逻辑 -> 数据存储” 的 Web 应用开发流程。 问题排查方法 面对代码报错,…

植物大战僵尸修改器下载教程:图文详解与实用技巧

前言: 在塔防游戏还没有被各类快节奏手游占据之前,《植物大战僵尸》几乎是每位玩家电脑中必装的一款经典作品。即便十多年过去,它依然凭借简单的机制与极高的策略深度拥有极强的生命力。 对于不少老玩家来说,玩到中…

微服务——注册中心

常见的注册中心:eureka、nacos、zookeeper 服务注册和发现是什么意思?Spring Cloud是如何实现服务注册发现? 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、IP、端口等…

【深度学习计算机视觉】13:实战Kaggle比赛:图像分类 (CIFAR-10) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …