使用Python+SmsForwarder实现微信PC端通知消息

目录

一、目的

二、准备:

三、实现逻辑:

四、具体实现:

五、最终效果图:

        针对有全屏且任务栏设置隐藏习惯,但是隐藏任务栏后情况,在电脑上看不到微信PC端新消息的问题进行以下方案解决,前提是电脑为Win10系统,手机为安卓手机,如果不是安卓手机,则请按crtl+w或Alt+F4

一、目的

  • 实现微信PC端新消息通知弹出,对接Windows通知,实现类似Mac微信通知,如图所示:

  • 格式为 通知标题:消息发送者或群名,通知内容:具体的消息内容

  • 微信消息主窗口打开则不进行通知提醒,微信消息主窗口关闭(不是最小化)后则新消息通知

  • 最小化微信消息窗口,来新消息不提醒,win10任务栏会自动显示并且闪烁微信任务栏图标

二、准备:

三、实现逻辑:

  • SmsForwarder短信转发器监听安卓手机的微信新消息弹出,并在SmsForwarder短信转发器中配置监听规则与转发通道,将微信新消息转发到Python发布出去的端口中

  • Python编写脚本实现消息的获取和对接Windows通知API接口,将获取到的消息解析并调用通知API将消息提示出来

四、具体实现:

  • SmsForwarder短信转发器配置如下

 1、发送通道->右上角+新增->选择Webhook类型

2、通道名称随意起名,请求方式为GET,Webhook Server地址写电脑Python脚本启动后的IP地址+端口号,消息模板固定为[msg]

 

3、转发规则->右上角+新增->选择刚新建的发送通道

匹配字段:APP包名

匹配模式:

匹配的值:com.tencent.mm,也可以使用已安装列表直接搜索微信,自动会带出来匹配的值

启用自定义模板,模板内容:{{通知标题}}$$${{通知内容}},$$$这个是用来分割内容的,在Python脚本中定义好,用其他分隔符也可以,只要和Python脚本中分割字符串对应上即可

4、通用设置

转发应用通知:开启

开启启动:开启

忽略电池优化设置:开启

  • Python脚本内容如下:

from flask import Flask, request
from winotify import Notification
import urllib.parse
import win32gui
import win32con


app = Flask(__name__)




@app.route('/')  # 获取url信息
def getUrlInfo():
    # 完整url
    url = request.url
    # 主机部分
    hostUrl = request.host_url
    # 访问路径
    fullPath = request.full_path
    # 处理空格转为+的问题
    fullPath = fullPath.replace('+', ' ')
    # 输出
    print('收到推送任务,推送内容是:' +
          str(
            urllib.parse.unquote(
                fullPath.split("/?")[1]
            )
        ).replace('+', ' ', 1)
    )


    # 接收到的内容
    content = str(
        urllib.parse.unquote(fullPath.split("/?")[1])
    ).replace('+', ' ', 1)


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


    if win32gui.IsWindowVisible(hwnd):
        print('不推送')
        return "not push"
    else:
        print('推送开始')
        titleNameCheck = "$$$" in content


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


        # 开发Push通知
        # toaster = ToastNotifier()
        # toaster.show_toast(title=nickname, msg=weixinMsg,icon_path="logo.ico", duration=5)
        toast = Notification(
            app_id = "微信",
            title = nickname,
            msg = weixinMsg,
            icon = "D:/noticeWeChatMsg/weixin.png"
        )
        toast.show()
        print('推送结束')  
        return "push ok"




# def notify(hwnd, msg, wparam, lparam):
#     # print("notify", msg)
#     if lparam == win32con.WM_LBUTTONDBLCLK:  # 双击左键
#         print("双击左键", msg)
#         pass
#     elif lparam == win32con.WM_RBUTTONUP:  # 右键弹起
#         print("右键弹起", msg)
#         pass
#     elif lparam == win32con.WM_LBUTTONUP:  # 左键弹起
#         print("左键弹起", msg)
#         pass
#     return True




