You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

监听Windows通知触发Element not found错误,求原因与解决方法

解决Windows通知监听脚本的"Element not found"错误

错误原因

这个RuntimeError: Element not found错误的核心诱因有两个:

  • 线程模型不匹配:WinRT的UserNotificationListener事件需要在**单线程单元(STA)**环境下运行,但Python默认采用多线程单元(MTA),直接注册事件会导致系统无法识别监听元素。
  • 脚本无存活逻辑:原代码注册完事件回调后直接退出,进程终止后系统无法将通知事件传递给已不存在的监听实例。

解决办法

1. 切换到STA线程

借助pywin32库的pythoncom模块,将代码切换到STA线程环境,这是WinRT事件正常工作的前提。

2. 维持脚本运行

通过Windows消息循环或阻塞逻辑保持脚本存活,确保能接收系统推送的通知事件。

修正后的完整代码

import pythoncom
from winrt.windows.ui.notifications.management import UserNotificationListener, UserNotificationListenerAccessStatus
from winrt.windows.foundation.metadata import ApiInformation

def main():
    if not ApiInformation.is_type_present("Windows.UI.Notifications.Management.UserNotificationListener"):
        print("当前设备不支持UserNotificationListener。")
        return

    listener = UserNotificationListener.get_current()
    accessStatus = listener.get_access_status()

    if accessStatus != UserNotificationListenerAccessStatus.ALLOWED:
        print("未获得通知监听权限,请前往系统设置开启:设置→系统→通知→高级通知设置→通知访问")
        return

    def handler(listener, event):
        notification = listener.get_notification(event.user_notification_id)
        if hasattr(notification, "app_info"):
            print(f"应用名称: {notification.app_info.display_info.display_name}")
        # 可扩展解析通知标题、正文等内容:
        # if notification.notification:
        #     print(f"标题: {notification.notification.content.get_xml()}")

    listener.add_notification_changed(handler)
    print("已启动通知监听,按Ctrl+C停止...")
    pythoncom.PumpMessages()

if __name__ == "__main__":
    pythoncom.CoInitialize()
    try:
        main()
    except KeyboardInterrupt:
        print("监听已终止。")
    finally:
        pythoncom.CoUninitialize()

额外注意事项

  • 安装依赖:执行pip install pywin32获取pythoncom模块。
  • 确认权限:手动检查系统设置中的通知访问权限,确保Python解释器(或打包后的程序)已被授权。
  • 虚拟环境兼容:如果使用虚拟环境,需在当前环境内安装pywin32,避免路径或权限冲突。

内容的提问来源于stack exchange,提问作者Derpy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:15:30