找回密码
 加入
搜索
查看: 14509|回复: 38

[AU3基础] autoit的不足主要有哪些?

 火... [复制链接]
发表于 2012-11-9 14:34:10 | 显示全部楼层 |阅读模式
刚接触autoit,觉得它非常强大,与c++等语言不同点主要是,它主要是用来做自动化方面功能的,
模拟键盘鼠标操作很便捷,编程简单,就是不知与C++等相比,有哪些不足,比如不支持多线程等?
主要是了解一下,我知道与C++比,各有各的优点和用途。

评分

参与人数 1金钱 +10 收起 理由
annybaby + 10 欢迎光临AU3中文论坛

查看全部评分

发表于 2012-11-9 14:49:47 | 显示全部楼层
回复 1# cntxp

看来又是一个高手使用AU3了,欢迎~~
1.不支持多线程(也可能是不太方便,可以用多进程简单模拟下)
2.执行效率不高(脚本语言大多数都无法和编译型语言拼效率)
3.容易被反出源码
4.由于第3点的原因,我们需要保护源码时会进行代码迷惑,但此功能还不是很完善,一些函数不支持,对中文支持也不太好(论坛有朋友想出解决的办法,只是有些不便)
发表于 2012-11-9 15:09:59 | 显示全部楼层
au3没有真正的进行编译,更合适的说法是打包。
发表于 2012-11-9 15:35:04 | 显示全部楼层
回复 3# haijie1223


   是的,看Wrapper.exe就知道了,封装,打包~~
所以要完全的防止反编译很困难
发表于 2012-11-9 17:52:36 | 显示全部楼层
最主要還是卡死在不支援多行緒 ( Multi-Thread) 及效率頗差。

[1] Multi-Thread

多行緒問題在官網上已名言,AutoIt 它不打算做 Multi-Thread 支援
( 在猜若做 Multi-Thread ,有很多已開發之 UDFs 必須重新開發,如亂數、視窗等)

[2] Effective

可能小弟已習慣以 C/C++/VC/C# Coding,效率拿來和 AutoIt 做比較實在是...

其它的缺點可能是小弟本身偏見了 ( 沒有 bitwise 操作、Struct 建立繁雜、沒有 物件導向 (Object Orient) 概念 )。

另外 AU 這份語言當時設計是以輕巧方便、容易撰寫為主,要開發大型程式恐怕不是首選,
不然這份程式語言優點還頗多的。

评分

参与人数 1金钱 +10 收起 理由
annybaby + 10 学习了~~

查看全部评分

发表于 2012-11-11 00:15:09 | 显示全部楼层
回复 5# edisonx


    主要是学习学习繁体中文各种术语的说法
发表于 2012-11-11 01:48:38 | 显示全部楼层
本帖最后由 netegg 于 2012-11-11 01:53 编辑

回复 5# edisonx
bitwise oprator没有吗?后面那半句怎么理解,struct建立繁杂是指什么,用c不麻烦吗?对象导向?是没有还是另有所指?
说到多线程,谁能帮扫下盲,哪种脚本是自身可以做的?
效率不想多说什么,解释型语言和编译型语言本来就没可比性
发表于 2012-11-11 11:50:37 | 显示全部楼层
適用性與需要性的選擇。
像我(個人偏好),比較喜歡:
快速解決問題,不寫大程式,容易上手...
就像肚子餓了,來個方便麵,解決問題就 ok!
so... I like AutoIt.
发表于 2012-11-11 18:39:27 | 显示全部楼层
本帖最后由 edisonx 于 2012-11-11 19:37 编辑

回复 7# netegg

小弟可能必須把上面的說法再詳細一些,
一些部份可能是比較「主觀」的

>> bitwise oprator没有吗?

AutoIt 有 Bitwise operator 沒錯,但個人是覺得很難用,且最大的問題在於:
AutoIt 沒辦法 明確指定 資料型態 ( Data Type ),
也可能我對 AU 之資料型態轉型 (浮點數 與 整數 特性差很多) 很不熟,
故擔心貿然使用會造成未定義行為 (Undefined Behavior)。
另 AutoIt 沒有 XOR 運算 ( 這個運算對寫低階而言是很重要就是了 )

>> 后面那半句怎么理解,struct建立繁杂是指什么,用c不麻烦吗?对象导向?是没有还是另有所指?

struct 在 C 的使用泛,要做宣告 (declared) 還是整個 assigned 都沒那麼複雜,舉個例子,用兩個整數表示一個點
typedef struct tagPoint {
    int x, y;
}Point;

Point pt1 = {10,20};
Point pt2, pt3;
pt2.x = 5;
pt2.y = 10;

pt3 = pt2; // copy memory context of pt2 to pt3
上面這段在 au3 應不是簡單幾行可完成。

另外提到的 物件導向( Object Orient, 对象导向),這本質上是一個概念, C 也不好實作 (網上有份 pdf 叫  OOC,用 C 實作 Object Orient,有興趣可參閱),C++ 本身便有此概念,而 AutoIt 也無此概念。

