Python:程序最小化到托盘功能实现

本文介绍了如何将Python开发的命令行程序最小化到系统托盘,并添加菜单操作功能。通过引入一个托盘模块,实现了在Windows环境下,使无界面的cmd窗口转变为托盘图标,用户可以通过菜单或快捷键进行操作。提供了具体代码示例和所需模块的下载链接。
摘要由CSDN通过智能技术生成

本文讲解如何装python的开发的命令行程序最小化到托盘的方法,并提供菜单操作功能。

上个月使用python实现了一个多功能抓图工具,见《Python:一个多功能的抓图工具开发(附源码)》,此程序为一个命令行程序,windows下运行时会弹出一个cmd窗口,里面什么内容也没有,用户使用时直接按下快捷键进行操作。一直想着优化一下,今天想到是否以通过最小化到托盘,并提供菜单操作和快捷键操作两种方式,这样看起来就有点软件的样子了。

Google了一下,发现了一个方法,具体内容见本文附录部分。

直接上实现后的代码:

1、screenshot.py (此模块提供截图的各种方法,被主程序screen_tray.py引用)

#!/usr/bin/env python #coding=gb2312 #此模块主要提供抓图功能,支持以下三种抓图方式: #1、抓取全屏,快捷键CTRL+F1 #2、抓取当前窗口,快捷键CTRL+F2 #3、抓取所选区域,快捷键CTRL+F3 #抓到之后,会自动弹出保存对话框,选择路径保存即可 #******************************************* #更新记录 #0.1 2012-03-10 create by dyx1024 #******************************************** import pyhk import wx import os import sys from PIL import ImageGrab import ctypes import win32gui import ctypes.wintypes import screen_tray def capture_fullscreen(SysTrayIcon): ''' Function:全屏抓图 Input:NONE Output: NONE author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-10 ''' #抓图 pic = ImageGrab.grab() #保存图片 save_pic(pic) def capture_current_windows(SysTrayIcon): ''' Function:抓取当前窗口 Input:NONE Output: NONE author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-10 ''' #窗口结构 class RECT(ctypes.Structure): _fields_ = [('left', ctypes.c_long), ('top', ctypes.c_long), ('right', ctypes.c_long), ('bottom', ctypes.c_long)] def __str__(self): return str((self.left, self.top, self.right, self.bottom)) rect = RECT() #获取当前窗口句柄 HWND = win32gui.GetForegroundWindow() #取当前窗口坐标 ctypes.windll.user32.GetWindowRect(HWND,ctypes.byref(rect)) #调整坐标 rangle = (rect.left+2,rect.top+2,rect.right-2,rect.bottom-2) #抓图 pic = ImageGrab.grab(rangle) #保存 save_pic(pic) def capture_choose_windows(SysTrayIcon): ''' Function:抓取选择的区域,没有自己写这个,借用QQ抓图功能 Input:NONE Output: NONE author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-10 ''' try: #加载QQ抓图使用的dll dll_handle = ctypes.cdll.LoadLibrary('CameraDll.dll') except Exception: try: #如果dll加载失败,则换种方法使用,直接运行,如果还失败,退出 os.system("Rundll32.exe CameraDll.dll, CameraSubArea") except Exception: return else: try: #加载dll成功,则调用抓图函数,注:没有分析清楚这个函数带的参数个数 #及类型,所以此语句执行后会报参数缺少4个字节,但不影响抓图功能,所 #以直接忽略了些异常 dll_handle.CameraSubArea(0) except Exception: return def save_pic(pic, filename = '未命令图片.png'): ''' Function:使用文件对框,保存图片 Input:NONE Output: NONE author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-10 ''' app = wx.PySimpleApp() wildcard = "PNG(*.png)|*.png" dialog = wx.FileDialog(None, "Select a place", os.getcwd(), filename, wildcard, wx.SAVE) if dialog.ShowModal() == wx.ID_OK: pic.save(dialog.GetPath().encode('gb2312')) else: pass dialog.Destroy() def screenshot_main(): ''' Function:主函数,注册快捷键 Input:NONE Output: NONE author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-10 ''' #创建hotkey句柄 hot_handle = pyhk.pyhk() #注册抓取全屏快捷键CTRL+F1 hot_handle.addHotkey(['Ctrl', 'F1'], capture_fullscreen) #注册抓取当前窗口快捷键CTRL+F2 hot_handle.addHotkey(['Ctrl', 'F2'], capture_current_windows) #注册抓取所选区域快捷键CTRL+F3 hot_handle.addHotkey(['Ctrl', 'F3'], capture_choose_windows) #开始运行 hot_handle.start()

2、screen_tray.py (此模块为主程序,提供托盘及菜单功能,在各菜单项中调用1中的各函数,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值