# wc = win32gui.WNDCLASS()
# wc.hInstance = win32gui.GetModuleHandle(None)
# wc.lpszClassName = "微信新消息通知"
# wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW
# wc.lpfnWndProc = notify
# classAtom = win32gui.RegisterClass(wc)
# hwnd = win32gui.CreateWindow(
#     classAtom,
#     "tst2",
#     win32con.WS_OVERLAPPEDWINDOW,
#     win32con.CW_USEDEFAULT,
#     win32con.CW_USEDEFAULT,
#     win32con.CW_USEDEFAULT,
#     win32con.CW_USEDEFAULT,
#     None,
#     None,
#     None,
#     None
# )
# notify_id = (
#     hwnd,
#     0,
#     win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP,
#     win32con.WM_USER + 20,
#     win32gui.LoadIcon(
#         0,
#         win32con.IDI_APPLICATION
#     ),
#     "微信新消息通知"
# )
# win32gui.Shell_NotifyIcon(0, notify_id)


# win32gui.PumpMessages()
# 在指定IP和端口开启HTTP服务
if __name__ == '__main__':
    app.run(debug=False, host='192.168.137.1', port=9998)

# 改成实际的图片存放位置这是放到D:/noticeWeChatMsg/文件夹下
icon = "D:/noticeWeChatMsg/weixin.png" 
  • 安装完毕Python后,在运行脚本之前需要在本地安装脚本中所依赖的第三方库,使用pip install 模块名称进行安装,例如:

pip install flask
  • 在脚本所在目录下Python执行脚本

python noticeWeChatMsg.py

启动后浏览器访问 http://192.168.137.1:9998?推送内容三生三世 可进行测试,看是否推送到Windows通知,如下图所示:

  • 电脑开启热点,手机连接电脑热点,使用转发规则进行发送测试,右下角出现通知内容则算成功

五、最终效果图:

参考文章:

Python实现Windows弹出微信消息通知(可显示发送人和消息内容)https://segmentfault.com/a/1190000042388968

### Webhook 配置方法 在配置 SmsForwarder 的 Webhook 功能时,需要按照以下步骤进行设置: 1. **下载与安装** 通过开源平台获取 SmsForwarder 应用。可以访问其码云地址:https://gitee.com/pp/SmsForwarder.git,或在酷安中搜索“短信转发器”进行下载安装[^2]。 2. **启动应用并进入配置界面** 安装完成后,打开应用并进入主界面,选择发送通道的配置选项。SmsForwarder 支持多种发送通道,包括钉钉机器人、企业微信群机器人、飞书机器人等,而 Webhook 是其中一种常用的接口方式[^2]。 3. **添加 Webhook 发送通道** 在发送通道列表中选择 Webhook,并点击“添加”。填写相关信息: - **名称**:为该 Webhook 通道命名,方便后续管理。 - **URL**:输入目标服务器的 API 地址,确保该地址支持 POST 或 GET 请求。 - **请求方法**:选择使用 POST 还是 GET 方法进行数据提交。 - **请求头**(可选):根据目标服务器的要求,添加必要的请求头信息。 - **请求体**:自定义请求内容模板,通常包含短信内容、来源号码等字段。如果留空,则使用全局默认模板[^2]。 4. **测试连接** 在完成配置后,建议点击“测试”按钮以验证 Webhook 是否能成功调用。如果返回错误,检查 URL 和请求参数是否正确,并确认网络环境是否支持(例如部分用户反馈 5G 网络可能不兼容,需切换至 4G 或 Wi-Fi)[^3]。 5. **设置转发规则** 返回主界面后,进入“转发规则”设置,选择需要监听的短信类型(如所有短信或特定号码的短信),并指定转发到刚刚配置的 Webhook 通道。此外,还可以启用正则匹配功能,对短信内容进行筛选,仅转发符合要求的信息[^2]。 6. **保存并启用** 完成所有设置后,保存配置并确保 SmsForwarder 处于运行状态。此时,每当手机接收到符合条件的短信时,系统会自动将其转发至指定的 Webhook 接口[^2]。 ### 示例代码 以下是一个简单的 Python 脚本示例,用于接收来自 SmsForwarder 的 Webhook 请求: ```python from flask import Flask, request app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): data = request.json print("Received SMS:", data) return 'OK', 200 if __name__ == '__main__': app.run(port=5000) ``` 此脚本创建了一个本地 Web 服务,监听 `/webhook` 路径上的 POST 请求,并打印出接收到的短信内容。可以通过内网穿透工具(如 ngrok)将该服务暴露给公网,以便 SmsForwarder 能够访问。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值