V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2020-12-28 19:57:19 +08:00 · 3305 次点击
    这是一个创建于 1445 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    最直观的例子,win form 和浏览器获取方式就不一样
    AndyAO
        12
    AndyAO  
       2020-12-29 09:56:13 +08:00
    @VeryZero #9
    同意!这个需求可能是根本无法实现的,或者说实现方法非常的繁琐.
    AndyAO
        13
    AndyAO  
       2020-12-29 09:56:50 +08:00
    不过知道在 Win32 标准控件,或者实现某个接口的窗口中能稳定实现的方式也不错,有比没有好.
    AndyAO
        14
    AndyAO  
       2020-12-29 09:57:28 +08:00
    其实我也有这个需求,但感觉不值得花那么多时间,所以就直接在光标(鼠标)处显示了.
    AndyAO
        15
    AndyAO  
       2020-12-29 09:57:58 +08:00
    @zictos #4 刚看到 4 楼,有一些程序无法获取是正常的,如果能够获取反而是不正常的.
    est
        16
    est  
       2020-12-29 10:09:49 +08:00
    这个跟语言没关系吧。找个操作系统对应的 GUI 调用方式,直接撸 API 好了。
    karatsuba
        17
    karatsuba  
       2020-12-29 10:13:48 +08:00
    没有
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1586 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:45 · PVG 00:45 · LAX 08:45 · JFK 11:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.