请问 pyautogui 与 autohotkey 哪个强大一些,用过一段时间的 autohotkey 感觉语法不太舒服,变量很诡异。写过些 autohotkey 的脚本,想用 pyautogui 重写。 - 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
meloncrashed
V2EX    Python

请问 pyautogui 与 autohotkey 哪个强大一些,用过一段时间的 autohotkey 感觉语法不太舒服,变量很诡异。写过些 autohotkey 的脚本,想用 pyautogui 重写。

  •  
  •   meloncrashed 2015-11-22 03:09:13 +08:00 8606 次点击
    这是一个创建于 3611 天前的主题,其中的信息可能已经有所发展或是发生改变。
    14 条回复    2019-04-02 18:56:58 +08:00
    dsp2138
        1
    dsp2138  
       2015-11-22 11:00:47 +08:00   1
    aauto
    mathgl
        2
    mathgl  
       2015-11-22 12:39:07 +08:00 via Android   1
    以前用 autoit 做过一个外单,感觉比 autohotkey 好用。
    joshz
        3
    joshz  
       2015-11-22 13:48:26 +08:00   1
    语言设计上明显 autoit 更好,不过 ahk 更普及,脚本更好找,目前加入了 OO ,能力不相上下了。 ahk 开源,还有一些黑科技,比如使用单个 modifier 键控制。总体还是看个人喜好, pyautogui 我没用过,不了解。
    g00001
        4
    g00001  
       2015-11-22 19:51:23 +08:00
    autoit ,以及基于 autoit 山寨出来的 ahk ,一个最主要的功能就是模拟操作控制外部的句柄窗口十几个函数(这两软件曾经为了这十几个函数的所有权打的不可开交),不过现在 direct ui 流行,基本都是无句柄窗口了,这种模拟按键的软件有些过时了。

    说到 autoit 的语言设计,真是不敢恭维,
    简单的一个调用 WINAPI 的代码,用 aardio( aauto ) 写只要一句。

    var tm = time() //创建 SYSTEMTIME
    var filetime = ::FILETIME() //创建 FILETIME
    ::Kernel32.SystemTimeToFileTime(tm,filetime) //调用 API 函数

    改成 autoit 来写吧,比写命令行还麻烦:
    ------------------------------------------------------------------
    $SYSTEMTIME = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
    $lpSYSTEMTIME = DllStructGetPtr($SYSTEMTIME)
    $LOCALFILETIME=DllStructCreate("dword;dword")
    $lpLOCALFILETIME = DllStructGetPtr($LOCALFILETIME)
    DllStructSetData($SYSTEMTIME, 1, $Year)
    DllStructSetData($SYSTEMTIME, 2, $Month)
    DllStructSetData($SYSTEMTIME, 3, _DateToDayOfWeek($Year,$Month,$Day)-1)
    DllStructSetData($SYSTEMTIME, 4, $Day)
    DllStructSetData($SYSTEMTIME, 5, $Hour)
    DllStructSetData($SYSTEMTIME, 6, $Minute)
    DllStructSetData($SYSTEMTIME, 7, 0)
    DllStructSetData($SYSTEMTIME, 8, 0)
    $result = DllCall("kernel32.dll", "long", "SystemTimeToFileTime", "ptr", $lpSystemTime, "ptr", $lpLocalFileTime)
    If $result[0] = 0 Then
    Local $lastError = DllCall("kernel32.dll", "int", "GetLastError")
    SetExtended($lastError[0])
    SetError(1)
    Return 0
    EndIf
    Hyperion
        5
    Hyperion  
       2015-11-23 08:14:17 +08:00 via Android   1
    @g00001 这是库设计的问题,请看一下手册里的 winapi 库,有提供封装…←_←
    jiezg
        6
    jiezg  
       2015-11-23 08:27:10 +08:00
    @dsp2138 现在改名字了 不过这个真赞
    qzane
        7
    qzane  
       2015-11-23 17:57:32 +08:00   1
    没有可比性吧...pyautogui 现在只能控制鼠标+键盘+截屏, hotkey 功能在计划中但暂时还没实现。主要的优势在于跨平台吧,其实看源码,至少 win 下面的部分接口很简单,即使用 c 写也不麻烦。
    meloncrashed
        8
    meloncrashed  
    OP
       2015-11-23 19:02:25 +08:00
    @qzane 新人才看完基础的 c, 想练练手请问完成自动控制在 windows7 下,需要使用什么库呀,大致几个步骤? 可以点指导方向嘛。谢谢
    meloncrashed
        9
    meloncrashed  
    OP
       2015-11-23 19:04:28 +08:00
    Windows Automation API
    只用这一个 api 就够了嘛?
    meloncrahed
        10
    meloncrashed  
    OP
       2015-11-23 19:08:43 +08:00
    @Hyperion 新人才看完基础的 c, 想练练手请问完成自动控制在 windows7 下,需要使用什么库呀,大致几个步骤? 可以点指导方向嘛。谢谢
    Hyperion
        11
    Hyperion  
       2015-11-23 19:33:06 +08:00
    @meloncrashed ahk 的语法太奇葩, 如果还是想用这类工具, 要么耐心学下 ahk 的各种魔法语句... 要么可以学习下 autoit, 有国内汉化版本, 但很久很久不更新了.

    其他语言没有用过, 所以也不好推荐.
    qzane
        12
    qzane  
       2015-11-26 20:59:14 +08:00   1
    @meloncrashed 直接 windows.h 就行,样例:
    c
    #include <windows.h>

    void LeftClick ( )
    {
    INPUT Input={0};
    // left down
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
    SendInput(1,&Input,sizeof(INPUT));

    // left up
    ZeroMemory(&Input,sizeof(INPUT));
    Input.type = INPUT_MOUSE;
    Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
    SendInput(1,&Input,sizeof(INPUT));
    }
    ```
    meloncrashed
        13
    meloncrashed  
    OP
       2015-12-01 23:21:02 +08:00
    @qzane 谢谢
    yinkaisheng
        14
    yinkaisheng  
       2019-04-02 18:56:58 +08:00
    我用 python 封装了一个 Windows UI 自动化模块
    https://github.com/yinkaisheng/Python-UIAutomation-for-Windows
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5604 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powere by solitude
    VERSION: 3.9.8.5 24ms UTC 07:53 PVG 15:53 LAX 00:53 JFK 03:53
    Do have faith in what you're doing.
    ubao 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