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
jwu
V2EX  ›  Python

请问Python有啥模块能读取到Windows下面GUI应用程序内的Text Field吗?

  •  
  •   jwu · 2012-02-10 12:21:57 +08:00 · 5356 次点击
    这是一个创建于 4688 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景信息是这样的,我们公司有个GUI的应用程序(数据库管理系统),我需要写一个小工具,能够一键复制到这个GUI程序当前界面下所有Text Field的内容(目前只能用鼠标挨着挨着将其选中,再进行复制),我想用Python来写这个工具,但找了半天找不到合适的模块可以支持的,还请大家帮帮忙,谢谢先!

    p.s. 我之前也想到过用诸如autohotkey这类自动化操作的软件,但效果不好。
    17 条回复    1970-01-01 08:00:00 +08:00
    gastlygem
        1
    gastlygem  
       2012-02-10 15:24:52 +08:00
    Python没有。

    Windows下GUI如果是基于WinForm的,用AutoIt或者AutoHotkey应该可以。如果是基于别的,就可能比较麻烦了。

    另外这些Text Field是些什么内容,可否不通过UI读出来?
    jwu
        2
    jwu  
    OP
       2012-02-10 15:30:11 +08:00
    应该是基于Winform的,因为系统是.net开发的,那我再去试下autoit,谢谢gastlygem
    Text Field就是从数据库中抓出来的一些信息,譬如(其中xxx就是我希望复制出来的内容)
    姓名:xxx
    年龄:xxx
    likai
        3
    likai  
       2012-02-10 15:32:43 +08:00
    数据库出来的?为什么不直接读数据库
    gastlygem
        4
    gastlygem  
       2012-02-10 15:43:51 +08:00
    @likai 说得对。LZ貌似在走很弯的弯路。
    jwu
        5
    jwu  
    OP
       2012-02-10 15:44:47 +08:00
    问题就在于我访问不到数据库...没有这个权限...所以只是想笨办法了
    gastlygem
        6
    gastlygem  
       2012-02-10 15:47:36 +08:00
    是什么数据库?那UI哪来的权限?没权限你可以要权限啊。
    loading
        7
    loading  
       2012-02-10 15:49:48 +08:00
    春运都结束了,还走弯路干嘛。
    avatasia
        8
    avatasia  
       2012-02-10 15:50:55 +08:00
    paython不是万能的。按照ios的设计原则,你的程序是不能访问其他程序的信息的。
    你可以研究下vc, GetWindowText这样的方法,spy++可以帮助你找到窗口句柄。
    jwu
        9
    jwu  
    OP
       2012-02-10 15:51:32 +08:00
    是SQL 2005的数据库,这个UI是研发一并开发的,前后台。公司不给权限,这个工具是为了减轻日常重复工作的...
    avatasia
        10
    avatasia  
       2012-02-10 16:02:53 +08:00
    @jwu 如果是c#的win form, 看下app.config或者用reflector反编译程序,从代码里扒数据库的连接字符串。
    Echoldman
        11
    Echoldman  
       2012-02-10 16:11:01 +08:00
    python本身没有这样的效果。但是python可以混合C语言,lz的需求可以通过Win32 SDK来实现,大致思路如下:通过枚举系统内所有的窗口,找到显示文本的窗口,向该窗口发送消息,然后我记得大概是要求重绘文字并hook之类的,都忘记了。具体你google一下,金山词霸之类的屏幕取词的,都是这么干的。
    gDD
        12
    gDD  
       2012-02-10 16:18:58 +08:00 via iPod
    可以参考NVDA
    jwu
        13
    jwu  
    OP
       2012-02-10 16:24:04 +08:00
    @gDD @avatasia @Echoldman 谢谢大家的思路~
    clino
        14
    clino  
       2012-02-10 16:25:43 +08:00
    看到这个我也是想起了 nvda
    gastlygem
        15
    gastlygem  
       2012-02-10 16:25:43 +08:00
    这个情况俺以前也碰到过,俺是说服自己的老板,然后让自己的老板说服db admin的老板,然后专门给俺开了个帐号。

    @Echoldman @avatasia 的思路令人佩服,不过感觉像是在用技术解决政治问题 :D
    jwu
        16
    jwu  
    OP
       2012-02-10 16:34:23 +08:00
    @gastlygem 理解理解,处理政治问题俺最不拿手了,自己动手丰衣足食哈。我们这套系统开发的人遭就找不着了,也没有后续的开发补上,老板担心我们去弄给它弄坏了没人来修...现在就是大家凑合着用,有新增的需求只有曲线救国。希望下半年就将其换掉啦,换一套基于web的系统,那此类需求实现起来就应该容易了
    VYSE
        17
    VYSE  
       2012-02-12 14:21:24 +08:00
    如果是非标准contrl32里的控件,而且spy 拿不到任何settext相关消息,只能注入dll hook wm_notify 类消息,肯定有设值的msg。
    py可以做壳,另外写专职获取的exe,配合一下即可。
    其实这种需求一般用au3,ahk来做
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:40 · PVG 19:40 · LAX 03:40 · JFK 06:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.