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这些环境的时都需要先去官网下载安装程序,点击安装,之后还需要配置,不仅过程麻烦,而且工具多了之后整理起来也相当不容易,配置也很杂,整个电脑就像被污染了 ...
随机推荐
- 19、解析2_1(链、chunk、锁)
解析 shared pool 图解: library cache里面,暂时可以认为存储着: 1.SQL以及对应的执行计划(所占空间比较小): 2.存储过程.函数.触发器.包,它们编译后的对象(所占空间 ...
- 点击Popover外区域自动关闭Popover (popover close when click outside)
$(document).on('click', function (e) { $('[data-toggle="popover"],[data-original-title]'). ...
- (Python基础教程之六)Python中的关键字
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- PHP5.2-5.6不同版本新特性
温故而知新, 时常复习下之前的东西 还是会有一些收获 本文目录:PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束PHP5.2:JSON 支持PHP5.3:弃用的功能,匿名函 ...
- 接口压力测试工具之go-wrk
go-wrk 是一个用Go语言实现的轻量级的http基准测试工具,类似于wrk,本文将简单介绍一下如何使用go-wrk实现接口的性能(压力)测试. github地址:https://github.co ...
- 基于CPLD/FPGA的呼吸灯效果实现(附全部verilog源码)
一.功能介绍 此设计可以让你的FPGA板子上那颗LED具有呼吸效果,像智能手机上的呼吸灯一样.以下源码已上板验证通过,大家可直接使用. 二.呼吸灯Verilog源码 ps1. 带★号处可根据需要进行修 ...
- 18号CSS学习
一.CSS简介 1.HTML局限性 只关注内容的语义. "丑" 2.CSS-网页的美容师 CSS是层叠样式表的简称,也称为CSS样式表或级联样式表. 主要用于设置HTML页面中的 ...
- One API 替代品 Chat Nio 安装与使用教程
有这样一位初中生,他在初一下学期发起了一个项目,专门用来给他的朋友们免费体验 GPT 模型. 到了八年级的暑假,他决定把这个项目开源出来,并且正式命名为 Chat Nio,同时项目的定位为一站式 LL ...
- uni-app项目uview的表单验证在小程序上不生效
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app,在uniapp生态中u ...
- Qt QLabel 文字自适应大小
直接上代码: void Adjust(QLabel * lb) { QFont font(lb->font()); while(1) { QFontMetrics fontMetrics(fon ...