>> 说到多线程,谁能帮扫下盲,哪种脚本是自身可以做的?

基本上這點同意。

>> 效率不想多说什么,解释型语言和编译型语言本来就没可比性

或許直譯式 (Interpreter ,解釋型) 和 編譯式 (Compiler) 型程式語言本身的差距本身就有些部份是一定有的,但原意僅是說明,AutoIt,在執行大量運算時,效率真的不佳。

以上,若認為小弟發言有所誤失,或一些名詞不清楚,歡迎各位網友不吝留言指正,謝謝各位。
发表于 2012-11-11 18:59:11 | 显示全部楼层
本帖最后由 netegg 于 2012-11-11 19:11 编辑

local $tPoint = dllstructcreate( 'int;int;')
dllstructsetdata($tPoint, 1, 10)
dllstructsetdata($tPoint, 2, 20)
内存那段不清楚,这个似乎不好办

BitXOR ( 数值1, 数值2 [, 数值 n] ) 异或运算,怎么没有

另,面向对象本来就不是autoit干的活
发表于 2012-11-11 19:10:43 | 显示全部楼层
本帖最后由 edisonx 于 2012-11-11 19:39 编辑

回复 10# netegg


    ok 我要說的是「不便」,不是「不能」。

假設一份 struct 裡面有 10 多個成員,分別是 int a, int b, ..., int i,
au 怎做初始化?也只能一個一個 assigned 了吧?


local $$tagPoint = "int a;int b;int c;....;int i;"
$tPoint = DllStructCreate($tagPoint)
dllstructsetdata($tPoint, 1,1)
dllstructsetdata($tPoint, 2,2)
dllstructsetdata($tPoint, 3,3)
...
dllstructsetdata($tPoint, 10,10)


c 蠻容易完成的
typedef struct tagPoint {
   int a, b, c, d, e, f, g, h, i;
}Point;
Point tPoint = {1,2,3,4,5,6,7,8,9,10};
再來是,假設多了一個 tPoint2,其內容和 tPoint 一樣的話,怎麼做?
好一點的是用 loop 完成

$tPoint2 = DllStructCreate($tagPoint)
For $i = 1 To 10
    dllstructsetdata($tPoint2, dllstructsetdata($tPoint1, $i), $i)
Next


c / c++ 的話
Point tPoint2 = tPoint;

// Point tPoint2;
// tPoint2 = tPoint;
如一開始所說,這部份應已屬個人偏見 ,
( 唯樓者也和小弟一樣,從 C/C++ 轉摸 AU),
AU  不是不能做到,而是「小弟覺得」相較之下,沒有 C/C++ 來得方便。

----------
>> 面向对象本来就不是autoit干的活
所以我說,因為沒有面向對象,所以可能「較不會是大型專案之首選」,
這不就是樓主相知道「AutoIt 有什麼缺點」的部份嗎?

最後感謝您提到 BitXOR,當時看 help 時漏看了,這點是我學不專精,謝謝您。
发表于 2012-11-11 19:12:57 | 显示全部楼层
本帖最后由 netegg 于 2012-11-11 19:17 编辑

$tagS='int[10];'
这个好像有点问题,没多大印象了

转语言不可避免有比较,原来语言下的习惯不是容易就改得了的,这个无可厚非
发表于 2012-11-11 19:18:19 | 显示全部楼层
任何软件都不可能完美.
发表于 2012-11-11 19:23:11 | 显示全部楼层
本帖最后由 edisonx 于 2012-11-11 19:26 编辑

回复 12# netegg


    以上例是可以沒錯,但若有必要,創建像

    WNDCLASS 這麼複雜的 struct 時呢?
WNDCLASS myWnd = {
   0, myWndProc, 0, 0, hInstance, LoadIcon(NULL, IDI_APPLICATION),
   LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW+1),
   NULL, "Hello, World!!"
};
這只是個舉例,實際上我也知道填這 struct 機會不多,但若真要填到成員 (member) 為數不少的 struct 時,小弟認為 AU 使用之步驟比 C 語言繁雜 (不是辦不到),這才是本意 (也可看作小弟對 AU 很不熟悉才有此感) 。

>> 转语言不可避免有比较,原来语言下的习惯不是容易就改得了的,这个无可厚非

這點我同意您的看法,唯只是因樓主與小弟情況相仿,故認為可多提一點小弟轉過來時候所遇到的問題,避免其多走冤路,因樓主最後一句話是

主要是了解一下,我知道与C++比,各有各的优点和用途
发表于 2012-11-11 19:26:30 | 显示全部楼层
本帖最后由 netegg 于 2012-11-11 19:27 编辑

回复 14# edisonx
这个怕是很麻烦了,不过看这个名称,应该是个窗口类,不应该归在结构里了吧

结构嵌套确实很麻烦
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 20:38 , Processed in 0.088718 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表