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
主要方法
- get_mouse_position(): 獲取當(dāng)前鼠標(biāo)坐標(biāo)位置
- is_in_bottom_right_corner(x, y): 檢查鼠標(biāo)是否在右下角觸發(fā)區(qū)域
- lock_screen(): 調(diào)用 Windows API 鎖定屏幕
- monitor_loop(): 主監(jiān)控循環(huán),持續(xù)檢查鼠標(biāo)位置
- start(): 啟動(dòng)監(jiān)控服務(wù)
- 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
工作原理
- 初始化: 獲取屏幕分辨率,設(shè)置觸發(fā)區(qū)域參數(shù)
- 監(jiān)控循環(huán): 在獨(dú)立線程中持續(xù)檢查鼠標(biāo)位置
- 位置檢測(cè): 每隔指定時(shí)間間隔獲取鼠標(biāo)坐標(biāo)
- 觸發(fā)判斷: 檢查鼠標(biāo)是否在屏幕右下角指定區(qū)域內(nèi)
-
執(zhí)行鎖屏: 調(diào)用 Windows API
LockWorkStation()鎖定屏幕 - 防重復(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)
- Windows 專用: 此工具僅適用于 Windows 系統(tǒng)
- 管理員權(quán)限: 某些情況下可能需要管理員權(quán)限才能正常鎖屏
- 觸發(fā)區(qū)域: 默認(rèn)觸發(fā)區(qū)域?yàn)橛蚁陆?50x50 像素,可根據(jù)需要調(diào)整
- 退出方式: 使用 Ctrl+C 組合鍵退出程序
- 性能影響: 檢查間隔設(shè)置過(guò)小可能會(huì)增加 CPU 使用率
故障排除
常見(jiàn)問(wèn)題
-
鎖屏不生效
- 檢查是否有足夠的系統(tǒng)權(quán)限
- 確認(rèn) Windows 鎖屏功能是否正常
-
程序無(wú)響應(yīng)
- 使用 Ctrl+C 強(qiáng)制退出
- 檢查是否有異常錯(cuò)誤信息
-
觸發(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()