Windows 系統(tǒng)實(shí)現(xiàn)【觸發(fā)角】功能

Simple Mouse Monitor 說(shuō)明文檔

概述

simple_mouse_monitor.py 是一個(gè)簡(jiǎn)單的鼠標(biāo)監(jiān)控工具,用于監(jiān)控鼠標(biāo)位置并在鼠標(biāo)移動(dòng)到屏幕右下角時(shí)自動(dòng)鎖定 Windows 系統(tǒng)屏幕。這個(gè)工具特別適合需要快速鎖屏保護(hù)隱私的場(chǎng)景。

功能特性

  • 自動(dòng)鎖屏: 當(dāng)鼠標(biāo)移動(dòng)到屏幕右下角指定區(qū)域時(shí),自動(dòng)觸發(fā)系統(tǒng)鎖屏
  • 可配置參數(shù): 支持自定義觸發(fā)區(qū)域大小和檢查間隔
  • 多線程設(shè)計(jì): 使用獨(dú)立線程進(jìn)行監(jiān)控,不阻塞主程序
  • 異常處理: 包含完善的錯(cuò)誤處理機(jī)制
  • 用戶友好: 提供清晰的狀態(tài)提示和操作說(shuō)明

系統(tǒng)要求

  • 操作系統(tǒng): Windows (使用 Windows API)
  • Python 版本: Python 3.x
  • 依賴庫(kù):
    • ctypes (Python 標(biāo)準(zhǔn)庫(kù))
    • threading (Python 標(biāo)準(zhǔn)庫(kù))
    • time (Python 標(biāo)準(zhǔn)庫(kù))

類結(jié)構(gòu)

SimpleMouseMonitor 類

主要的監(jiān)控類,包含以下方法:

構(gòu)造函數(shù)

__init__(self, corner_size=50, check_interval=0.1)
  • corner_size: 右下角觸發(fā)區(qū)域的大?。ㄏ袼兀?,默認(rèn) 50
  • check_interval: 鼠標(biāo)位置檢查間隔(秒),默認(rèn) 0.1

主要方法

  1. get_mouse_position(): 獲取當(dāng)前鼠標(biāo)坐標(biāo)位置
  2. is_in_bottom_right_corner(x, y): 檢查鼠標(biāo)是否在右下角觸發(fā)區(qū)域
  3. lock_screen(): 調(diào)用 Windows API 鎖定屏幕
  4. monitor_loop(): 主監(jiān)控循環(huán),持續(xù)檢查鼠標(biāo)位置
  5. start(): 啟動(dòng)監(jiān)控服務(wù)
  6. stop(): 停止監(jiān)控服務(wù)

使用方法

基本使用

# 使用默認(rèn)參數(shù)創(chuàng)建監(jiān)控器
monitor = SimpleMouseMonitor()
monitor.start()

自定義參數(shù)

# 自定義觸發(fā)區(qū)域大小和檢查間隔
monitor = SimpleMouseMonitor(corner_size=100, check_interval=0.05)
monitor.start()

直接運(yùn)行

python simple_mouse_monitor.py

工作原理

  1. 初始化: 獲取屏幕分辨率,設(shè)置觸發(fā)區(qū)域參數(shù)
  2. 監(jiān)控循環(huán): 在獨(dú)立線程中持續(xù)檢查鼠標(biāo)位置
  3. 位置檢測(cè): 每隔指定時(shí)間間隔獲取鼠標(biāo)坐標(biāo)
  4. 觸發(fā)判斷: 檢查鼠標(biāo)是否在屏幕右下角指定區(qū)域內(nèi)
  5. 執(zhí)行鎖屏: 調(diào)用 Windows API LockWorkStation() 鎖定屏幕
  6. 防重復(fù)觸發(fā): 鎖屏后暫停 2 秒,避免重復(fù)觸發(fā)

配置參數(shù)說(shuō)明

參數(shù) 類型 默認(rèn)值 說(shuō)明
corner_size int 50 右下角觸發(fā)區(qū)域的邊長(zhǎng)(像素)
check_interval float 0.1 鼠標(biāo)位置檢查間隔(秒)

使用場(chǎng)景

  • 辦公環(huán)境: 需要快速鎖屏保護(hù)工作內(nèi)容
  • 公共場(chǎng)所: 臨時(shí)離開(kāi)時(shí)快速保護(hù)隱私
  • 演示場(chǎng)景: 演示過(guò)程中需要快速鎖屏
  • 安全要求: 對(duì)屏幕安全有較高要求的環(huán)境

