[windows]自动锁屏程序

2025-01-25 8 0

因为单位经常要求电脑锁屏,突然有个想法,以下是几个关键点的分析和推荐的编程语言/框架:

功能需求

  1. 自动锁定屏幕:这是通过系统提供的 API 来实现的,可以通过模拟Win + L键来锁定屏幕。

  2. 设定时间:设置一个定时器,当鼠标不动一定时间后触发锁定。

  3. 播放视频时不锁定:通过判断当前是否有视频播放,可以用多种方式来检测,例如检查是否有媒体播放器进程在运行,或者通过监听音频和视频相关的 API。

适合的语言和框架

1. Python

Python 作为脚本语言,写起来简洁,而且具有很多相关的库,可以用来快速开发这一类工具。

  • 锁定屏幕
    可以使用ctypes或者pyautogui模拟Win + L键。

  • 检测鼠标是否移动
    使用pynput库监听鼠标移动事件并进行计时。

  • 判断是否播放视频
    可以通过检查视频播放器进程(例如vlc.exewmplayer.exe等)是否在运行,使用psutil来检查。

  • 设置定时器和后台运行
    可以使用 Python 的threading模块来处理定时任务。

代码示例:

import ctypes
import time
import threading
from pynput.mouse import Listener
import psutil

# 锁定屏幕的函数
def lock_screen():
    ctypes.windll.user32.LockWorkStation()

# 检测是否播放视频的函数
def is_video_playing():
    video_players = ['vlc.exe', 'wmplayer.exe', 'mediaplayer.exe']
    for proc in psutil.process_iter(['pid', 'name']):
        if proc.info['name'].lower() in video_players:
            return True
    return False

# 自动锁定屏幕的函数
class AutoLock:
    def __init__(self, timeout=300):
        self.timeout = timeout  # 默认 5 分钟
        self.last_move_time = time.time()  # 记录上次鼠标活动时间
        self.listener = Listener(on_move=self.on_move)
        self.listener.start()

    def on_move(self, x, y):
        self.last_move_time = time.time()  # 每次鼠标移动时更新时间

    def start_timer(self):
        while True:
            time.sleep(1)
            if time.time() - self.last_move_time > self.timeout and not is_video_playing():
                print("鼠标无活动,自动锁定屏幕")
                lock_screen()
                self.last_move_time = time.time()  # 锁定后重置时间

# 创建一个后台线程来定时检查
auto_lock = AutoLock(timeout=300)  # 设置为5分钟
lock_thread = threading.Thread(target=auto_lock.start_timer)
lock_thread.daemon = True
lock_thread.start()

# 主程序保持运行
while True:
    time.sleep(10)

优点:

  • 简洁:Python 语法简洁,开发速度快。

  • 功能丰富:可以通过第三方库(如pynputpsutil)轻松实现这些功能。

  • 跨平台:Python 脚本可以在多平台上运行,尽管本例是面向 Windows 的,但在 Linux 或 macOS 上可以通过适配相应的 API 来实现类似功能。

2. C# (Windows 专用)

如果只在 Windows 平台上运行,C# 是一个非常合适的选择。C# 与 Windows API 紧密集成,可以轻松地访问系统功能(如屏幕锁定)和进程管理。

  • 锁定屏幕
    可以直接调用 Windows API 来锁定屏幕。

  • 检测鼠标是否移动
    可以利用System.Windows.FormsSystem.Management来监听鼠标事件并计时。

  • 判断是否播放视频
    通过检查进程列表来判断是否有视频播放器正在运行。

代码示例:

using System;
using System.Linq;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
using System.Windows.Forms;

class AutoLockScreen
{
    // 调用Windows API来锁定屏幕
    [DllImport("user32.dll")]
    public static extern bool LockWorkStation();

    static void Main(string[] args)
    {
        Timer timer = new Timer(Callback, null, 0, 1000);
        Application.Run();  // 保持应用程序运行
    }

    static void Callback(object state)
    {
        if (IsMouseIdle() && !IsVideoPlaying())
        {
            LockWorkStation();
        }
    }

    // 判断鼠标是否静止
    static bool IsMouseIdle()
    {
        // 实际实现可以通过捕捉鼠标移动事件来判断
        // 这里我们简单返回 true 来模拟
        return true;
    }

    // 判断是否播放视频
    static bool IsVideoPlaying()
    {
        string[] videoPlayers = { "vlc", "wmplayer", "mediaplayer" };
        var processes = Process.GetProcesses();
        foreach (var process in processes)
        {
            if (videoPlayers.Any(player => process.ProcessName.ToLower().Contains(player)))
            {
                return true;
            }
        }
        return false;
    }
}

优点:

  • 性能更高:C# 是编译型语言,适合对性能有较高要求的场景。

  • 强大的 Windows API 集成:可以直接使用 Windows 提供的 API 完成任务,像LockWorkStation用于锁定屏幕非常方便。

  • UI 支持:如果你需要图形界面或者系统托盘功能,C# 提供了强大的支持。

3. AutoHotkey (AHK)

如果你只需要快速实现简单的脚本,AutoHotkey 是一个非常适合自动化和系统控制的语言,特别是在 Windows 系统中。

  • 锁定屏幕
    使用LockWorkStation系统命令来锁定屏幕。

  • 检测鼠标是否移动
    可以使用MouseMove函数获取鼠标位置并进行检测。

  • 判断是否播放视频
    可以通过Process命令查看系统中正在运行的进程。

代码示例:

#Persistent
SetTimer, CheckInactivity, 1000

CheckInactivity:
    ; 检查鼠标是否有活动
    MouseGetPos, MouseX, MouseY
    if (A_TimeIdle > 300000 && !IsVideoPlaying())  ; 如果 5 分钟没有活动并且没有视频播放
    {
        DllCall("user32.dll", "int", 0, "int", 0)  ; 锁定屏幕
    }
    return

IsVideoPlaying:
    Process, Exist, vlc.exe  ; 检查 VLC 是否在运行
    if (ErrorLevel) {
        return true
    }
    Process, Exist, wmplayer.exe  ; 检查 Windows Media Player 是否在运行
    return ErrorLevel > 0

优点:

  • 快速实现:AutoHotkey 脚本非常简单,适合快速实现自动化任务。

  • 直接与操作系统交互:对 Windows 系统的支持非常好,直接调用 Windows 函数。

总结

  • Python:简洁且功能强大,适合快速开发和跨平台使用。使用pynputpsutil等库可以方便地完成所有需求。

  • C#:适合 Windows 平台,能直接调用 Windows API,适合需要高性能或与 Windows 紧密集成的任务。

  • AutoHotkey:适合快速编写简单的自动化脚本,尤其适合系统任务和简单的 UI 操作。

如果你想要一个跨平台的解决方案,并且对性能要求不是特别高,Python是非常好的选择。如果你只在 Windows 上运行且需要更强的性能和系统集成,C#是更好的选择。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Tetragon:一款基于eBPF的运行时环境安全监控工具
Memcached DDoS 反射放大攻击(实验)
Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件
Shiro CVE-2020-13933 路径绕过(越权)
MemProcFS-Analyzer:一款用于DFIR的Windows内存转储自动取证分析工具
Tyrant(暴君) SUID二进制文件权限提升工具

发布评论