是否可以防止以全屏模式运行的进程修改鼠标指针的移动?

时间:2018-11-23 13:14:56

标签: windows hardware

在此示例中,我使用的是Windows 10的最新版本。 该应用程序在处于特定状态时,通过使其不可见,居中并始终使其在移动时始终返回原始位置,来防止鼠标指针触碰屏幕边缘。在后台运行监视鼠标移动的简单python脚本时,可以观察到此行为。鼠标指针仅向拖动方向移动几个像素,然后返回到屏幕中心。

问题是,是否有可能在后台运行某个程序,以防止这种指针操纵,并且尽管主程序处于上述状态,也允许鼠标自由移动。 我看到的可能性是要么以某种方式更改正在运行的程序(鉴于已经将其编译为二进制文件,这将非常困难),或者在后台运行一些可以直接访问原始鼠标输入并计算正确值的脚本在给定时间的光标位置。

我实现此目标的第一个尝试是检测并累加光标的所有次要位置更改(在此状态下为屏幕中间(960,600),然后将它们添加到光标坐标之前进入这种状态。在这里,按下键“ v”时,主程序进入此居中状态:

# -*- coding: utf-8 -*-
import keyboard
from time import sleep
import win32api, win32con, win32ui
import numpy

keypress = False
key = 'v'
ww= False

while True:
    curpos = win32api.GetCursorPos()
    if ww:
        if curpos != (960, 600)):
            finalpos = numpy.add(finalpos, numpy.subtract(curpos,initpos))
            initpos = curpos    
    if keypress and not keyboard.is_pressed(key):
        sleep(0.01)
        win32api.SetCursorPos(finalpos)
        keypress = False
        pass
        ww= False
    elif keyboard.is_pressed(key) and not keypress:
        initpos = curpos
        finalpos = curpos
        keypress = True
        ww = True

但是,由于校正光标位置的程度直接与脚本读取更改的速度直接相关(如果要比读取速度快两倍,则此方法对于预期的用途而言太不准确了)将会记录两次更改),因此我看不到完全绕开这种居中机制的任何方法。

1 个答案:

答案 0 :(得分:0)

简短答案:否

长答案:

有多种方法可以实现指针锁定。天真的方法是隐藏和重新放置光标。您正在有效地尝试抵消指针锁定的影响。但是执行指针锁定的应用程序(例如游戏)是理想的效果。所以我不明白您为什么要这么做。

您面临的问题是竞争状况,脚本和应用程序试图更改相同的值;鼠标光标的位置。运行最快的胜利的应用程序,但结果是一团糟。

如果执行指针锁定的应用程序太烦人了,为什么还要在同一台计算机上同时运行它。如果您确实需要在使用系统时在后台运行它,为什么不使用多个虚拟桌面,然后将应用程序放置在一个桌面上,然后再使用另一个桌面。