上次我们实现了 u 盘的监控基本功能,不过这样的程序还是很基本,虽然主要听声音就够了,但是一大个黑屏摆在那里也实在是占地方。
接下来,我们将这个程序改良一下,做成标准的 windows 托盘程序,不显示控制台窗口(黑屏)。
去掉运行时的黑屏:
首先我们去掉运行时的黑屏,这个不难:
使用 pythonw 运行即可,比如:
pythonw app.py
或者 将
app.py 直接改名为 app.pyw
这样运行的程序,就会没有控制台窗口,自动运行了。
然后针对这个 U 盘防丢程序,命令行就应该改为:
runas /user:administrator /savecred "pythonw X:\xxxx\xx.py"
或者
runas /user:administrator /savecred "pythonw X:\xxxx\xx.pyw"
去掉调用 beep64 的黑屏:
不过我们这个程序因为使用了 ring0 权限调用了 beep64.exe 这个发声程序,还需要一些改进,隐藏 发声程序造成的黑屏。
这个地方。我采用了 subprocess 提供的方法,把窗口的显示屏蔽掉。
具体就是:
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
#si.wShowWindow = subprocess.SW_HIDE # default
subprocess.call('【命令行】', startupinfo=si)
这样就不会输出到黑色的窗口。
增加托盘区图标显示:
然后我们遇到的问题是。如何知道程序是否在运行。。
哈哈,没想到吧。当彻底隐藏黑屏之后就遇到的居然是这个问题,而且我们还需要能控制程序的运行和退出。
这个有现成的轮子,我们用:
from infi.systray import SysTrayIcon
systray = SysTrayIcon("udiskdet.ico", u"U盘防丢监测", menu_options, on_quit=on_quit_callback)
定义菜单后,再定义退出程序(必须是 os._exit(0)),就可以了。
ps: 有点丑的图标
锦上添花,用气泡通知提醒 U 盘:
在研究托盘的时候,偶然看到气泡提醒的例子,于是就想引进进来。
嗯,经过一番艰难的查找,又找到了一个轮子。
#消息通知
from BalloonTip import BalloonTip
。。。
balloon.show_tip(u"有 U 盘插入,请注意取出~", u'[有 U 盘]' )
。。。
然后通过这个命令实现了,U 盘的监控提醒,看下效果吧~
领取专属 10元无门槛券
私享最新 技术干货