Windows的桌面通知转发

请问大家

有没有这样一个软件可以把一台电脑上收到的桌面通知(右下角那个)转发到另外一台电脑啊?

谢谢!

大概的原理可以分为 3 步:

  1. 服务端监听通知,2. 客户端接收服务端通知,3. 客户端再将通知内容显示。

  1. 服务端有现成的工具 NotificationListenerThrower

详细信息、调用的 Windows API 可见:Windowsの通知センターの内容を取得する(通知リスナー) - Qiita

  1. NotificationListenerThrower 可监听 Windows 通知,并架设 Websocket 服务端供其他设备查看、接收通知。
    服务端需要取消 Local Only 选择,并在防火墙放通 TCP 8000 端口。

  2. 客户端没有找到现成的。可以使用 Python 编写一个 Websocket 监听程序,接收服务端通知。拼凑 CV 一下网上的代码(Python3):

from win10toast import ToastNotifier
import asyncio
import websockets
import json
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-s","--server",type=str,default="127.0.0.1:8000",help='指定服务器IP及端口,例如:192.168.168.1:8000')
args = parser.parse_args()

async def client():
    wss_url = 'ws://'+ args.server
    conn_handler = await websockets.connect(wss_url,ping_interval=None)
    await conn_handler.send(wss_url)
    response = json.loads(await conn_handler.recv())
    if('ping' in response):
        print(args.server+",连接成功")
    while True:
        response = json.loads(await conn_handler.recv())
        if('id' in response):
            print("收到通知:【"+response["title"]+"】"+response["body"])
            toaster = ToastNotifier()
            toaster.show_toast(response["title"],
                response["body"],
                icon_path='icon.ico',
                duration=10)

asyncio.get_event_loop().run_until_complete(client())

客户端编译好的文件:https://musetransfer.com/s/92xdseomm
使用时加上 -s 参数设置服务端。例如:

NotificationClient.exe -s 192.168.168.1:8000 

效果图,左侧客户端,右侧服务端:

客户端二次开发还可以将 Windows 通知信息使用 Bark、Server 酱等工具转发至 iOS 、Andorid 设备。

已知问题:

  1. 无法转发通知图标
  2. 客户端可能存在异常断开
7 Likes

这,大佬您也太牛了吧
我其实就想找个现成的用用的,看有没有人推荐
还麻烦您现编个程序出来,真是不好意思了!辛苦啦!

KDE connect应该可以试试