有没有办法在鼠标每次移动时运行一个命令?

有没有办法在鼠标每次移动时运行一个命令?

我想每次移动鼠标时运行一个脚本。

这是制定解决方法的第一步,以便我可以使用100% 的显示器边缘位于它们之间

这可能吗?

答案1

问题实际上是

检测鼠标移动,可以使用多种工具来完成。两个例子:

  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
      
  2. 使用(python 的)也可以使用自己的tkinter 完成完全相同的过程:pythontkinter

    [您需要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

在此示例中,当鼠标从左向右或从右向左移动时,鼠标会跳跃:

在此处输入图片描述

在这种情况下,老鼠跳固定跳跃但是,只要加上一些数学知识,将跳转线移到屏幕右侧(+ 第二个屏幕左上角的单独“安排”),您就可以进行跳转按比例地,创建你在第一个问题中想要的设置:在双屏设置中,让两个屏幕都显示似乎从一个屏幕移动鼠标到另一个屏幕时,垂直分辨率保持不变。

这样,鼠标无法从一个屏幕移动到另一个屏幕的“死角”就不存在了。(我的两个屏幕上都有工作情况)

然而,如果窗口分布在两个屏幕上,仍然会产生奇怪的效果,但这是可以做到的。

在此处输入图片描述

相关内容