用 Python 实现 U 盘防丢

上次我们实现了 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 盘的监控提醒,看下效果吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181018G15TBN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券