简介
有网友提过一个要求,用 Python 实现一个 电脑打开某网站就自动关机的功能。
想到的思路有两个:
【windows 平台】, 获取活动的窗口标题,如果标题里包含了某些网站名称, 那就使用关机命令 可以定时拉取标题, 也可以使用 pynput 监听鼠标点击,再获取 【本文就是这个实现】
还有一种就是监控网络状态 netstat 检索特定的 ip 地址, 如果有,则调用关机命令,需要事先知道网站的IP地址才行
Demo
说来也巧,这两天正好在学习 pynput、pyautogui 自动化方面的知识,tk 也轻微了解,正好拿来练手。
关机功能就用信息框的形式来代替,看看效果就行,关机就看不了啦 😄
pyautogui 的对话框不能完美置顶,最后不得不用 tkinter 来实现界面。
鼠标点击的时候,检查当前活动窗口的标题是否包含 ‘百度贴吧’ 这几个汉字,如果有,就显示一个提示。
效果图:
# 【鼠标右键退出程序】
import os
import pyautogui
from pynput import mouse
from tkinter import Tk, Label, StringVar
isShowing = False
def on_click(x, y, button, pressed):
global isShowing
if button == mouse.Button.right:
# Stop listener
window.destroy()
listener.stop()
return False
win = pyautogui.getActiveWindow()
if win and '百度贴吧' in win.title:
func(x, y, '百度贴吧')
else:
isShowing = False
window.geometry('0x0')
def func(x, y, txt):
global isShowing
if not isShowing:
isShowing = True
window.textvar.set(f'你正在浏览{txt}')
if useShutdown:
os.system('start /b shutdown -s -t 0')
else:
window.geometry(f'300x37+{x+10}+{y+10}')
else:
window.geometry(f'+{x+10}+{y+10}')
class MT(Tk):
def __init__(self):
super().__init__()
# self.geometry('0x0')
self.attributes('-topmost', 'true')
self.overrideredirect(1)
self.textvar = StringVar()
label = Label(self, textvariable=self.textvar, foreground='red', background='black', width=280)
label.pack()
if __name__ == '__main__':
listener = mouse.Listener(on_click=on_click)
listener.start()
useShutdown = False
window = MT()
window.mainloop()