作为服务运行时无法使用 pynput 鼠标侦听器检测鼠标移动

问题描述 投票:0回答:1

我正在尝试使用 python 创建一个 Windows 服务来监视鼠标移动和键盘按下。该代码在控制台中运行时工作正常,但是当我修改它以将其变成服务时,它没有检测到鼠标移动。我向 ChatGPT 询问它,它说 Windows 服务在非交互式环境中运行。

那么有什么办法可以实现我的要求呢?顺便说一句,我使用 pywin32 将其安装为服务,它成功运行并按预期执行其他所有操作。

这是代码:

mouse_listener = None
def monitor_mouse():
    # write_log("s0", log_path)
    # global timer
    global mouse_listener
    # mouse_listener = mouse.Listener()
    mouse_listener = mouse.Listener(on_move=reset_timer, on_click=reset_timer, on_scroll=reset_timer)

    mouse_listener.start()
    mouse_listener.join()
python pywin32 pynput
1个回答
0
投票
  1. 创建一个单独的脚本,使用
    pynput
    来监视鼠标和键盘。它将在用户会话中运行,而不是作为服务运行。
  2. 使用IPC将数据从脚本发送到服务。
  3. 修改服务以接收IPC发来的数据并进行处理。

简化示例:

# Service
import socket
def start_service():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('localhost', 12345))
    server_socket.listen()
    while True:
        client_socket, addr = server_socket.accept()
        data = client_socket.recv(1024)
        print(f'Received: {data.decode()}')
        client_socket.close()
# Monitoring script
import socket
from pynput import mouse
def on_move(x, y):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 12345))
    client_socket.send(f'Mouse moved to {x}, {y}'.encode())
    client_socket.close()
with mouse.Listener(on_move=on_move) as listener:
    listener.join()
© www.soinside.com 2019 - 2024. All rights reserved.