本教程将指导您如何使用 Python 创建一个 Windows 服务,该服务可以在系统启动和关机时发送企业微信消息提醒。
1. 环境准备
-
安装 Python 和依赖库
- 确保您已安装 Python(推荐使用 Python 3.7 及以上版本)。
- 安装
pywin32
库,这是实现 Windows 服务的关键库:pip install pywin32
-
安装 requests 库
- 用于发送 HTTP 请求:
pip install requests
- 用于发送 HTTP 请求:
2. 编写监控脚本
将以下 Python 脚本保存为 check_shutdown.py
。此脚本将在系统启动时发送一条消息,并在系统关机时发送另一条消息。
import win32serviceutil
import win32service
import win32event
import servicemanager
import requests
from datetime import datetime
class StartupShutdownMonitorService(win32serviceutil.ServiceFramework):
_svc_name_ = "开关机监控服务" # 服务名称
_svc_display_name_ = "系统开关机监控服务" # 服务显示名称
_svc_description_ = "监控系统启动和关机,并发送微信消息。"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
self.isrunning = True
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.isrunning = False
def SvcDoRun(self):
servicemanager.LogMsg(
servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, "")
)
self.send_startup_message()
self.main()
def send_wechat_message(self, message):
url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WECHAT_KEY'
data = {
"msgtype": "text",
"text": {
"content": message
}
}
response = requests.post(url, json=data)
if response.status_code == 200:
print("消息发送成功")
else:
print(f"消息发送失败,状态码: {response.status_code}, 响应: {response.text}")
def send_startup_message(self):
# 在服务启动时发送开机消息
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
startup_message = f"{current_time} 电脑已开机"
self.send_wechat_message(startup_message)
def main(self):
# 监控关机
while self.isrunning:
rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)
if rc == win32event.WAIT_OBJECT_0:
# 系统正在关闭或服务停止,发送关机消息
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
shutdown_message = f"{current_time} 电脑正在关机,请查看原因"
self.send_wechat_message(shutdown_message)
break
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(StartupShutdownMonitorService)
3. 取得企业微信推送链接
-
创建企业微信机器人
- 登录企业微信,进入应用管理。
- 在“我的企业”中找到“机器人管理”。
- 创建一个新的机器人,获取 Webhook URL。
-
替换代码中的 Webhook
- 将代码中的
YOUR_WECHAT_KEY
替换为您的企业微信机器人的 Webhook key。代码如下:url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WECHAT_KEY'
- 将代码中的
4. 安装和运行服务
-
以管理员权限运行命令提示符
- 在“开始”菜单中搜索
cmd
,右键点击命令提示符,选择“以管理员身份运行”。
- 在“开始”菜单中搜索
-
安装服务
- 导航到脚本所在目录,然后运行以下命令将脚本安装为 Windows 服务:
python check_shutdown.py install
- 如果遇到“拒绝访问”的错误,确保您以管理员权限运行命令提示符。
- 导航到脚本所在目录,然后运行以下命令将脚本安装为 Windows 服务:
-
启动服务
- 安装完成后,运行以下命令启动服务:
python check_shutdown.py start
- 安装完成后,运行以下命令启动服务:
5. 验证服务
-
检查服务状态
- 使用
services.msc
(Windows 服务管理器)检查系统开关机监控服务
是否正在运行。
- 使用
-
测试开机和关机消息
- 重新启动或关机您的计算机,检查是否收到开机和关机消息。
6. 停止和删除服务(如果需要)
-
停止服务
python check_shutdown.py stop
-
删除服务
python check_shutdown.py remove
注意事项
-
权限问题
- 安装和管理 Windows 服务需要管理员权限。确保您在执行这些操作时使用了具有管理员权限的命令提示符。
-
企业微信推送链接的安全性
- 在代码中替换 Webhook URL 时,确保 Webhook URL 的安全性,避免泄露您的企业微信机器人链接。
通过以上步骤,您可以创建一个能够在系统启动和关机时自动发送微信消息的 Windows 服务。这样,您可以实时监控计算机的状态变化,并及时收到通知。