最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python制作一個系統(tǒng)信息采集工具

 更新時間:2024年12月18日 10:04:48   作者:PieroPc  
這篇文章主要為大家詳細介紹了如何使用Python編寫一個系統(tǒng)信息采集工具,好為重裝系統(tǒng)做準備,感興趣的小伙伴可以跟隨小編一起學習一下

圖樣

原碼

# 系統(tǒng)信息采集工具
# 2024-12-16
# 作者:Hoye
# 版本:1.0
# 功能:采集系統(tǒng)信息并保存到文件
# 使用方法:
# 1. 運行程序
# 2. 點擊“采集系統(tǒng)信息”按鈕
# 3. 等待信息采集完成
# 4. 選擇保存位置
# 5. 點擊“保存信息”按鈕
 
 
import win32print
import socket
import subprocess
import win32com.shell.shell as shell
import win32com.shell.shellcon as shellcon
import wmi
from datetime import date
import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext, filedialog
from threading import Thread
import os
 
class SystemInfoApp:
    def __init__(self, root):
        self.root = root
        self.root.title("藍動力電腦-系統(tǒng)信息采集工具")
        self.root.geometry("800x600")
        
        # 設置整體樣式
        style = ttk.Style()
        style.configure('TButton', padding=5)
        style.configure('TLabel', padding=5)
        
        self.create_widgets()
        
    def create_widgets(self):
        # 創(chuàng)建主框架
        main_frame = ttk.Frame(self.root, padding="10")
        main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
        
        # 創(chuàng)建按鈕框架
        button_frame = ttk.Frame(main_frame)
        button_frame.grid(row=0, column=0, pady=5, sticky=tk.W)
        
        # 采集按鈕
        self.collect_btn = ttk.Button(
            button_frame, 
            text="采集系統(tǒng)信息", 
            command=self.start_collection
        )
        self.collect_btn.grid(row=0, column=0, padx=5)
        
        # 保存按鈕
        self.save_btn = ttk.Button(
            button_frame, 
            text="保存信息", 
            command=self.save_info
        )
        self.save_btn.grid(row=0, column=1, padx=5)
        
        # 進度條
        self.progress = ttk.Progressbar(
            main_frame, 
            orient=tk.HORIZONTAL, 
            length=300, 
            mode='determinate'
        )
        self.progress.grid(row=1, column=0, pady=5, sticky=tk.EW)
        
        # 信息顯示區(qū)域
        self.info_text = scrolledtext.ScrolledText(
            main_frame, 
            width=80, 
            height=30, 
            wrap=tk.WORD
        )
        self.info_text.grid(row=2, column=0, pady=5, sticky=(tk.W, tk.E, tk.N, tk.S))
        
        # 狀態(tài)標簽
        self.status_label = ttk.Label(main_frame, text="就緒")
        self.status_label.grid(row=3, column=0, pady=5, sticky=tk.W)
        
        # 設置列和行的權重
        self.root.columnconfigure(0, weight=1)
        self.root.rowconfigure(0, weight=1)
        main_frame.columnconfigure(0, weight=1)
        main_frame.rowconfigure(2, weight=1)
 
    def get_basic_info(self):
        """獲取基本系統(tǒng)信息"""
        info = []
        self.update_status("正在獲取基本系統(tǒng)信息...")
        computer_name = socket.gethostname()
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.connect(("8.8.8.8", 80))
            ip_address = s.getsockname()[0]
            s.close()
        except Exception as e:
            ip_address = "無法獲取IP地址"
        
        info.extend([
            "=== 基本系統(tǒng)信息 ===",
            f"計算機名: {computer_name}",
            f"IP 地址: {ip_address}",
            ""
        ])
        return info
 
    def get_printer_info(self):
        """獲取打印機信息"""
        self.update_status("正在獲取打印機信息...")
        try:
            printers = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)
            info = ["=== 打印機信息 ==="]
            info.extend([f"打印機名稱: {printer[2]}" for printer in printers])
            info.append("")
            return info
        except Exception:
            return ["=== 打印機信息 ===", "無法獲取打印機信息", ""]
 
    def get_hardware_info(self):
        """獲取硬件信息"""
        self.update_status("正在獲取硬件信息...")
        try:
            c = wmi.WMI()
            info = []
            
            # 計算機系統(tǒng)信息
            info.append("=== 計算機系統(tǒng)信息 ===")
            for computer in c.Win32_ComputerSystem():
                info.extend([
                    f"計算機名稱: {computer.Name}",
                    f"制造商: {computer.Manufacturer}",
                    f"型號: {computer.Model}",
                    ""
                ])
            
            # CPU信息
            info.append("=== CPU信息 ===")
            for processor in c.Win32_Processor():
                info.extend([
                    f"CPU型號: {processor.Name}",
                    f"CPU ID: {processor.ProcessorId}",
                    f"CPU核心數(shù): {processor.NumberOfCores}",
                    f"CPU線程數(shù): {processor.NumberOfLogicalProcessors}",
                    ""
                ])
            
            # 硬盤信息
            info.append("=== 硬盤信息 ===")
            for disk in c.Win32_DiskDrive():
                size_gb = round(int(disk.Size or 0) / (1024**3), 2)
                info.extend([
                    f"硬盤型號: {disk.Model}",
                    f"硬盤序列號: {disk.SerialNumber}",
                    f"硬盤容量: {size_gb}GB",
                    ""
                ])
 
            return info
        except Exception as e:
            return ["=== 硬件信息 ===", f"獲取硬件信息出錯: {str(e)}", ""]
 
    def get_folder_paths(self):
        """獲取重要文件夾路徑"""
        self.update_status("正在獲取系統(tǒng)文件夾路徑...")
        try:
            desktop = shell.SHGetFolderPath(0, shellcon.CSIDL_DESKTOP, 0, 0)
            documents = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, 0, 0)
            info = [
                "=== 系統(tǒng)文件夾路徑 ===",
                f"桌面位置: {desktop}",
                f"我的文檔位置: {documents}",
                ""
            ]
            return info
        except Exception as e:
            return ["=== 系統(tǒng)文件夾路徑 ===", "無法獲取文件夾路徑", str(e), ""]
 
    def get_network_shares(self):
        """獲取網(wǎng)絡共享信息"""
        self.update_status("正在獲取網(wǎng)絡共享信息...")
        try:
            output = subprocess.check_output("net share", shell=True, text=True)
            info = [
                "=== 網(wǎng)絡共享信息 ===",
                output,
                ""
            ]
            return info
        except subprocess.CalledProcessError as e:
            return ["=== 網(wǎng)絡共享信息 ===", f"獲取網(wǎng)絡共享信息出錯: {str(e)}", ""]
 
    def collect_info(self):
        """收集所有系統(tǒng)信息"""
        self.progress["value"] = 0
        self.info_text.delete(1.0, tk.END)
        
        all_info = []
        
        # 獲取基本信息
        all_info.extend(self.get_basic_info())
        self.progress["value"] = 20
        
        # 獲取文件夾路徑
        all_info.extend(self.get_folder_paths())
        self.progress["value"] = 35
        
        # 獲取打印機信息
        all_info.extend(self.get_printer_info())
        self.progress["value"] = 50
        
        # 獲取硬件信息
        all_info.extend(self.get_hardware_info())
        self.progress["value"] = 75
        
        # 獲取網(wǎng)絡共享信息
        all_info.extend(self.get_network_shares())
        self.progress["value"] = 100
        
        # 顯示信息
        self.info_text.insert(tk.END, "\n".join(all_info))
        self.update_status("信息采集完成")
 
    def start_collection(self):
        """在新線程中啟動信息收集"""
        self.collect_btn["state"] = "disabled"
        Thread(target=self.collect_info, daemon=True).start()
        self.collect_btn["state"] = "normal"
 
    def save_info(self):
        """保存信息到文件"""
        if not self.info_text.get(1.0, tk.END).strip():
            messagebox.showwarning("警告", "沒有可保存的信息,請先采集系統(tǒng)信息")
            return
        
        try:
            date_str = date.today().strftime("%Y-%m-%d")
            computer_name = socket.gethostname()
            
            # 默認文件名
            default_filename = f"{computer_name}_info_{date_str}.txt"
            
            # 創(chuàng)建保存選項按鈕框架
            save_window = tk.Toplevel(self.root)
            save_window.title("選擇保存位置")
            save_window.geometry("300x200")
            save_window.transient(self.root)  # 設置為主窗口的子窗口
            
            def save_to_network():
                try:
                    network_path = f"\\\\bpc\\temp_g\\{default_filename}"
                    with open(network_path, "w", encoding="utf-8") as f:
                        f.write(self.info_text.get(1.0, tk.END))
                    messagebox.showinfo("成功", f"信息已保存到網(wǎng)絡位置:\n{network_path}")
                    save_window.destroy()
                except Exception as e:
                    messagebox.showerror("錯誤", f"保存到網(wǎng)絡位置失?。篭n{str(e)}")
            
            def save_to_local():
                initial_dir = os.path.expanduser("~\\Documents")  # 默認打開我的文檔
                filename = filedialog.asksaveasfilename(
                    parent=save_window,
                    initialdir=initial_dir,
                    initialfile=default_filename,
                    defaultextension=".txt",
                    filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
                )
                if filename:
                    try:
                        with open(filename, "w", encoding="utf-8") as f:
                            f.write(self.info_text.get(1.0, tk.END))
                        messagebox.showinfo("成功", f"信息已保存到:\n{filename}")
                        save_window.destroy()
                    except Exception as e:
                        messagebox.showerror("錯誤", f"保存文件時出錯:\n{str(e)}")
            
            def save_to_d_drive():
                try:
                    # 確保D盤存在
                    if not os.path.exists("D:\\"):
                        messagebox.showerror("錯誤", "未找到D盤")
                        return
                    
                    # 在D盤根目錄創(chuàng)建文件
                    d_drive_path = f"D:\\{default_filename}"
                    with open(d_drive_path, "w", encoding="utf-8") as f:
                        f.write(self.info_text.get(1.0, tk.END))
                    messagebox.showinfo("成功", f"信息已保存到:\n{d_drive_path}")
                    save_window.destroy()
                except Exception as e:
                    messagebox.showerror("錯誤", f"保存到D盤失敗:\n{str(e)}")
            
            # 創(chuàng)建保存選項按鈕
            ttk.Label(
                save_window, 
                text="請選擇保存位置:", 
                padding=10
            ).pack()
            
            ttk.Button(
                save_window,
                text="保存到網(wǎng)絡位置(\\\\bpc\\temp_g)",
                command=save_to_network,
                padding=5
            ).pack(pady=5, padx=10, fill=tk.X)
            
            ttk.Button(
                save_window,
                text="保存到D盤",
                command=save_to_d_drive,
                padding=5
            ).pack(pady=5, padx=10, fill=tk.X)
            
            ttk.Button(
                save_window,
                text="保存到本地位置",
                command=save_to_local,
                padding=5
            ).pack(pady=5, padx=10, fill=tk.X)
            
            # 居中顯示窗口
            save_window.update_idletasks()
            width = save_window.winfo_width()
            height = save_window.winfo_height()
            x = (save_window.winfo_screenwidth() // 2) - (width // 2)
            y = (save_window.winfo_screenheight() // 2) - (height // 2)
            save_window.geometry(f'{width}x{height}+{x}+{y}')
            
            # 模態(tài)對話框
            save_window.grab_set()
            save_window.focus_set()
            
        except Exception as e:
            messagebox.showerror("錯誤", f"創(chuàng)建保存對話框時出錯:\n{str(e)}")
 
    def update_status(self, message):
        """更新狀態(tài)欄消息"""
        self.status_label["text"] = message
        self.root.update()
 
def main():
    root = tk.Tk()
    app = SystemInfoApp(root)
    root.mainloop()
 
if __name__ == "__main__":
    main()

打包 exe

pip install pyinstaller

version_info.txt

# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
  ffi=FixedFileInfo(
    # filevers和prodvers應該始終是包含4個項的元組
    filevers=(1, 0, 0, 0),
    prodvers=(1, 0, 0, 0),
    # 包含一個位掩碼,指定文件的有效信息
    mask=0x3f,
    # 包含一個位掩碼,指定布爾屬性的文件
    flags=0x0,
    # 操作系統(tǒng)
    OS=0x40004,
    # 文件類型
    fileType=0x1,
    # 文件子類型
    subtype=0x0,
    # 創(chuàng)建日期
    date=(0, 0)
    ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        '080404b0',
        [StringStruct('CompanyName', '藍動力電腦'),
        StringStruct('FileDescription', '系統(tǒng)信息采集工具'),
        StringStruct('FileVersion', '1.0.0'),
        StringStruct('InternalName', 'SystemInfoCollector'),
        StringStruct('LegalCopyright', 'Copyright (C) 2024 Hoye'),
        StringStruct('OriginalFilename', 'SystemInfoCollector.exe'),
        StringStruct('ProductName', '系統(tǒng)信息采集工具'),
        StringStruct('ProductVersion', '1.0.0')])
      ]), 
    VarFileInfo([VarStruct('Translation', [2052, 1200])])
    ]
) 

