📜  使用Python在蓝牙设备不在范围内时锁定计算机

📅  最后修改于: 2022-05-13 01:55:07.279000             🧑  作者: Mango

使用Python在蓝牙设备不在范围内时锁定计算机

Python提供了使用手机的蓝牙 UUID 地址作为任何系统的物理安全令牌的可访问性。这可以在名为PyBluez的Python包的帮助下完成。 Pybluez 可以安装在 Linux、Windows 和 macOS 中,并且与Python 2.7 和 3.x 兼容。

所需安装:

需要的模块是:

  • Pybluez:该模块允许使用系统蓝牙资源。要安装它,请在终端中键入以下命令。
    python3 -m pip install pybluez
  • 计划:计划库用于在每天的特定时间或一周中的特定日期安排任务。要安装它,请在终端中键入以下命令。
    python3 -m pip install schedule

方法:

PyBluez 是一个包含蓝牙资源的包,它允许Python开发人员轻松创建蓝牙应用程序。首先,必要的包已经被导入到程序中。 PyBluez导入为蓝牙,导入schedule用于调度程序,导入time包以处理与时间相关的任务,导入ctypes以使用其他语言的现有库,通过在Python中编写简单的包装器。以下是步骤。

  • 定义了一个函数job() ,其中您的手机的蓝牙地址在变量inputBdaddr中声明。 passed的变量被初始化为 False 以跟踪是否在发现的设备中找到了给定的蓝牙地址。要搜索附近可用的蓝牙设备,请使用bluetooth.discover_devices() 。结果保存在 try-except 块内的变量scan中。如果在scan中找到所需的设备,则passed的变量设置为 true,否则设置为 false。
  • 如果passed发现为假,意味着没有找到所需的设备,工作站被锁定。
  • 现在通过每 30 秒调用一次函数job()来安排上述步骤。 while 循环用于检查是否有任何计划任务正在等待运行。

下面是实现:

# Import required packages
import schedule
import time
import bluetooth
import ctypes
   
  
def job():
    # Find your bluetooth uuid in your
    # mobile and give set it in the 
    # variable
    inputBdaddr = "XX:XX:XX:XX:XX:XX"
       
    # Variable to find whether the
    # given bluetooth uuid is 
    # present in the discovered devices
    passed = False
       
    # Try to search for the nearby 
    # visible devices
    try:
        # Get the list of discovered devices
        scan = bluetooth.discover_devices()
           
        # Search for your bluetooth uuid 
        # in the scanned devices If found
        # set the variable to true else 
        # set the variable to false
        if inputBdaddr in scan:
            passed = True
              
        else:
            passed = False
              
    except:
        passed = False
           
    # When bluetooth device 
    # is not found, lock the
    # workstation
    if not passed:
        ctypes.windll.user32.LockWorkStation()
           
# Schedule the process 
# to run every 30 seconds
schedule.every(30).seconds.do(job)
   
# Check whether a scheduled 
# task is pending to run or not
while 1:
    schedule.run_pending()
    time.sleep(1)

限制:

由于 PyBluez 尚未积极开发,因此蓝牙检测是概率性的。 discover_devices() 有时无法检测到范围内的设备。在这种情况下,最好在放弃之前再试一两次。