发表回复 
H 版的重要更新 內置WINAPI
2014-10-13, 20 : 48 (这个帖子最后修改于: 2014-10-13 21 : 16 by kongqir.)
H 版的重要更新 內置WINAPI
看示例:
代码: (全选)
SetTimer,EmptyMem,10000
AhkThread := AhkDllThread()
Loop  
{
    AhkThread.ahktextdll("ExitApp")
    While, AhkThread.ahkReady()
        Sleep, 1
    ToolTip,% A_Index
}
EmptyMem:
    SetProcessWorkingSetSize( h:=OpenProcess(0x001F0FFF, 0, GetCurrentProcessId()), -1, -1 )
    ,CloseHandle(h)
Return

現在H調用GDI之類的系統API,簡單之極,并且速度更快。

速度好像沒有變更快,但相差也不多。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 3用户表示感谢kongqir
2014-10-13, 21 : 33
RE: H 版的重要更新 內置WINAPI
OpenProcess,CloseHandle
是H的函数?还是H直接封装的系统函数?
是自动转换所有的(方便不少),还是部分封装了啊?

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-13, 21 : 43 (这个帖子最后修改于: 2014-10-13 21 : 47 by kongqir.)
RE: H 版的重要更新 內置WINAPI
相當於 DllCall("OpenProcess" ....)
自動調用所有系統API,而且不用擔心寫錯DLL參數。
記得那個WINAPI.AHK嗎?現在更加高效的實現了。

最新的功能,歡迎大家試用反饋。

https://codeload.github.com/HotKeyIt/ahk...zip/master

簡單的示例:
獲取AHK自身命令行
DllCall( "GetCommandLine","Str")
現在可以直接用
GetCommandLine()
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢kongqir
2014-10-13, 23 : 16
RE: H 版的重要更新 內置WINAPI
@kongqir 不用担心写错参数?是指那些固定的参数,如"UInt"变量类型什么的,都自动完成了!?不会这么智能吧..惊呆了..
WINAPI.AHK不记得,没用过

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-13, 23 : 25
RE: H 版的重要更新 內置WINAPI
哇,不用填类型真爽。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢兔子
2014-10-14, 19 : 08 (这个帖子最后修改于: 2014-10-14 19 : 16 by kongqir.)
RE: H 版的重要更新 內置WINAPI
H眾可以嘗試今天的更新。

解決了內存洩露的舊病。
這是L帶來的問題。在L或許副作用不大,進程結束後內存會自動釋放。
但對HDLL卻帶來很多麻煩。
示例:
代码: (全选)
SetBatchLines -1
AhkThread := AhkDllThread()
Loop  
{
AhkThread.ahktextdll("#NoTrayIcon`nToolTip,% " A_Index ",333,333,3`nSleep, 20")
While, !AhkThread.ahkReady()
Sleep, 1
While, AhkThread.ahkReady()
Sleep, 1
ToolTip,% A_Index,111,111
}

重複加載同一個線程,這應該很常見,類似加載同了子標籤。
加載一萬次內存的使用量,會有5M上升到20M。
這是無意義的內存積累。
今天的更新,我加載了12萬次,從5.7上升到7.2M。雖然還是有些漏泄,但已在可容忍範圍。這樣可以放心將子線程子標籤化(像調用子標籤一樣調用子線程)。
這樣困擾H的所有問題幾乎全部解決了。

順便,蘿蔔,在外面就不要說自己用H版了。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢kongqir
2014-10-14, 21 : 23
RE: H 版的重要更新 內置WINAPI
kongqir 提到:像調用子標籤一樣調用子線程
貌似不错..
你的繁体字还真是看不懂啊,特别是最后一句Big Grin

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-18, 12 : 24
RE: H 版的重要更新 內置WINAPI
真的假的?我所有脚本都要改了,奔溃
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-18, 12 : 25
RE: H 版的重要更新 內置WINAPI
nepter 提到:  真的假的?我所有脚本都要改了,奔溃
不会吧?有不兼容吗?命名冲突的问题?
看到N大出现,我要飙泪了..

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-18, 12 : 41 (这个帖子最后修改于: 2014-10-18 12 : 44 by nepter.)
RE: H 版的重要更新 內置WINAPI
(2014-10-18 12 : 25)robertL 提到:  
nepter 提到:  真的假的?我所有脚本都要改了,奔溃
不会吧?有不兼容吗?命名冲突的问题?
看到N大出现,我要飙泪了..
重命名,但不要紧,以后写脚本更方便了,测了下平均比以前多1m内存,看来是自动内部加载了winapi
I'm coming back.
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢nepter
2014-10-18, 16 : 46
RE: H 版的重要更新 內置WINAPI
需要注意的是,虽然会自动加载DLL,但并不会自动从内存卸载。所以如果只是偶尔或者很少调用,从节省内存的角度考虑,还是老方法更加节省。


另外一个地方,引用H大的话:

引用:Note that where we previously used "Int*"/"IntP" or similar we have to use getvar() and also need to init the variable to number var:=0.

For example:

Before: DllCall("QueryPerformanceCounter","Int64*",var)

Now QueryPerformanceCounter(getvar(var:=0))

另,经过测试V2版 ApiCall 要比 DllCall 快一些,但1则慢一些,但H大说要检查什么地方变慢。话说H对V1很不待见,V2一发布他就转去2了。话说我也想转,可是修改了几个常用的库都无法正常使用,所谓有心无力​。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-18, 21 : 46
RE: H 版的重要更新 內置WINAPI
getvar(var:=0)不方便,看起来别扭,&var行吗
还是用老的吧
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合