Python:程序最小化到托盘功能实现
本文讲解如何装python的开发的命令行程序最小化到托盘的方法,并提供菜单操作功能。
上个月使用python实现了一个多功能抓图工具,见《Python:一个多功能的抓图工具开发(附源码)》http://www.zzzyk.com/kf/201204/126280.html ,此程序为一个命令行程序,windows下运行时会弹出一个cmd窗口,里面什么内容也没有,用户使用时直接按下快捷键进行操作。一直想着优化一下,今天想到是否以通过最小化到托盘,并提供菜单操作和快捷键操作两种方式,这样看起来就有点软件的样子了。
Google了一下,发现了一个方法,具体内容见本文附录部分。
直接上实现后的代码:
1、screenshot.py (此模块提供截图的各种方法,被主程序screen_tray.py引用)
[python]
#!/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
补充:Web开发 , Python ,