Python获取电脑的历史WiFi

**

效果展示

**

在这里插入图片描述

**

代码介绍

**

1. 库和模块
subprocess:用于执行系统命令(如获取 WiFi 配置),捕获命令的输出。

tkinter:Python 的标准 GUI 库,用于创建窗口和界面组件。

Text:tkinter 中的文本框,用于显示 WiFi 网络和密码。

messagebox:tkinter 的对话框模块,用于显示消息框(如成功、警告和错误信息)。

chardet:用于检测字节流的编码,确保正确解码命令输出。

threading:用于创建线程,避免在加载 WiFi 列表时阻塞主界面。

pandas:用于处理和导出数据到 Excel 格式。

2. 功能实现
获取 WiFi 配置:

get_wifi_profiles():使用 subprocess.run 执行 netsh wlan show profiles 命令获取所有 WiFi 配置文件。

get_wifi_password(profile):获取特定 WiFi 配置文件的密码。

显示 WiFi 列表:

show_wifi_profiles():调用上面的两个函数,获取 WiFi 名称和密码,并在文本框中显示。

多线程处理:

threaded_show_wifi_profiles():使用线程运行 show_wifi_profiles(),避免界面在加载过程中无响应。

导出数据:

export_to_excel():使用 pandas 将 WiFi 数据导出为 Excel 文件。

3. 图形界面组件
主窗口 (root):

设置窗口标题、大小和图标。

按钮:

btn_show:点击后显示历史 WiFi 和密码。

btn_export:点击后导出 WiFi 列表到 Excel 文件。

文本框 (text_box):

显示 WiFi 名称和密码,使用不同的标签格式化文本颜色。

标签:

progress_label:显示加载进度。

wifi_count_label:显示已连接的 WiFi 数量。

4. 样式设置
文本样式:

通过 tag_configure 为 WiFi 名称和密码设置不同的颜色和字体样式。

5. 运行主循环
root.mainloop():启动 tkinter 的事件循环,保持窗口运行并响应用户操作。

**

部分源码

**

##完整源码gongzhonghao:PandaYY回复1018
import subprocess
import tkinter as tk
from tkinter import Text, messagebox
import chardet
import threading
import pandas as pd

def get_wifi_profiles():
    try:
        result = subprocess.run(['netsh', 'wlan', 'show', 'profiles'], capture_output=True)
        encoding = chardet.detect(result.stdout)['encoding']
        output = result.stdout.decode(encoding, errors='ignore')

        profiles = [line.split(":")[1].strip() for line in output.splitlines() if "所有用户配置文件" in line]
        return profiles
    except Exception as e:
        print(f"Error: {e}")
        return []

def get_wifi_password(profile):
    try:
        result = subprocess.run(['netsh', 'wlan', 'show', 'profile', profile, 'key=clear'], capture_output=True)
        encoding = chardet.detect(result.stdout)['encoding']
        output = result.stdout.decode(encoding, errors='ignore')

        for line in output.splitlines():
            if "关键内容" in line:
                return line.split(":")[1].strip()
        return "没有密码"
    except Exception as e:
        print(f"Error: {e}")
        return "错误"

def show_wifi_profiles():
    profiles = get_wifi_profiles()
    total_profiles = len(profiles)
    text_box.delete(1.0, tk.END)

    if total_profiles > 0:
        max_name_length = 30
        wifi_data = []

        for index, profile in enumerate(profiles):
            password = get_wifi_password(profile)

            # 确保名称占据固定宽度并靠左对齐
            formatted_profile = f"{profile:<{max_name_length}}"
            text_box.insert(tk.END, formatted_profile, 'profile')

            # 插入密码并对齐
            text_box.insert(tk.END, f"{password}\n", 'password')

            # 更新WiFi数据
            wifi_data.append({'WiFi名称': profile, '密码': password})

            # 更新进度
            progress = (index + 1) / total_profiles * 100
            progress_label.config(text=f"加载中... {progress:.0f}%")

        text_box.insert(tk.END, "\n")
    else:
        text_box.insert(tk.END, "未找到任何网络。\n")

    progress_label.config(text="加载完成")
    wifi_count_label.config(text=f"已连接过的WiFi数量: {total_profiles}")
    return wifi_data

def threaded_show_wifi_profiles():
    progress_label.config(text="加载中... 0%")
    wifi_count_label.config(text="")
    show_wifi_profiles()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值