build.py

import PyInstaller.__main__
import os
 
# 確保當前工作目錄正確
current_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(current_dir)
 
PyInstaller.__main__.run([
    '7_系統(tǒng)信息采集工具.py',
    '--name=SystemInfoCollector',
    '--windowed',
    # '--icon=app.ico',  # 如果您有圖標文件的話
    '--version-file=version_info.txt',
    '--clean',
    '--noconfirm',
    '--uac-admin',  # 添加管理員權限
    '--onefile',    # 打包成單一文件
    f'--workpath={os.path.join(current_dir, "build")}',
    f'--distpath={os.path.join(current_dir, "dist")}',
    f'--specpath={current_dir}'
]) 

python build.py

到此這篇關于Python制作一個系統(tǒng)信息采集工具的文章就介紹到這了,更多相關Python系統(tǒng)信息采集內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python實現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫的方法示例

    Python實現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫的方法示例

    這篇文章主要介紹了Python實現(xiàn)讀取SQLServer數(shù)據(jù)并插入到MongoDB數(shù)據(jù)庫的方法,涉及Python同時進行SQLServer與MongoDB數(shù)據(jù)庫的連接、查詢、讀取、寫入等相關操作實現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06
  • Python數(shù)據(jù)清洗工具之Numpy的基本操作

    Python數(shù)據(jù)清洗工具之Numpy的基本操作

    Numpy的操作對象是一個ndarray,所以在使用這個庫進行計算的時候需要將數(shù)據(jù)進行轉化,這篇文章主要介紹了Python數(shù)據(jù)清洗工具之Numpy的基本操作,需要的朋友可以參考下
    2021-04-04
  • 使用jupyter notebook直接打開.md格式的文件

    使用jupyter notebook直接打開.md格式的文件

    這篇文章主要介紹了使用jupyter notebook直接打開.md格式的文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python導入其它py文件的實現(xiàn)步驟

    python導入其它py文件的實現(xiàn)步驟

    本文主要介紹了python導入其它py文件的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • python中super().__init__()的用法

    python中super().__init__()的用法

    python里的super().__init__()有什么作用?很多同學沒有弄清楚。super()用來調用父類(基類)的方法,__init__()是類的構造方法,感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • python動態(tài)規(guī)劃算法實例詳解

    python動態(tài)規(guī)劃算法實例詳解

    在本篇文章里小編給大家整理了關于python動態(tài)規(guī)劃算法實例內容,有需要的朋友們可以參考學習下。
    2020-11-11
  • python實現(xiàn)批量命名照片

    python實現(xiàn)批量命名照片

    這篇文章主要為大家詳細介紹了python實現(xiàn)批量命名照片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Python中用psycopg2模塊操作PostgreSQL方法

    Python中用psycopg2模塊操作PostgreSQL方法

    python可以操作多種數(shù)據(jù)庫,本篇文章給大家介紹了用psycopg2模塊操作PostgreSQL方法,一起來學習下。
    2017-11-11
  • python多線程并發(fā)測試過程

    python多線程并發(fā)測試過程

    這篇文章主要介紹了python多線程并發(fā)測試過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • python動態(tài)加載技術解析

    python動態(tài)加載技術解析

    這篇文章主要介紹了python動態(tài)加載技術解析,說簡單點就是,如果開發(fā)者發(fā)現(xiàn)自己的代碼有bug,那么他可以在不關閉原來代碼的基礎之上,動態(tài)替換模塊替換方法一般用reload來完成,需要的朋友可以參考下
    2023-07-07

最新評論

西乌珠穆沁旗| 凤翔县| 安龙县| 广丰县| 肃北| 尼木县| 贵溪市| 惠来县| 郑州市| 都江堰市| 丰台区| 南城县| 报价| 西乌| 车险| 曲阳县| 交城县| 绍兴市| 龙岩市| 正蓝旗| 专栏| 那曲县| 惠州市| 广安市| 凭祥市| 湟源县| 浠水县| 洞口县| 延津县| 阿拉善左旗| 鄂温| 桐柏县| 金湖县| 云阳县| 石泉县| 井陉县| 商丘市| 始兴县| 施甸县| 图片| 通州区|