You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Python检测鼠标滚动与位置并限制操作的实现方法

Solution for Public Display Lockdown & Mouse Monitoring on Windows 10/7

Hey there! I get exactly what you're going for—building a locked-down display app for public spaces like libraries where you don't want users exiting the app or scrolling up to see previous content. Let's break this down without relying on heavy frameworks like Pygame.

These modules let you listen to mouse events (position, scroll, clicks) instead of just controlling the mouse:

1. pynput

This is my top pick—it's lightweight, easy to use, and works seamlessly on Windows 10/7. It can track mouse position, scroll direction, and even intercept events to block unwanted actions.

Example: Listen for Mouse Scroll & Position

from pynput import mouse

def on_scroll(x, y, dx, dy):
    # Block upward scroll (dy > 0 means upward scroll on most mice)
    if dy > 0:
        print("Blocking upward scroll!")
        return False  # Return False to intercept the event

def on_move(x, y):
    # Track mouse position if needed
    print(f"Mouse at ({x}, {y})")

# Start listening
listener = mouse.Listener(on_scroll=on_scroll, on_move=on_move)
listener.start()
listener.join()

2. pywin32 (Windows API Bindings)

If you want direct access to Windows system APIs, pywin32 is the way to go. It's a bit more low-level but gives you full control over system events.

Example: Get Mouse Position & Set Up a Scroll Hook

import win32api
import win32con
import win32gui

def get_mouse_pos():
    return win32api.GetCursorPos()

# To intercept scroll events, you'll need a low-level mouse hook
def mouse_hook(nCode, wParam, lParam):
    if wParam == win32con.WM_MOUSEWHEEL:
        # Check scroll direction (HIWORD of lParam's mouse data)
        scroll_data = win32api.HIWORD(lParam[1])
        if scroll_data == 0x7800:  # Upward scroll
            print("Blocking upward scroll via Windows hook!")
            return 1  # Return non-zero to block the event
    return win32gui.CallNextHookEx(None, nCode, wParam, lParam)

# Set up the hook
hook = win32gui.SetWindowsHookEx(win32con.WH_MOUSE_LL, mouse_hook, win32api.GetModuleHandle(None), 0)
# Keep the script running
win32gui.PumpMessages()

Locking Down the App (Prevent Exit & Fullscreen)

For the display app itself, use a lightweight GUI toolkit like tkinter (built into Python, no extra installs needed) to create a locked-down interface:

1. Disable Window Close Button & Fullscreen

import tkinter as tk

root = tk.Tk()

# Ignore the window close event
root.protocol("WM_DELETE_WINDOW", lambda: None)

# Fullscreen mode (hides taskbar and window controls)
root.attributes('-fullscreen', True)

# Optional: Hide the mouse cursor
root.config(cursor="none")

# Add your display content here (labels, images, etc.)
display_label = tk.Label(root, text="Public Library Display", font=("Arial", 24))
display_label.pack(expand=True)

root.mainloop()

2. Combine with Mouse Scroll Blocking

Run the pynput listener in a separate thread alongside your tkinter app so both run simultaneously:

import tkinter as tk
from pynput import mouse
import threading

def block_scroll():
    def on_scroll(x, y, dx, dy):
        if dy > 0:
            return False
    listener = mouse.Listener(on_scroll=on_scroll)
    listener.start()
    listener.join()

# Start scroll blocking in a background thread
scroll_thread = threading.Thread(target=block_scroll, daemon=True)
scroll_thread.start()

# Set up your tkinter display
root = tk.Tk()
root.protocol("WM_DELETE_WINDOW", lambda: None)
root.attributes('-fullscreen', True)
root.config(cursor="none")

display_label = tk.Label(root, text="Scroll Down to See More | Up Scroll Blocked!", font=("Arial", 20))
display_label.pack(pady=50)

root.mainloop()

Key Notes for Windows 10/7 Compatibility

  • Both pynput and pywin32 work on both Windows 10 and 7—just install the correct version for your Python setup:
    • Install pynput via pip install pynput
    • Install pywin32 via pip install pywin32
  • This setup keeps things lightweight and avoids overkill libraries like Pygame, perfect for a public display use case.

内容的提问来源于stack exchange,提问作者user9773137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:30:17