鱼C论坛

 找回密码
 立即注册
查看: 348|回复: 11

[已解决]实时获取屏幕鼠标坐在位置的坐标

[复制链接]
发表于 2024-7-15 14:28:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在使用python+vscode 的前提下  如何能够获取屏幕鼠标坐在位置的坐标
最佳答案
2024-7-15 15:00:41
wp231957 发表于 2024-07-15 15:00
这个监听事件  如何取消啊   我用CTRL + C  不管用啊


在使用 `pynput` 监听鼠标事件时,如果 `CTRL + C` 无法停止程序,我们可以使用 `pynput` 提供的停止监听方法。你可以在程序中添加一个键盘监听器,当检测到特定按键(例如 `ESC` 键)时,停止鼠标监听。

下面是一个改进后的示例代码,添加了一个键盘监听器来停止鼠标监听:
from pynput import mouse, keyboard
import threading

# 定义一个全局变量来控制监听器的运行
running = True

def on_move(x, y):
    if running:
        print(f'鼠标移动到 ({x}, {y})')

def on_click(x, y, button, pressed):
    if running:
        if pressed:
            print(f'鼠标点击在 ({x}, {y}) 按钮 {button}')

def on_scroll(x, y, dx, dy):
    if running:
        print(f'鼠标滚动在 ({x}, {y})')

def on_press(key):
    global running
    try:
        if key == keyboard.Key.esc:
            print("监听器停止")
            running = False
            return False  # 停止键盘监听器
    except AttributeError:
        pass

# 启动鼠标监听线程
mouse_listener = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
mouse_listener.start()

# 启动键盘监听线程
keyboard_listener = keyboard.Listener(on_press=on_press)
keyboard_listener.start()

# 保持主线程运行,直到键盘监听器停止
keyboard_listener.join()
mouse_listener.stop()  # 停止鼠标监听器
print("程序已停止")

在这个脚本中,键盘监听器会监听按键事件,当检测到 `ESC` 键被按下时,会将 `running` 设置为 `False` 并停止键盘监听器。鼠标监听器的回调函数在检测到 `running` 为 `False` 后会停止打印信息。最后,主线程会等待键盘监听器停止,然后停止鼠标监听器。

这样,你就可以通过按下 `ESC` 键来停止监听器,避免使用 `CTRL + C` 无效的情况。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-15 14:29:18 | 显示全部楼层
在 Python 中实时获取鼠标位置,可以使用 `pyautogui` 这个库。这个库非常方便,用于控制鼠标和键盘。以下是具体步骤:

1. **安装 `pyautogui` 库**:
   打开终端或命令提示符,然后运行以下命令来安装 `pyautogui`:

pip install pyautogui

2. **编写获取鼠标位置的脚本**:

   下面是一个简单的示例脚本,它会每秒打印一次鼠标当前的位置:

import pyautogui
   import time

   try:
       while True:
           x, y = pyautogui.position()  # 获取鼠标当前位置的坐标
           print(f"鼠标当前位置: (x={x}, y={y})")
           time.sleep(1)  # 每秒打印一次
   except KeyboardInterrupt:
       print("程序已停止")

3. **在 VSCode 中运行脚本**:

   - 打开 VSCode,创建一个新的 Python 文件(例如 `mouse_position.py`),将上面的代码粘贴进去。
   - 保存文件,然后按 `Ctrl + Shift + P` 调出命令面板,输入 `Run Python File` 选择运行当前 Python 文件。

运行这个脚本,你会看到终端每秒钟打印一次鼠标的当前位置坐标。当你不需要继续获取鼠标位置时,可以按 `Ctrl + C` 停止脚本运行。

