推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
zictos
V2EX  ›  Python

Python 能获取光标(非鼠标)位置吗?

  •  
  •   zictos · Dec 28, 2020 · 4185 views
    This topic created in 2144 days ago, the information mentioned may be changed or developed.

    是文本输入框中那个一闪一闪的竖条的光标,不是鼠标位置,有时候鼠标和这个的位置是不一样的。
    查了很多资料发现提供的都是获取鼠标位置的方法。

    这个 win32gui.GetCaretPos()不知道是不是,但始终返回(0,0)。

    17 replies  •  2020-12-29 10:13:48 +08:00
    Thymolblue
    Thymolblue
    Dec 28, 2020
    1
    可以试一试 selenuim find element
    zictos
    zictos
    OP
    Dec 28, 2020
    2
    @Thymolblue #1 不是在网页里面
    xupefei
    xupefei
    Dec 28, 2020
    3
    用 GetGUIThreadInfo 的 pgui.hwndCaret 和 pgui.rcCaret
    zictos
    zictos
    OP
    Dec 28, 2020
    4
    这段 c++代码经测试可用,可以用 python 调用,不过还是有一些程序无法获取。看来这个确实没有比较完美的解决方案:
    https://blog.csdn.net/qq78442761/article/details/104110482
    lcdtyph
    lcdtyph
    Dec 28, 2020 via iPhone
    5
    如果是标准 win text editor 可以用 EM_GETSEL 窗口消息获取当前光标位置(或选区)
    lxilu
    lxilu
    Dec 28, 2020 via iPhone
    6
    文本光标;考虑 UI Automation
    ysc3839
    ysc3839
    Dec 29, 2020 via Android
    7
    怀疑是 X-Y Problem https://coolshell.cn/articles/10804.html
    建议说说原始需求。
    zictos
    zictos
    OP
    Dec 29, 2020❤️1
    8
    @ysc3839 #7 的确没原始需求了,本来是打算每次按 ctrl+c 复制文本时直接在屏幕上的光标位置显示“复制成功”,因为有时候 ctrl+c 会偶尔有失效的情况,所以有时候保险起见会多次按 ctrl+c 。
    我输入文字的时候为防止意外情况一般都会每隔一段时间就按一下 ctrl+c,比如在网站上发言以及一些不能自动保存的编辑器的时候。
    但后来才想起来复制文本时并不一定存在“输入光标”,比如有时候网页上不能编辑的位置的文字复制时就没有“输入光标”。
    所以直接在鼠标所在位置提示就行了,一开始主要是追求完美,当时屏幕显示文字方面等其他问题都搞定了,就差这个问题。

    这种功能可能游戏脚本或者一些其他鼠标键盘的自动化脚本会有用到的需求,一般的确用不到。但“凭想象”来说只要系统提供这样的接口的话一般应该是可以实现,并不是什么特别复杂的功能。
    Trim21
    Trim21
    Dec 29, 2020
    9
    import pyautogui

    r = pyautogui.position()
    print(r)
    Trim21
    Trim21
    Dec 29, 2020
    10
    @Trim21 #9 看了 8 楼了回复理解错了,以为是想找鼠标位置,无视我...
    VeryZero
    VeryZero
    Dec 29, 2020
    11
    这个貌似不太好完美实现,因为个人认为这个「光标」没有统一的实现,不同的应用实现机制不一样。

    最直观的例子,win form 和浏览器获取方式就不一样
    AndyAO
    AndyAO
    Dec 29, 2020
    12
    @VeryZero #9
    同意!这个需求可能是根本无法实现的,或者说实现方法非常的繁琐.
    AndyAO
    AndyAO
    Dec 29, 2020
    13
    不过知道在 Win32 标准控件,或者实现某个接口的窗口中能稳定实现的方式也不错,有比没有好.
    AndyAO
    AndyAO
    Dec 29, 2020
    14
    其实我也有这个需求,但感觉不值得花那么多时间,所以就直接在光标(鼠标)处显示了.
    AndyAO
    AndyAO
    Dec 29, 2020
    15
    @zictos #4 刚看到 4 楼,有一些程序无法获取是正常的,如果能够获取反而是不正常的.
    est
    est
    Dec 29, 2020
    16
    这个跟语言没关系吧。找个操作系统对应的 GUI 调用方式,直接撸 API 好了。
    karatsuba
    karatsuba
    Dec 29, 2020
    17
    没有
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2297 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 12:56 · PVG 20:56 · LAX 04:56 · JFK 07:56
    ♥ Do have faith in what you're doing.