返回

如何在 Windows 上拦截 Toast 通知并提取短信验证码?

windows

在 Windows 上拦截 Toast 通知以提取短信验证码

在今天的互联时代,我们经常需要在多个设备和应用程序之间交换信息。然而,当这些信息以 Windows Toast 通知的形式出现时,提取和复制它们可能是一项挑战。本文将探讨如何使用 Python 和 Visual Studio 在 Windows 上拦截 Toast 通知,从中提取短信验证码,并将其粘贴到所需位置。

拦截 Toast 通知

拦截 Windows Toast 通知的第一步是使用 pywin32 库来创建 Toast 侦听器。此侦听器将监听系统中所有 Toast 通知的更改。

定义通知处理程序

一旦创建了侦听器,就需要定义一个处理程序函数来响应 Toast 通知的更改。此函数将从 Toast 通知中提取短信验证码,并将其复制到剪贴板。

添加处理程序

将处理程序函数添加到侦听器后,它将在系统收到 Toast 通知时被触发。侦听器会将 Toast 通知的对象传递给处理程序函数,使处理程序函数可以从中提取所需的信息。

提取短信验证码

在处理程序函数中,需要从 Toast 通知中提取短信验证码。此验证码通常包含在 Messaging 应用程序发送的通知中。处理程序函数应使用文本分析技术从通知中提取验证码。

复制到剪贴板

提取短信验证码后,需要将其复制到剪贴板。这可以通过使用 Python 的 pyperclip 库来实现。pyperclip 库提供了复制和粘贴文本到剪贴板的功能。

使用验证码

验证码复制到剪贴板后,就可以将其粘贴到所需位置。例如,你可以将其粘贴到 Duo Push 文本框中,以完成登录过程。

示例代码

以下是一个示例 Python 代码,演示如何使用 pywin32pyperclip 拦截 Toast 通知并提取短信验证码:

import win32com.client
import pyperclip

listener = win32com.client.Dispatch("Windows.UI.Notifications.Management.UserNotificationListener")
listener.RequestAccessAsync().GetResults()

def handler(listener, event):
    notification = listener.GetNotification(event.NotificationId)
    if notification.AppInfo.DisplayInfo.DisplayName == "Messaging":
        text_elements = notification.Visual.GetBinding(win32com.client.constants.KnownNotificationBindings.ToastGeneric).GetTextElements()
        message_text = text_elements[1].Text
        if "SMS passcode (will expire in 10 minutes:" in message_text:
            passcode = message_text.split(":")[1].strip()
            pyperclip.copy(passcode)
            print("SMS passcode copied to clipboard.")
            listener.RemoveNotificationChanged(handler)

listener.AddNotificationChanged(handler)
listener.Start()
input("Press Enter to quit...")

运行此代码后,你应该能够拦截 Windows Toast 通知,提取短信验证码,并将其复制到剪贴板。

常见问题解答

1. 我收到 "Access to notifications is not allowed" 错误。

这表明用户尚未授予对通知的访问权限。你可以通过转到 "设置" -> "系统" -> "通知和操作" 并启用 "允许应用程序访问通知" 来授予访问权限。

2. 处理程序函数未被触发。

确保已将处理程序函数添加到侦听器。你还可以使用 print 语句对处理程序函数进行调试,以验证其是否被调用。

3. 无法从通知中提取短信验证码。

检查通知的格式是否符合预期。短信验证码通常包含在 Messaging 应用程序发送的通知中。

4. 无法将短信验证码复制到剪贴板。

确保已正确安装和导入 pyperclip 库。你可以尝试重新安装库或使用其他复制和粘贴库。

5. 无法在所需位置粘贴短信验证码。

验证你要粘贴的位置是否允许粘贴操作。你可能需要检查应用程序的设置或联系应用程序开发人员以获得支持。