需要

Mac微信是有一个音讯告诉的,这一点就挺好的,有时候基本不必点开开看就能看到音讯内容。而Windows电脑版是没有这个音讯告诉的,只有右下角图标闪动。


(Mac微信告诉)

于是我想了不少的方法去实现这么一个性能,曾经另辟蹊径实现了这个性能,其实也有肯定的局限性,然而能满足办公期间的小需要。

成果如下:


(Windows微信告诉)

实现办法

接管告诉

首先是Windows的告诉弹出的实现就是Windows自带的告诉栏,咱们能够通过Python去调用Windows API去发送Windows告诉,让音讯弹出来。

发送告诉

相比于接管告诉,那么发送告诉就比拟艰难,因为Windows微信电脑版的窗口属于非Windows窗口规范,咱们无奈通过惯例的形式去读取每个控件的内容,更无奈监听到告诉内容,所以我这边另辟蹊径,通过安卓手机去监听微信音讯。

所以这里用到了SmsForwarder这款开源软件,装置在你的安卓手机上,而后设置转发规定,监听微信APP的告诉,而后发送通道抉择WebHook,将监听到的音讯POST到Python开启的HTTP服务器,触发Windows告诉就行了!

上代码

模块

以下波及到的模块,flask用来实现http申请的,winotify是用于发送Windows告诉,urllib.parse用于将POST过去的URL编码进行解码,win32gui、win32con用于创立任务栏的工作图标及后盾运行。

from flask import Flask, requestfrom winotify import Notificationimport urllib.parseimport win32guiimport win32con

代码阐明:
发送告诉的要害代码片段,其中 icon=r"D:\Python\demo\wechat.png" 这个是告诉中显示的一个小图标,能够本人网上找一张本人喜爱的图片放在toasts.py同级目录下。

toast = Notification(app_id="告诉核心",title=nickname,msg=weixinMsg,icon=r"D:\Python\demo\wechat.png")    toast.show()

192.168.1.100是我电脑的内网ip,8080是端口号,你须要获取你电脑的内网ip换上去,不然后续配置安卓那边的监听转发端就无奈失常转发告诉。

app.run(debug=False,host='192.168.1.100', port=8080)

在cmd输出 ipconfig 就能够取得ip地址了。

最初执行代码就能够了。

执行代码后,会在你电脑开启一个HTTP服务,这时候你能够在浏览器进行本地测试,在浏览器依照以下格局粘贴:

http://内网ip:端口号/?告诉内容

而后拜访就能够。

toasts.py

from flask import Flask, requestfrom winotify import Notificationimport urllib.parseimport win32guiimport win32conapp = Flask(__name__)@app.route('/')  # 获取url信息def getUrlInfo():    # 残缺url    url = request.url    # 主机局部    hostUrl = request.host_url    # 拜访门路    fullPath = request.full_path    # 输入    print('收到推送工作,推送内容是:'+str(urllib.parse.unquote(fullPath.split("/?")[1])).replace('+', ' ', 1))    # 接管到的内容    content = str(urllib.parse.unquote(fullPath.split("/?")[1])).replace('+', ' ', 1);    # 错误处理    # 因为监听软件那边监听到的首条音讯是没有带上微信用户昵称的    # 所以须要判断以后接管到的音讯是不是首条音讯    # 如果不做这一步就会出错    pdmh = ":" in content    if pdmh == True:        # 截取:后面的内容        qianmian = content.split(":")[0]        weixinMsg = content.split(":")[1]        # 还要将[]这一块也去掉,这就提取到了微信昵称        nickname = qianmian.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=r"D:\Python\demo\wechat.png")    toast.show()    return "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 Truewc = win32gui.WNDCLASS()wc.hInstance = win32gui.GetModuleHandle(None)wc.lpszClassName = "Windows告诉核心"wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW;wc.lpfnWndProc = notifyclassAtom = 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),"Windows告诉核心")win32gui.Shell_NotifyIcon(0,notify_id)# 在指定IP和端口开启HTTP服务if __name__ == '__main__':    app.run(debug=False,host='192.168.1.100', port=8080)

安卓手机配置

装置SmsForwarder这款软件。

开源地址:https://gitee.com/pp/SmsForwa...
下载地址:https://gitee.com/pp/SmsForwa...

设置发送通道,抉择 Webhook ,Webserver依照以下格局填写:

http://内网ip:端口号/

WebParams间接填写 [msg] ,申请形式是GET

设置转发规定,增加规定,抉择匹配 “APP包名”,匹配模式抉择 “是”,匹配值是 com.tencent.mm,抉择方才配置的发送通道,自定义模板间接点击告诉内容。

简略进行配置后,SmsForwarder进行一些必要的设置后,就能够失常应用了。

须要优化的中央

目前还在想方法在电脑本地监听微信音讯,毕竟通过安卓手机监听音讯也不是方法,一方面是依赖本地的服务器,通过局域网才能够发送告诉给电脑。另一方面就是安卓监听音讯也不具备稳定性,而且也不是人人都用安卓,对于苹果手机的用户,也是难以实现这个。

须要留神的中央

  1. 内网ip可能会变动,如果你发现前面无奈失常接管到告诉,能够查看下内网ip,更换一下ip重启服务。
  2. 因为这是应用内网ip实现的HTTP服务,所以你安卓手机须要连贯的wifi与电脑的统一,如果电脑是有线网络,那么你手机须要与电脑有线网络同一个网络环境,即ip雷同。
  3. 如果不想通过局域网实现,能够本人配置内网穿透服务去实现外网申请服务。

作者

TANKING