请问Python有啥模块能读取到Windows下面GUI应用程序内的Text Field吗? - V2EX
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 5770 次点击
    这是一个创建于 5062 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景信息是这样的,我们公司有个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     Solana     2787 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:00 PVG 15:00 LAX 23:00 JFK 02:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86