Windows 快速启动器
在日常工作和学习中,我们经常需要快速访问某些功能或资源,例如打开常用网站、启动应用程序或执行特定命令。Linux 用户可以通过 alias 快速实现这些操作,但在 Windows 上缺乏类似的原生支持。本文将介绍如何使用 Python 开发一个 隐藏式文本输入框程序,模拟 Linux 的 alias 功能,实现快速启动和访问。
功能概述
该程序的核心功能如下:
隐藏式界面:默认情况下,程序界面隐藏,按下热键后显示。
快速输入:通过键盘输入关键字,按下回车键后执行相应操作。
自定义映射:通过配置文件(如
store.txt)定义关键字与操作的映射关系。快速打开网站:输入关键字后,自动打开对应的 URL。
打开文件夹:输入关键字后,打开指定的文件夹。
启动应用程序:输入关键字后,启动指定的应用程序。
执行系统命令:输入关键字后,执行系统命令(如打开服务管理器)。
单实例运行:确保程序只运行一个实例,避免重复启动。
实现原理
1. 隐藏式界面
使用 tkinter 创建一个无标题栏的文本输入框界面,默认隐藏。通过全局热键(如 Alt + Win + Z)显示界面,并将焦点设置到输入框。
2. 关键字映射
通过读取配置文件(如 store.txt),将关键字与操作(如 URL、文件夹路径、应用程序路径或系统命令)关联起来。例如:
google https://www.google.com u
python https://www.python.org u
ubunt D:\ubunt f
services %SystemRoot%\system32\services.msc o
notepad C:\Windows\System32\notepad.exe o
3. 快速执行
输入关键字后,按下回车键,程序会根据配置文件执行相应操作(如打开浏览器访问 URL、打开文件夹、启动应用程序或执行系统命令)。
4. 单实例运行
使用 psutil 检查程序是否已经运行,避免重复启动。
代码实现
以下是完整的 Python 代码:
import tkinter as tk
import keyboard
import ctypes
import sys
import os
import psutil
import webbrowser
import subprocess
import time class StoreItem:
def __init__(self, keyword, content, type_):
self.keyword = keyword
self.content = content
self.type_ = type_ class Store:
def __init__(self, file_path):
self.file_path = file_path
self.items = {}
self.last_modified = 0
self.load() def load(self):
if not os.path.exists(self.file_path):
print(f"错误:未找到文件 {self.file_path},请确保 store.txt 和脚本在同一目录下。")
return self.last_modified = os.path.getmtime(self.file_path)
self.items.clear() with open(self.file_path, "r", encoding="utf-8") as file:
for line in file:
columns = line.strip().split()
if len(columns) == 3:
keyword, content, type_ = columns
self.items[keyword] = StoreItem(keyword, content, type_) def get_item(self, keyword):
if os.path.getmtime(self.file_path) > self.last_modified:
self.load()
return self.items.get(keyword) def is_already_running():
current_pid = os.getpid()
for proc in psutil.process_iter(['pid', 'name']):
try:
if proc.info['name'] == os.path.basename(sys.argv[0]) and proc.info['pid'] != current_pid:
return True
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return False if is_already_running():
print("程序已经在运行中,退出当前实例。")
sys.exit(0) user32 = ctypes.windll.user32
imm32 = ctypes.windll.imm32 def show_window():
if not root.winfo_viewable():
root.deiconify()
root.lift()
root.focus_force()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
window_width = root.winfo_reqwidth()
window_height = root.winfo_reqheight()
x = screen_width - window_width - 20
y = 20
root.geometry(f"+{x}+{y}")
text_entry.focus_set()
text_entry.delete(0, tk.END)
switch_to_english() def hide_window():
root.withdraw() def on_enter(event):
input_text = text_entry.get()
if input_text.strip():
ontext(input_text)
text_entry.delete(0, tk.END)
hide_window() def handle_action(item):
if item.type_ == "u":
webbrowser.open(item.content)
print(f"已打开 URL: {item.content}")
elif item.type_ == "f":
os.startfile(item.content)
print(f"已打开文件夹: {item.content}")
elif item.type_ == "o":
subprocess.run(item.content, shell=True)
print(f"已执行命令: {item.content}") def ontext(key):
item = store.get_item(key)
if item:
handle_action(item)
else:
print(f"未找到关键字为 {key} 的记录。") def switch_to_english():
hwnd = user32.GetForegroundWindow()
himc = imm32.ImmGetContext(hwnd)
if himc:
imm32.ImmSetOpenStatus(himc, False)
imm32.ImmReleaseContext(hwnd, himc) root = tk.Tk()
root.overrideredirect(True)
root.configure(bg="white") text_entry = tk.Entry(
root,
width=20,
font=("Arial", 12),
bd=0,
highlightthickness=1,
justify="left"
)
text_entry.pack(padx=10, pady=10) root.withdraw() text_entry.bind("<Return>", on_enter)
keyboard.add_hotkey("alt+windows+z", show_window)
keyboard.add_hotkey("esc", hide_window)
text_entry.bind("<FocusIn>", lambda event: switch_to_english()) script_dir = os.path.dirname(os.path.abspath(__file__))
store_path = os.path.join(script_dir, "store.txt")
store = Store(store_path) root.mainloop()
配置文件示例
在 store.txt 文件中添加以下内容:
google https://www.google.com u
python https://www.python.org u
ubunt D:\ubunt f
services %SystemRoot%\system32\services.msc o
notepad C:\Windows\System32\notepad.exe o
功能说明
打开 URL:
输入
google,打开https://www.google.com。输入
python,打开https://www.python.org。
打开文件夹:
输入
ubunt,打开D:\ubunt文件夹。
启动应用程序或执行系统命令:
输入
services,打开服务管理器。输入
notepad,启动记事本。
使用方法
将 Python 脚本和
store.txt文件放在同一目录下。运行 Python 脚本。
按下
Alt + Win + Z显示界面,输入关键字后按Enter键。程序会根据配置文件执行相应操作。
打包为可执行文件
使用 PyInstaller 将脚本打包为 Windows 可执行文件:
pyinstaller --onefile --windowed main.py
生成的 main.exe 文件位于 dist 文件夹中。
总结
通过抽象 StoreItem 和 Store 类,代码逻辑更加清晰和模块化。快速启动器 不仅支持打开网址,还能打开文件夹、启动应用程序和执行系统命令。你可以根据需要在 store.txt 中添加更多映射关系,实现快速访问常用资源的目标。希望这个工具能帮助你提高工作效率!
Windows 快速启动器的更多相关文章
- [windows]快速从ftp下载最新软件包的批处理脚本
背景 由于敏捷开发,快速迭代,我们项目一天会有三个版本,也就意味着我一天要去获取三次软件包.我负责服务端开发,所以我经常需要去拿最新的客户端.我们的客户端放置在一个公共的ftp上面.每天频繁登陆ftp ...
- Windows Phone 启动器
http://msdn.microsoft.com/zh-CN/library/gg278408(v=vs.92)#BKMK_Launchers using Microsoft.Phone.Contr ...
- vc++ windows 快速启动栏创建快捷方式
创建快速启动栏 在windows软件开发中,软件安装过程中总是需要在快速启动栏创建快捷方式,下面介绍一种快速启动栏创建快捷方式的方法,具体代码如下:(该方法不支持win10,目前还没有找到win10的 ...
- windows——快速得到某一目录下所有文件的名称
前言 其实用的是windows上dir命令,能快速得到某一目录下的所有文件名称,天天那么忙都没时间写博客(┬_┬) 步骤 打开cmd并cd到某目录下 C:\Users\Administrator.KI ...
- windows快速搭建FTP工具Serv-U FTP Server
本文介绍一个简单的FTP工具,当然windows系统自带FTP工具,但是配置方法没有第三方工具来的简单可操作性好. 此工具用于搭建FTP环境,对于需要测试FTP上传功能具有极大帮助.例如球机抓拍图片上 ...
- Windows快速批量删除大量文件的命令
命令分别如下: rmdir [drive:]path [/S] [/Q] del [drive:]path [/S] [/Q] 其中rmdir 与rd命令相同. /S 表示除目录本身外,还将删除指定目 ...
- Ubuntu Linux虚拟机与windows快速创建共享文件夹
有时候我们需要在windows下与远程Linux服务器传输文件,之前使用pscp传输文件很方便,但不方便传输多文件,同时也不便于查看.看了网上的教程总结创建共享文件夹的流程: 1.首先在本地windo ...
- windows快速安装redis
下载地址:https://github.com/microsoftarchive/redis/releases 下载解压,命令行:redis-server.exe redis.windows.conf
- windows快速安装linux虚拟机
1. 场景描述 因测试中需要linux集群,目前的服务器不太方便部署,需要本机(windows7)启动多个linux虚拟机,记录下,希望能帮到需要的朋友. 2. 解决方案 2.1 软件准备 (1)使用 ...
- 【好软推荐】Scoop - Windows快速软件安装指南
在平常生活中如果要安装像git.java.node这些环境的时都需要先去官网下载安装程序,点击安装,之后还需要配置,不仅过程麻烦,而且工具多了之后整理起来也相当不容易,配置也很杂,整个电脑就像被污染了 ...
随机推荐
- NZOJ 模拟赛4
T1 数字游戏 大家列队后,都觉得累了,于是一起坐到院子中的草地上休息.这时Anna突然想跟她的最大竞争对手Cici玩一个数字游戏,她要你编写程序帮助她取得胜利. 第i次游戏初始时有一个整数N_i(1 ...
- 初步学习Nuxt3
Nuxt3 用于制作ssr 网页 支持vue3 所有的语法,并且支持了TypeScript, vite+vue3+composition api + ts.SPA单页面应用不能进行SEO优化,SSR应 ...
- Docker registry cli 私有仓库镜像查询、删除、上传、下载 shell
#Docker官方私有仓库registry#官方只提供了API接口,不方便使用,就写了个shell#docker-registry安装配置http://www.cnblogs.com/elvi/p/8 ...
- .NET Core 异常(Exception)底层原理浅谈
中断与异常模型图 内中断 内中断是由 CPU 内部事件引起的中断,通常是在程序执行过程中由于 CPU 自身检测到某些异常情况而产生的.例如,当执行除法运算时除数为零,或者访问了不存在的内存地址,CPU ...
- 鱼与熊掌可以兼得,腾讯云推出COS on CDC对象存储服务
01 前言 在云计算时代,各个企业的信息基础设施都在进行云化转型,一时间,似乎万物皆可上云.但是在上云过程中,有不少客户遇到过这样的问题:有部分数据出于合规需求,需要在本地存储与处理,怎么办?一些数据 ...
- WCF Bindings Needed For HTTPS
原文地址:https://weblogs.asp.net/srkirkland/wcf-bindings-needed-for-https 我刚刚完成了我的第一个 WCF 应用,它在我的开发机上顺利工 ...
- 理解 ASP.NET Core: Host
dotnet core 非常好用,代码也及其精炼,但是,你真的搞懂了每一行代码背后的含义了吗? 本文希望能够深入浅出地梳理一下它的脉络,把它从神秘变成水晶一般透明. 本文关注于分析 Pragram.c ...
- 中电金信新捷报:银行客户资源管理领域No.1
春暖花开,捷报频传 近日,中电金信 客户关系管理系统(CRM) 接连中标 让我们共同见证这波喜讯 01 中电金信凭借优秀的解决方案和丰富的服务案例经验,成功中标某全国性股份制银行同业CRM实施服务采购 ...
- k8s单节点改为高可用和更新证书
master单节点添加master节点 apiServer添加域名更新证书 更新kubenertes证书有效期 环境 kubernetes v1.22.12 使用kubeadm安装的集群 #添加节点 ...
- java多层级zip解压
java多层级zip解压 前言 项目中偶然需要,希望能处理嵌套的压缩包,但是又不希望把文件解压处理.原本不希望重复造轮子,但没有发现很好用的现成案例,就简单处理了一下. 正文 java做zip解压一般 ...