注意事項(xiàng)

  1. Windows 專用: 此工具僅適用于 Windows 系統(tǒng)
  2. 管理員權(quán)限: 某些情況下可能需要管理員權(quán)限才能正常鎖屏
  3. 觸發(fā)區(qū)域: 默認(rèn)觸發(fā)區(qū)域?yàn)橛蚁陆?50x50 像素,可根據(jù)需要調(diào)整
  4. 退出方式: 使用 Ctrl+C 組合鍵退出程序
  5. 性能影響: 檢查間隔設(shè)置過(guò)小可能會(huì)增加 CPU 使用率

故障排除

常見(jiàn)問(wèn)題

  1. 鎖屏不生效

    • 檢查是否有足夠的系統(tǒng)權(quán)限
    • 確認(rèn) Windows 鎖屏功能是否正常
  2. 程序無(wú)響應(yīng)

    • 使用 Ctrl+C 強(qiáng)制退出
    • 檢查是否有異常錯(cuò)誤信息
  3. 觸發(fā)過(guò)于敏感

    • 增大 corner_size 參數(shù)
    • 調(diào)整 check_interval 參數(shù)

擴(kuò)展建議

  • 添加其他觸發(fā)區(qū)域(左上角、左下角等)
  • 支持自定義快捷鍵觸發(fā)
  • 添加聲音提示功能
  • 支持配置文件保存設(shè)置
  • 添加系統(tǒng)托盤圖標(biāo)

版本信息

  • 當(dāng)前版本: 1.0
  • 最后更新: 2025年
  • 兼容性: Windows 7/8/10/11

許可證

本工具為開(kāi)源軟件,具體許可證信息請(qǐng)查看項(xiàng)目根目錄。

以下為源代碼

import time
import ctypes
from ctypes import wintypes
import threading

class SimpleMouseMonitor:
    def __init__(self, corner_size=50, check_interval=0.1):
        """
        初始化鼠標(biāo)監(jiān)控器
        :param corner_size: 右下角觸發(fā)區(qū)域的大?。ㄏ袼兀?        :param check_interval: 檢查間隔(秒)
        """
        self.corner_size = corner_size
        self.check_interval = check_interval
        self.running = False
        self.screen_width = ctypes.windll.user32.GetSystemMetrics(0)
        self.screen_height = ctypes.windll.user32.GetSystemMetrics(1)
        
    def get_mouse_position(self):
        """獲取當(dāng)前鼠標(biāo)位置"""
        point = wintypes.POINT()
        ctypes.windll.user32.GetCursorPos(ctypes.byref(point))
        return point.x, point.y
    
    def is_in_bottom_right_corner(self, x, y):
        """檢查鼠標(biāo)是否在右下角"""
        return (x >= self.screen_width - self.corner_size and 
                y >= self.screen_height - self.corner_size)
    
    def lock_screen(self):
        """鎖定屏幕"""
        print("檢測(cè)到鼠標(biāo)在右下角,正在鎖屏...")
        ctypes.windll.user32.LockWorkStation()
    
    def monitor_loop(self):
        """監(jiān)控循環(huán)"""
        print(f"開(kāi)始監(jiān)控鼠標(biāo)移動(dòng)...")
        print(f"屏幕分辨率: {self.screen_width}x{self.screen_height}")
        print(f"右下角觸發(fā)區(qū)域: {self.corner_size}x{self.corner_size} 像素")
        print("移動(dòng)鼠標(biāo)到右下角即可鎖屏,按 Ctrl+C 退出")
        
        while self.running:
            try:
                x, y = self.get_mouse_position()
                
                if self.is_in_bottom_right_corner(x, y):
                    self.lock_screen()
                    # 鎖屏后暫停一段時(shí)間,避免重復(fù)觸發(fā)
                    time.sleep(2)
                
                time.sleep(self.check_interval)
                
            except Exception as e:
                print(f"監(jiān)控過(guò)程中出現(xiàn)錯(cuò)誤: {e}")
                break
    
    def start(self):
        """啟動(dòng)監(jiān)控"""
        self.running = True
        monitor_thread = threading.Thread(target=self.monitor_loop)
        monitor_thread.daemon = True
        monitor_thread.start()
        
        try:
            while self.running:
                time.sleep(1)
        except KeyboardInterrupt:
            print("\n正在停止監(jiān)控...")
            self.stop()
    
    def stop(self):
        """停止監(jiān)控"""
        self.running = False
        print("監(jiān)控已停止")

if __name__ == "__main__":
    # 創(chuàng)建監(jiān)控器實(shí)例
    # corner_size: 右下角觸發(fā)區(qū)域大?。J(rèn)50像素)
    # check_interval: 檢查間隔(默認(rèn)0.1秒)
    monitor = SimpleMouseMonitor(corner_size=50, check_interval=0.1)
    
    # 啟動(dòng)監(jiān)控
    monitor.start()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容