要求Mac微信有消息通知,挺不错的,有时候不用点击打开也能看到消息内容。不过Windows电脑版没有这个消息通知,只有右下角的图标在闪烁。(Mac微信通知)于是我想了很多方法来实现这样的功能,找到了另一种方式来实现这个功能。其实也有一定的局限性,不过可以满足办公时间的小小需求。效果如下:(Windows微信通知)视频演示:https://www.bilibili.com/vide...接收通知的实现方法首先弹出Windows通知。实现方式是Windows自带的通知栏。我们可以去调用WindowsAPI来发送Windows通知,让消息弹出。发送通知比接收通知更难,因为Windows微信电脑版的窗口属于非Windows窗口标准,我们无法通过常规方式读取各个控件的内容,更不用说监听通知的内容了。所以我找到了另一种通过Android手机监控微信消息的方法。所以这里使用开源软件SmsForwarder,安装在你的Android手机上,然后设置转发规则,监听微信APP的通知,然后选择WebHook作为发送通道,将监听到的消息POST到Python开启的HTTP服务器上,并触发Windows通知即可!以上代码模块涉及的模块,flask用于实现http请求,winotify用于发送Windows通知,urllib.parse用于解码POST的URL编码,win32gui和win32con用于创建任务栏上的任务图标并在后台运行。fromflaskimportFlask,requestfromwinotifyimportNotificationimporturllib.parseimportwin32guiimportwin32con代码说明:发送通知的关键代码片段,其中icon=r"D:\Python\demo\wechat.png"这是显示在notification,你可以在网上找一张你喜欢的图片放到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并替换,否则后续在Android端配置监听转发端将无法正常转发通知。app.run(debug=False,host='192.168.1.100',port=8080)在cmd中输入ipconfig获取ip地址。最后执行上面的代码。代码执行后,将在您的计算机上打开一个HTTP服务。这时候可以在浏览器本地测试,按照如下格式粘贴到浏览器中:http://内网ip:端口号/?通知内容然后访问它。toasts.pyfromflaskimportFlask,requestfromwinotifyimportNotificationimporturllib.parseimportwin32guiimportwin32conapp=Flask(__name__)@app.route('/')#获取url信息defgetUrlInfo():#完整的urlurl=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);#错误处理#因为监控软件监控到的第一条消息没有携带微信用户的昵称#所以需要判断当前收到的消息是否是第一条消息#如果不做这一步会有一个errorpdmh=":"incontentifpdmh==True:#截取:之前的内容qianmian=content.split(":")[0]weixinMsg=content.split(":")[1]#也去掉了[]部分,这里会提取微信昵称nickname=qianmian.split("]")[1]else:nickname='WeChatmessagenotification'weixinMsg=content#DevelopmentPushnotification#toaster=ToastNotifier()#toaster.show_toast(title=昵称,msg=weixinMsg,icon_path="logo.ico",duration=5)toast=Notification(app_id="通知中心",title=昵称,msg=weixinMsg,icon=r"D:\Python\demo\wechat.png")toast.show()返回"ok"defnotify(hwnd,msg,wparam,lparam):print("notify",msg)iflparam==win32con.WM_LBUTTONDBLCLK:#双击左键print("双击左键",msg)passeliflparam==win32con.WM_RBUTTONUP:#右键弹出print("右键弹出",msg)passeliflparam==win32con.WM_LBUTTONUP:#Leftbuttonpopupprint("Leftbuttonpopsup",msg)passreturnTruewc=win32gui.WNDCLASS()wc.hInstance=win32gui.GetModuleHandle(None)wc.lpszClassName="Windows通知中心"wc.样式=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,无,无,无,无)notify_id=(hwnd,0,win32gui.NIF_ICON|win32gui.NIF_MESSAGE|win32guiwin32con.NIF_TIP.Lo,adwinIcon32gui(0,win32con.IDI_APPLICATION),"WindowsNotificationCenter")win32gui.Shell_NotifyIcon(0,notify_id)#在指定IP和端口上开启HTTP服务if__name__=='__main__':app.run(debug=False,host='192.168.1.100',port=8080)Android手机配置和安装SmsForwarder本软件开源地址:https://gitee.com/pp/SmsForwa...下载地址:https://gitee.com/pp/SmsForwa。..设置发送通道,选择Webhook,按如下格式填写Webserver:http://内网ip:端口号/WebParams直接填写[msg],请求方式为GET,设置转发规则,添加规则,选择匹配“APP包名”,匹配方式选择“是”,匹配值为com.tencent.mm,选择发送通道l刚刚配置,自定义模板,直接点击通知内容。经过简单的配置,进行一些必要的设置后,SmsForwarder就可以正常使用了。需要优化的地方还在想办法在电脑本地监听微信消息。毕竟通过安卓手机监听消息也不是办法。一方面,它依靠本地服务器通过局域网向电脑发送通知。另一方面,Android监控消息不稳定,并不是每个人都使用Android。对于苹果手机的用户来说,也很难做到这一点。注意内网ip可能会变。如果后面发现收不到通知,可以查看内网ip,修改ip重启服务即可。因为这是使用内网ip实现的HTTP服务,所以你的安卓手机需要连接的wifi和电脑是一样的。如果电脑是有线网络,那么你的手机需要和电脑有线网络处于同一个网络环境,也就是同一个ip。如果不想通过局域网实现,可以配置内网穿透服务,??实现外网请求服务。监听微信消息的方案Hook微信,读取内存监听微信消息使用现成的方案,市面上也有一些Hook微信框架,比如可爱的猫,这个框架提供了非常方便的SDK调用API来监听微信聊天消息,您甚至可以发送消息。作者TANKING
