创建一个 Windows 服务监控系统开关机并发送企业微信消息

本教程将指导您如何使用 Python 创建一个 Windows 服务,该服务可以在系统启动和关机时发送企业微信消息提醒。

1. 环境准备

安装 Python 和依赖库

确保您已安装 Python(推荐使用 Python 3.7 及以上版本)。安装
pywin32
库,这是实现 Windows 服务的关键库:


pip install pywin32

安装 requests 库

用于发送 HTTP 请求:


pip install requests
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

如果遇到“拒绝访问”的错误,确保您以管理员权限运行命令提示符。

启动服务

安装完成后,运行以下命令启动服务:


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 服务。这样,您可以实时监控计算机的状态变化,并及时收到通知。

© 版权声明

相关文章

暂无评论

none
暂无评论...