这个脚本只是一个简单的示例,如果你需要更复杂的功能,比如在特定条件下触发某些操作,`pyautogui` 也提供了很多其他有用的功能,可以查看它的[官方文档](https://pyautogui.readthedocs.io/en/latest/)以了解更多。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-15 14:37:30 | 显示全部楼层
FishC 发表于 2024-7-15 14:29
在 Python 中实时获取鼠标位置,可以使用 `pyautogui` 这个库。这个库非常方便,用于控制鼠标和键盘。以下 ...

嗯,可以实现,但是 特别是 当鼠标点在其他应用模块的窗口内时   还需要把vscode进行小窗口化处理  很麻烦

和使用电脑版微信  ALT+A 实时获取屏幕点坐标 没法比
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-15 14:38:12 | 显示全部楼层
wp231957 发表于 2024-07-15 14:37
嗯,可以实现,但是 特别是 当鼠标点在其他应用模块的 ...


要实现类似于微信的 `ALT+A` 功能,即在不同窗口之间切换并实时获取鼠标位置坐标,可以使用更底层的库,比如 `pynput` 或 `ctypes`。`pynput` 可以监听全局鼠标事件,下面是一个用 `pynput` 实现的示例代码:

1. **安装 `pynput` 库**:

pip install pynput

2. **编写实时获取鼠标位置的脚本**:

   下面是一个使用 `pynput` 获取鼠标位置并在终端实时显示的脚本:

from pynput import mouse
   import threading

   def on_move(x, y):
       print(f'鼠标移动到 ({x}, {y})')

   def on_click(x, y, button, pressed):
       if pressed:
           print(f'鼠标点击在 ({x}, {y}) 按钮 {button}')

   def on_scroll(x, y, dx, dy):
       print(f'鼠标滚动在 ({x}, {y})')

   # 启动鼠标监听线程
   listener = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
   listener.start()

   # 保持主线程运行
   try:
       listener.join()
   except KeyboardInterrupt:
       print("程序已停止")

3. **在 VSCode 中运行脚本**:

   - 打开 VSCode,创建一个新的 Python 文件(例如 `mouse_tracker.py`),将上面的代码粘贴进去。
   - 保存文件,然后按 `Ctrl + Shift + P` 调出命令面板,输入 `Run Python File` 选择运行当前 Python 文件。

运行这个脚本后,你就可以在任何窗口中获取鼠标的位置、点击和滚动事件,并在终端实时显示。这样你就不需要把 VSCode 窗口放在前面,可以随时切换到其他应用程序。

希望这个方法能解决你的问题,能达到你预期的效果!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-15 14:50:04 | 显示全部楼层
FishC 发表于 2024-7-15 14:38
要实现类似于微信的 `ALT+A` 功能,即在不同窗口之间切换并实时获取鼠标位置坐标,可以使用更底层的库 ...

我在用pip list 时  发现  它居然服务于3.8版本   可是py -0  我默认的版本是3.9
我pip时  如何能pip 到3.9里呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-15 14:51:17 | 显示全部楼层
wp231957 发表于 2024-07-15 14:50
我在用pip list 时  发现  它居然服务于3.8版本   可 ...


在系统上可能会有多个版本的 Python 安装,为了确保你安装的库对应到正确的 Python 版本,你需要明确指定使用哪个版本的 `pip`。以下是一些常见的方法:

### 方法一:使用 `python3.9 -m pip` 命令

1. 使用具体的 Python 版本调用 `pip` 安装库:
python3.9 -m pip install pynput

这条命令会确保 `pynput` 库安装到 Python 3.9 版本中。

### 方法二:使用虚拟环境

创建一个虚拟环境,确保所有库都安装到特定的 Python 版本中。

1. 创建一个虚拟环境,指定 Python 3.9 版本:
python3.9 -m venv myenv

2. 激活虚拟环境:

- 在 Windows 上:
myenv\Scripts\activate

- 在 macOS/Linux 上:
source myenv/bin/activate

3. 激活虚拟环境后,使用 `pip` 安装所需的库:
pip install pynput

在虚拟环境中,`pip` 命令会默认安装到该虚拟环境中的 Python 版本。

### 方法三:指定 `pip3.9`

你也可以直接使用 `pip3.9` 命令(如果你的系统已经配置了这个命令):
pip3.9 install pynput

### 检查库是否安装到正确的 Python 版本

你可以通过检查具体的 Python 版本来确认库是否安装成功:

1. 打开 Python 3.9 的交互式解释器:
python3.9

2. 在解释器中尝试导入库:
import pynput
print(pynput.__version__)

如果没有错误并且显示了版本号,说明库已经正确安装到该 Python 版本中。

希望这些方法能帮你顺利地将库安装到正确的 Python 版本中!如果还有其他疑问,随时欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-15 15:00:21 | 显示全部楼层
FishC 发表于 2024-7-15 14:38
要实现类似于微信的 `ALT+A` 功能,即在不同窗口之间切换并实时获取鼠标位置坐标,可以使用更底层的库 ...

这个监听事件  如何取消啊   我用CTRL + C  不管用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-15 15:00:41 | 显示全部楼层    本楼为最佳答案   
wp231957 发表于 2024-07-15 15:00
这个监听事件  如何取消啊   我用CTRL + C  不管用啊


在使用 `pynput` 监听鼠标事件时,如果 `CTRL + C` 无法停止程序,我们可以使用 `pynput` 提供的停止监听方法。你可以在程序中添加一个键盘监听器,当检测到特定按键(例如 `ESC` 键)时,停止鼠标监听。

下面是一个改进后的示例代码,添加了一个键盘监听器来停止鼠标监听:
from pynput import mouse, keyboard
import threading

# 定义一个全局变量来控制监听器的运行
running = True

def on_move(x, y):
    if running:
        print(f'鼠标移动到 ({x}, {y})')

def on_click(x, y, button, pressed):
    if running:
        if pressed:
            print(f'鼠标点击在 ({x}, {y}) 按钮 {button}')

def on_scroll(x, y, dx, dy):
    if running:
        print(f'鼠标滚动在 ({x}, {y})')

def on_press(key):
    global running
    try:
        if key == keyboard.Key.esc:
            print("监听器停止")
            running = False
            return False  # 停止键盘监听器
    except AttributeError:
        pass

# 启动鼠标监听线程
mouse_listener = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
mouse_listener.start()

# 启动键盘监听线程
keyboard_listener = keyboard.Listener(on_press=on_press)
keyboard_listener.start()

# 保持主线程运行,直到键盘监听器停止
keyboard_listener.join()
mouse_listener.stop()  # 停止鼠标监听器
print("程序已停止")

在这个脚本中,键盘监听器会监听按键事件,当检测到 `ESC` 键被按下时,会将 `running` 设置为 `False` 并停止键盘监听器。鼠标监听器的回调函数在检测到 `running` 为 `False` 后会停止打印信息。最后,主线程会等待键盘监听器停止,然后停止鼠标监听器。

这样,你就可以通过按下 `ESC` 键来停止监听器,避免使用 `CTRL + C` 无效的情况。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-15 15:04:59 | 显示全部楼层
FishC 发表于 2024-7-15 15:00
在使用 `pynput` 监听鼠标事件时,如果 `CTRL + C` 无法停止程序,我们可以使用 `pynput` 提供的停止监 ...

vscode中   import threading  后面的threading会出现波浪线  然后点击会有下面的信息

能否取消这个波浪线

"d:\Python39\Lib\threading.py"正在替代 stdlib 模块"threading"PylancereportShadowedImports
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-15 15:05:10 | 显示全部楼层
wp231957 发表于 2024-07-15 15:04
vscode中   import threading  后面的threading会出现 ...


这波浪线提示(“shadowed imports”警告)是由 Pylance(VSCode 的 Python 扩展之一)触发的,它检测到你的目录中有一个自定义的 `threading` 模块,覆盖了 Python 标准库的 `threading` 模块。

为了避免这个问题并取消波浪线提示,可以按照以下几种方法进行解决:

### 方法一:重命名本地文件

检查一下你当前的工作目录中有没有一个名为 `threading.py` 的文件。如果有的话,将它重命名为其他名称,以避免与标准库冲突。

### 方法二:配置 Pylance 禁用特定警告

如果你没有自己创建 `threading.py` 文件,可以通过配置 VSCode 来禁用特定的警告。

1. 打开 VSCode 设置文件(`.vscode/settings.json`)。如果这个文件不存在,可以手动创建。
2. 加入以下配置来禁用 `reportShadowedImports` 警告:
{
    "python.analysis.diagnosticSeverityOverrides": {
        "reportShadowedImports": "none"
    }
}

这样,VSCode 就不会再提示这个特定的警告了。

### 方法三:使用虚拟环境

使用虚拟环境可以将你的项目依赖与系统的全局依赖隔离开,避免各种潜在的冲突。

1. 创建并激活虚拟环境(参考前面提到的如何创建和激活虚拟环境的步骤)。

2. 在虚拟环境中安装所需的库,并运行代码。

### 检查项目根目录

确保你的项目根目录下没有任何与标准库相同名称的文件或文件夹,这些文件会遮蔽掉标准库的模块。

希望这些方法能够帮助你解决问题,并顺利取消波浪线提示。如果你有其他问题或需要进一步的帮助,请随时告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 14:39:05 | 显示全部楼层
FishC 发表于 2024-7-15 15:05
这波浪线提示(“shadowed imports”警告)是由 Pylance(VSCode 的 Python 扩展之一)触发的,它检测 ...

如果给你一个比较大的数字比如
1234567891
你咋能快速的知道他是一个质数  还是一个合数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 14:39:40 | 显示全部楼层
wp231957 发表于 2024-07-16 14:39
如果给你一个比较大的数字比如
1234567891
你咋能快 ...


判断一个大数是否为质数(素数)可以通过多种方法实现,其中一些方法非常高效。以下是几种常见的方法和一个 Python 实现示例:

### 方法一:朴素试除法

这种方法适合较小的数字,对于大数效率不高。它通过尝试将数字除以小于其平方根的所有素数来确定是否为素数。

### 方法二:埃拉托斯特尼筛法

这是一种筛选法,适用于生成较小范围内的所有素数,但对于单个大数的判定不太适用。

### 方法三:费马素性测试

这种方法是基于费马小定理的概率测试,适用于较大的数字,但不能确定地判断某数是否为素数。

### 方法四:Miller-Rabin素性测试

这是一个概率算法,通过重复多次测试可以非常高效地判断一个大数是否为素数。以下是 Python 实现的 Miller-Rabin 素性测试:
import random

def is_prime(n, k=5):
    """使用Miller-Rabin素性测试判断一个数是否为素数"""
    
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0:
        return False

    # 找到 d 和 r 使得 n-1 = d * 2^r
    r, d = 0, n - 1
    while d % 2 == 0:
        d //= 2
        r += 1

    # 进行 k 次测试
    for _ in range(k):
        a = random.randint(2, n - 2)
        x = pow(a, d, n)
        if x == 1 or x == n - 1:
            continue
        for _ in range(r - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

# 测试数字
number = 1234567891
if is_prime(number):
    print(f"{number} 是一个质数")
else:
    print(f"{number} 是一个合数")

### 解释:

1. **基本检查**:首先排除一些小数和偶数的情况。
2. **找到 `d` 和 `r`**:使得 `n-1` 可以表示为 `d * 2^r`。
3. **进行 k 次测试**:选择一个随机数 `a`,通过快速幂算法计算 `a^d % n`,然后进行多次平方操作。如果在任何一次测试中都没有通过,那么 `n` 可能是合数。

### Miller-Rabin 素性测试的优点:

- 它的效率高,适用于较大的数。
- 通过增加测试次数 `k` 可以提高结果的可靠性。

这个方法在实践中被广泛使用,并且在大多数情况下可以快速、可靠地判断一个大数是否为素数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表