跳至内容

Python+短信转发器实现微信PC端通知消息

使用 Windows 11,我喜欢自动隐藏任务栏,这导致一个问题,我无法及时看到微信新消息。在网上查看各种解决方案后,我基于使用Python+SmsForwarder实现微信PC端通知消息进行改进-主要是 Python 脚本修改了一些东西。最终成果如下:

方案适用

可以保证的是 Windows11 +安卓手机环境可行,因为我现在用的就是它。

不适合人群如下:

  1. 顾虑数据泄漏人群:此方案需要短信转发器获取手机上微信的通知内容。虽然此方案使用的短信转发器是一个开源软件,有很多大佬对安全把关。
  2. 非安卓手机用户人群:短信转发器只适用于安卓手机,苹果手机和鸿蒙手机无法使用短信转发器(没经过测试,可能可以使用),但或许可以其它软件代替。
  3. 非 Windows11 用户人群:如果是 Windows10 用户,请看使用Python+SmsForwarder实现微信PC端通知消息
  4. 手机与主机网络不是同一局域网:该方案需要手机与主机在同一局域网。

实现逻辑

短信转发器通过配置的监听规则获取微信新消息弹出内容,然后通过配置的转发通道,将内容转发至 Python 脚本实现的 web 服务。最后 Python 脚本调用 Windows11 的通知 API ,实现通知微信消息。

方案实现

首先确定已经安装 Python 环境。

安装依赖

python -m pip install --upgrade pip
pip install Flask pywin32 winotify

python 脚本实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from flask import Flask, request
from winotify import Notification
import urllib.parse
import win32gui
import os

app = Flask(__name__)

@app.route('/')
def main():
    full_path = request.full_path
    full_path = full_path.replace('+', ' ')

    content = str(
        urllib.parse.unquote(full_path.split("/?")[1])
    ).replace('+', ' ', 1)

    hwnd = win32gui.FindWindow("WeChatMainWndForPC", "微信")

    if win32gui.IsWindowVisible(hwnd) and not win32gui.IsIconic(hwnd):
        return "not push"
    else:
        title_name_check = "$$$" in content

        if title_name_check:
            nickname = content.split("$$$")[0]
            weixin_msg = content.split("$$$")[1]
        else:
            nickname = '微信消息通知'
            weixin_msg = content

        # 使用winotify发送通知
        toast = Notification(
            app_id="微信",
            title=nickname,
            msg=weixin_msg,
            icon=current_directory+r"\weixin.png"
        )
        toast.show()
        return "push ok"

if __name__ == '__main__':
    host=input("请输入IP地址:")
    current_directory = os.getcwd()
    app.run(debug=False, host=host, port=9998) # 指定IP和端口开启HTTP服务

目录下需要有 weixin.png 文件,可以是它:

测试信息通知

运行 app.py 文件:

python app.py
请输入IP地址:192.168.1.28
 * Serving Flask app 'app'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://192.168.1.28:9998
Press CTRL+C to quit

浏览器的地址栏里输入 http://192.168.1.28:9998/?ceui-将 IP 替换为你的主机 IP 地址,你会看到微信消息通知(此时不要有微信窗口在任务栏)。

配置短信转发器

  • 点击短信转发器仓库,在提供的网盘里下载 arm64-v8a 的最新版本。然后安装。
  • 在通用设置里开启 转发应用通知 、 开机启动 、 忽略电池优化设置。

在发送通道里新建通道(类型选Webhook)。

在转发规则-应用里新建转发规则,如下配置。配置后可以点击测试是否可以发送通知(此时不要有微信窗口在任务栏),然后保存。

将短信转发器设置为允许自启动+允许后台活动,手机放开微信的通知权限(主要是锁屏通知)。

根据以上步骤,就可以实现方案了。