答案1
问题实际上是
检测鼠标移动,可以使用多种工具来完成。两个例子:
xdotool
在脚本中使用:
[您需要xdotool
安装]:sudo apt-get install xdotool
比较(循环中)两个鼠标位置,间隔一个时间间隔:
获取鼠标位置的命令如下xdotool
:$ xdotool getmouselocation x:1449 y:137 screen:0 window:79691788
如果我们在(python)脚本中解析此输出,我们可以让它在鼠标移动时运行命令(如果 position1 不等于 position2):
#!/usr/bin/env python3 import subprocess import time def get_mousepos(): curr = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8") return [int(it.split(":")[1]) for it in curr.split()[:2]] current1 = get_mousepos() while True: time.sleep(0.5) current2 = get_mousepos() if not current1 == current2: # run a command: print("action") current1 = current2
使用(python 的)也可以使用自己的
tkinter
完成完全相同的过程:python
tkinter
[您需要
tkinter3
安装]:sudo apt-get install python3-tk
该脚本使用
tkinter
:#!/usr/bin/env python3 from tkinter import* import time root = Tk() def current_position(): return [root.winfo_pointerx(), root.winfo_pointery()] pos1 = current_position() while True: time.sleep(0.5) pos2 = current_position() if not pos1 == pos2: # run a command: print("action!") pos1 = pos2 root.mainloop()
与您的目标相关的示例
一个示例,说明如何控制鼠标越界时运行什么命令某一职位(行)以下。
#!/usr/bin/env python3
import subprocess
def get_mousepos():
curr = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
return [int(it.split(":")[1]) for it in curr.split()[:2]]
current1 = get_mousepos()
while True:
current2 = get_mousepos()
# make the jump depend on the position and direction:
jump = 100 if current2[1] < 525 else -100
if current2[0] < 1000 and current1[0] >= 1000:
print("gone left") # you can run any other command here, like:
subprocess.Popen(["xdotool", "mousemove", str(current2[0]), str(current2[1]+jump)])
elif current2[0] > 1000 and current1[0] <= 1000:
print("gone right") # you can run any other command here
subprocess.Popen(["xdotool", "mousemove", str(current2[0]), str(current2[1]-jump)])
current1 = current2
在此示例中,当鼠标从左向右或从右向左移动时,鼠标会跳跃:
在这种情况下,老鼠跳固定跳跃但是,只要加上一些数学知识,将跳转线移到屏幕右侧(+ 第二个屏幕左上角的单独“安排”),您就可以进行跳转按比例地,创建你在第一个问题中想要的设置:在双屏设置中,让两个屏幕都显示似乎从一个屏幕移动鼠标到另一个屏幕时,垂直分辨率保持不变。
这样,鼠标无法从一个屏幕移动到另一个屏幕的“死角”就不存在了。(我的两个屏幕上都有工作情况)
然而,如果窗口分布在两个屏幕上,仍然会产生奇怪的效果,但这是可以做到的。