使用Python创建LNK文件选择器并导出配置文件

news2024/11/14 21:36:21

在这篇博客中,我将介绍如何使用Python的wxPython库开发一个GUI应用程序,该应用程序可以选择文件夹中的.lnk(快捷方式)文件,并将选中的文件导出为特定格式的buttons.ini配置文件。这个工具非常适合用来快速生成配置文件,其中包含用户选择的快捷方式,并为每个快捷方式设置特定的属性。
C:\pythoncode\new\lnkTOConfig.py

全部代码

import wx
import os
import win32com.client

class LnkFileSelector(wx.Frame):
    def __init__(self, *args, **kw):
        super(LnkFileSelector, self).__init__(*args, **kw)

        self.InitUI()
        self.lnk_files = []
        self.selected_files = []

    def InitUI(self):
        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        self.btn_select_folder = wx.Button(panel, label="Select Folder")
        self.btn_select_folder.Bind(wx.EVT_BUTTON, self.OnSelectFolder)
        hbox1.Add(self.btn_select_folder, flag=wx.LEFT, border=10)
        vbox.Add(hbox1, flag=wx.EXPAND | wx.TOP | wx.BOTTOM, border=10)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        self.listbox1 = wx.ListBox(panel)
        self.listbox1.Bind(wx.EVT_LISTBOX_DCLICK, self.OnItemDoubleClick)
        hbox2.Add(self.listbox1, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)

        self.listbox2 = wx.ListBox(panel)
        hbox2.Add(self.listbox2, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)

        vbox.Add(hbox2, proportion=1, flag=wx.EXPAND)

        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        self.btn_export = wx.Button(panel, label="Export to INI")
        self.btn_export.Bind(wx.EVT_BUTTON, self.OnExport)
        hbox3.Add(self.btn_export, flag=wx.LEFT, border=10)

        vbox.Add(hbox3, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        panel.SetSizer(vbox)
        self.SetTitle('LNK File Selector')
        self.Centre()

    def OnSelectFolder(self, event):
        with wx.DirDialog(self, "Choose a folder", style=wx.DD_DEFAULT_STYLE) as dirDialog:
            if dirDialog.ShowModal() == wx.ID_CANCEL:
                return

            folder_path = dirDialog.GetPath()
            self.lnk_files = [f for f in os.listdir(folder_path) if f.endswith('.lnk')]
            self.lnk_files = [os.path.join(folder_path, f) for f in self.lnk_files]
            self.listbox1.Set([os.path.basename(f) for f in self.lnk_files])

    def OnItemDoubleClick(self, event):
        selection = self.listbox1.GetSelection()
        selected_file = self.lnk_files[selection]
        if selected_file not in self.selected_files:
            self.selected_files.append(selected_file)
            self.listbox2.Append(os.path.basename(selected_file))

    def OnExport(self, event):
        with wx.FileDialog(self, "Save INI file", wildcard="INI files (*.ini)|*.ini",
                           style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:
            if fileDialog.ShowModal() == wx.ID_CANCEL:
                return

            path = fileDialog.GetPath()
            self.ExportToIni(path)

    def ExportToIni(self, path):
        shell = win32com.client.Dispatch("WScript.Shell")

        with open(path, 'w') as file:
            for idx, lnk_path in enumerate(self.selected_files, start=1):
                shortcut = shell.CreateShortCut(lnk_path)
                target_path = shortcut.Targetpath
                caption = os.path.splitext(os.path.basename(lnk_path))[0]

                file.write(f"[Button{idx}]\n")
                file.write(f"caption = {caption}\n")
                file.write(f"link = {target_path}\n")
                file.write("color = clGreen\n")
                file.write("width = 150\n")
                file.write("height = 70\n\n")
        
        wx.MessageBox(f"Exported {len(self.selected_files)} items to {path}", "Export Successful", wx.OK | wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App(False)
    frame = LnkFileSelector(None)
    frame.Show(True)
    app.MainLoop()

项目背景

在日常的Windows操作中,.lnk文件(快捷方式)经常被用来快速访问应用程序或文件。创建一个工具,让用户能够选择这些快捷方式,并将它们配置到一个INI文件中,可以大大提高管理和组织这些快捷方式的效率。

这个项目的目标是:

  1. 让用户选择一个文件夹并列出所有 .lnk 文件。
  2. 让用户从列表中选择想要配置的快捷方式。
  3. 生成一个包含选中快捷方式的配置文件,配置文件的格式为特定的INI格式。

开发环境设置

首先,确保你的Python环境中安装了以下必要的库:

  • wxPython:用于创建图形用户界面。
  • pywin32:用于解析快捷方式文件,获取其目标路径。

你可以通过以下命令安装这些库:

pip install wxPython pywin32

应用程序的主要功能

这个应用程序主要分为以下几个功能模块:

  1. 选择文件夹并列出 .lnk 文件
    用户点击“选择文件夹”按钮后,可以选择一个文件夹,程序会自动列出该文件夹中的所有 .lnk 文件。

  2. 双击添加 .lnk 文件到配置列表
    用户可以双击 .lnk 文件,将其添加到待配置的列表中。

  3. 导出配置文件
    用户点击“导出”按钮后,程序会将选中的 .lnk 文件导出为特定格式的 buttons.ini 文件。文件中包含每个快捷方式的名称、路径以及配置属性。

代码实现

以下是实现上述功能的完整代码:

import wx
import os
import win32com.client

class LnkFileSelector(wx.Frame):
    def __init__(self, *args, **kw):
        super(LnkFileSelector, self).__init__(*args, **kw)

        self.InitUI()
        self.lnk_files = []
        self.selected_files = []

    def InitUI(self):
        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        self.btn_select_folder = wx.Button(panel, label="Select Folder")
        self.btn_select_folder.Bind(wx.EVT_BUTTON, self.OnSelectFolder)
        hbox1.Add(self.btn_select_folder, flag=wx.LEFT, border=10)
        vbox.Add(hbox1, flag=wx.EXPAND | wx.TOP | wx.BOTTOM, border=10)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        self.listbox1 = wx.ListBox(panel)
        self.listbox1.Bind(wx.EVT_LISTBOX_DCLICK, self.OnItemDoubleClick)
        hbox2.Add(self.listbox1, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)

        self.listbox2 = wx.ListBox(panel)
        hbox2.Add(self.listbox2, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)

        vbox.Add(hbox2, proportion=1, flag=wx.EXPAND)

        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        self.btn_export = wx.Button(panel, label="Export to INI")
        self.btn_export.Bind(wx.EVT_BUTTON, self.OnExport)
        hbox3.Add(self.btn_export, flag=wx.LEFT, border=10)

        vbox.Add(hbox3, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        panel.SetSizer(vbox)
        self.SetTitle('LNK File Selector')
        self.Centre()

    def OnSelectFolder(self, event):
        with wx.DirDialog(self, "Choose a folder", style=wx.DD_DEFAULT_STYLE) as dirDialog:
            if dirDialog.ShowModal() == wx.ID_CANCEL:
                return

            folder_path = dirDialog.GetPath()
            self.lnk_files = [f for f in os.listdir(folder_path) if f.endswith('.lnk')]
            self.lnk_files = [os.path.join(folder_path, f) for f in self.lnk_files]
            self.listbox1.Set([os.path.basename(f) for f in self.lnk_files])

    def OnItemDoubleClick(self, event):
        selection = self.listbox1.GetSelection()
        selected_file = self.lnk_files[selection]
        if selected_file not in self.selected_files:
            self.selected_files.append(selected_file)
            self.listbox2.Append(os.path.basename(selected_file))

    def OnExport(self, event):
        with wx.FileDialog(self, "Save INI file", wildcard="INI files (*.ini)|*.ini",
                           style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:
            if fileDialog.ShowModal() == wx.ID_CANCEL:
                return

            path = fileDialog.GetPath()
            self.ExportToIni(path)

    def ExportToIni(self, path):
        shell = win32com.client.Dispatch("WScript.Shell")

        with open(path, 'w') as file:
            for idx, lnk_path in enumerate(self.selected_files, start=1):
                shortcut = shell.CreateShortCut(lnk_path)
                target_path = shortcut.Targetpath
                caption = os.path.splitext(os.path.basename(lnk_path))[0]

                file.write(f"[Button{idx}]\n")
                file.write(f"caption = {caption}\n")
                file.write(f"link = {target_path}\n")
                file.write("color = clGreen\n")
                file.write("width = 150\n")
                file.write("height = 70\n\n")
        
        wx.MessageBox(f"Exported {len(self.selected_files)} items to {path}", "Export Successful", wx.OK | wx.ICON_INFORMATION)

if __name__ == '__main__':
    app = wx.App(False)
    frame = LnkFileSelector(None)
    frame.Show(True)
    app.MainLoop()

详细功能说明

  1. 用户界面设计

    • 我们使用 wxPython 来创建一个简洁的用户界面,包含两个 ListBox,一个用于显示文件夹中的 .lnk 文件,另一个用于显示用户选择的文件。
    • “选择文件夹”按钮用于让用户选择文件夹,之后列出其中的 .lnk 文件。
    • “导出”按钮用于将用户选择的文件导出为 buttons.ini 文件。
  2. 解析 .lnk 文件

    • 使用 win32com.client.Dispatch("WScript.Shell") 创建快捷方式对象,并通过 CreateShortCut 方法获取 .lnk 文件的目标路径。
    • 通过 os.path.basename 提取 .lnk 文件名,并用作按钮的 caption
  3. 导出到 INI 文件

    • ExportToIni 方法生成 buttons.ini 文件。文件内容按照 [Button1] 的格式组织,每个按钮配置包括 caption(文件名)、link(目标路径)、colorwidthheight 等属性。

最终效果

运行程序后,用户可以轻松地选择并配置 .lnk 文件,并将这些配置导出为 buttons.ini 文件。这个文件可以用于其他应用程序进行按钮布局或快捷方式配置。

通过这个项目,你不仅可以学到 wxPython 界面开发,还可以了解如何处理和解析Windows快捷方式文件。如果你有类似的需求或项目,希望这个工具能为你提供帮助!

结果如下

在这里插入图片描述
在这里插入图片描述

总结

在这篇博客中,我们探讨了如何利用 wxPythonwin32com.client 库创建一个简单但功能强大的工具。通过这个工具,用户可以选择、配置 .lnk 文件,并导出为特定格式的 INI 文件。这不仅提高了配置文件管理的效率,也展示了 Python 在桌面应用开发中的强大功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Java调用Apache commons-text求解字符串相似性实战

目录 前言 一、字符串距离的几种计算方法 1、Levenshtein 距离 2、Overlap Coefficient计算 3、Q-gram Matching 4、余弦相似性计算 二、基于余弦相似性的基地名称对比 1、加载百科中的基地信息列表 2、设置忽略词列表 3、将数据库地名和Excel进行对比 三、总结 前言…

c语言音频.wav读写示例

1 .wav格式说明 一. RIFF 概念 在 Windows 环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为"资源互换文件格式"(Resources lnterchange File Format),简称 RIFF。例如声音的 WAV 文件、视频的 AV1 文件等等均…

EmguCV学习笔记 VB.Net 2.4 Image类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址:VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

【图解秒杀系列】秒杀技术点——秒杀按钮点亮、削峰

【图解秒杀系列】秒杀技术点——秒杀按钮点亮、削峰 秒杀按钮点亮涉及的问题以及解决办法处理流程 削峰答题 & 验证码具体流程 排队 秒杀按钮点亮 在秒杀场景中,秒杀商品页面是需要处理按钮点亮的逻辑的。在秒杀未开始前,按钮置灰,不可点…

POSIX信号量semaphore实现线程同步

POSIX标准定义了信号量接口如下&#xff0c;常常用于线程间同步。 #include <semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem); int sem_post(sem_t *sem); int sem_wait(sem_t *sem); sem_init()在sem指向的地址…

微信小程序反编译工具

目录 介绍 工程结构还原 微信开发者工具运行 如何查看当前运行版本? 开启小程序F12 重新打包运行 效果示例 安装 用法 参数说明 获取微信小程序AppID 文件夹名即为AppID 下载地址 介绍 纯Golang实现,一个用于自动化反编译微信小程序的工具,小程序安全利器, 自…

【杂谈】-8个常用的Python图像操作库

8个常用的Python图像操作库 文章目录 8个常用的Python图像操作库1、OpenCV2、Pillow&#xff08;PIL&#xff09;3、Scikit Image4、Numpy5、SciPy6、Mahotas7、SimpleITK8、Matplotlib 在当今世界&#xff0c;数据在每个行业垂直领域中都发挥着至关重要的作用。图像可以是提取…

Redis 操作的原子性及其保证机制

Redis 操作的原子性及其保证机制 1、单命令的原子性2、事务的原子性3、并发操作的考虑4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Redis 的操作之所以是原子性的&#xff0c;主要得益于其单线程的执行模型。这种模型确保了每个命…

5.9.8 最优化控制初探——PID参数优化

总目录&#xff1a;http://t.csdnimg.cn/YDe8m 5.9.8 最优化控制初探——PID参数优化 之前在“A_2_PID控制转速例程”例程中&#xff0c;PID参数是手动调节的。然而在已经获得系统完整数学模型的情况下&#xff0c;我们可以使用效率更高的方法&#xff0c;即最优化控制。先来看…

Nios II新建项目

1.Nios II Application and BSP form Template BSP:board support package&#xff08;板级支持包&#xff09; 2.Nios II Sotware Examples SOPC Information File name:选择项目文件夹下的 .sopcinfo 文件 Project name:自定义名称 Project location:Use default locatio…

删除镜像报容器依赖错误

1、删除镜像报容器依赖错误 出现这个错误的原因是因为5303b5323a4c容器使用了此镜像。解决&#xff1a;先停止容器、删除容器、之后再镜像即可。 2、查看镜像对应的容器 # docker ps -a | grep 611a37aa5ffc 3、先停止容器 # docker stop 5303b5323a4c 4、删除容器 # do…

Spring Boot: 2.7.x 至 2.7.18 及更旧的版本,漏洞说明

本文提供的修复指南将帮助开发者有效规避 CVE-2024-38808 和 CVE-2024-38809 的风险。如果你正在使用老版本的 Spring Boot&#xff0c;请尽快参考本文进行修复与升级。 此漏洞来源于spring官网&#xff1a;https://spring.io/blog/2024/08/14/spring-framework-releases-fixe…

flink车联网项目前篇:业务实现1(第67天)

系列文章目录 业务实现 3.1 创建catalog 3.1.1 vvp 3.1.2 mysqlcdc 3.1.2.1 使用限制 3.1.2.2 配置MySQL Catalog 3.1.3 xxxxpm 3.1.3.1 下载Paimon插件 3.1.3.2 在MaxCompute项目中上传Paimon插件 3.1.3.3 创建自定义Catalog类型 3.1.3.5 配置catalog 3.1.4 xxxxx 3.1.4.1 背…

Linux设置yum源为阿里云镜像源

一、验证网络是否可以连接阿里云镜像 #验证网络是否可以连接阿里云镜像 ping mirrors.aliyun.com如果ping不通&#xff0c;则找一台可以连接外网的电脑&#xff0c;ping一下mirrors.aliyun.com&#xff0c;找到mirrors.aliyun.com对应的ip。 二、 手动配置 #删除原yum源 rm -…

微信小程序免费《短视频去水印》

分享一个uniapp开发的微信小程序免费《短视频去水印》小程序 <template><view class"content"><view class"area-wrap"><textarea name"" v-model"state.content" maxlength"800" id"" cols…

接口自动化测试怎么做?该怎么学习

一. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…

《黑神话:悟空》媒体评分解禁 M站均分82

《黑神话&#xff1a;悟空》媒体评分现已解禁&#xff0c;截止发稿时&#xff0c;M站共有43家媒体评测&#xff0c;均分为82分。 部分媒体评测&#xff1a; God is a Geek 100&#xff1a; 毫无疑问&#xff0c;《黑神话&#xff1a;悟空》是今年最好的动作游戏之一&#xff…

linux系统安装mysql服务

linux系统安装mysql服务 1.下载安装包2.下载压缩文件解压安装3. 安装完启动服务4.查看安装密码5.使用上述密码登录6.修改密码7.创建一个root可以在任意主机远程连接数据库8.远程登录成功 1.下载安装包 https://downloads.mysql.com/archives/community/ mysql下载地址 2.下载…

【AI安防】YOLOv8 + OpenVINO2023 + QT5 电子围栏预警系统

引言 电子围栏是一种利用无线通信技术和地理信息系统实现的虚拟边界&#xff0c;用于监控和控制被监控对象的位置。它可以帮助我们实现对特定区域内的自定义对象进行实时检测、定位与跟踪。本文介绍了一种基于YOLOv8 OpenVINO2023 QT5 联合打造的实时高效、多线程、自定义对…

Keepalived简介以及常见用途

一、Keepalived 简介 Keepalived 是一个高可用性&#xff08;HA&#xff09;解决方案&#xff0c;主要用于实现 Linux 系统的负载均衡和故障转移。它最初设计用于与 LVS&#xff08;Linux Virtual Server&#xff09;一起使用&#xff0c;但也可以独立使用&#xff0c;主要功能…