AHK没有新建线程的命令,这个函数解决这个问题。
Code: Select all
#Persistent
CreateThread("A",5)
MsgBox,测试
A(a){
MsgBox % a
}
例如弹出菜单时,连热键都会失效。
Code: Select all
#Persistent
CreateThread("A",5)
Menu, Test, Add,Test1,Test
Menu, Test, Add,Test2,Test
Menu, Test, Show
Test:
return
A(a){
Loop
{
ToolTip,% A_Index
Sleep, 200
}
}
Code: Select all
CreateThread(f,b*){
static Type:=(A_PtrSize=8) ? "Ptr":"UInt", h:=[]
if (n:=A_EventInfo) and (f:=h[n])
{
s:= h[n "_"],s.func.(f*)
DllCall("TerminateThread", Type, s.ID, Type, 0)
DllCall("CloseHandle", Type, s.ID)
DllCall("GlobalFree", Type,s.RC)
h.Remove(n "_"),h.Remove(n,"")
}
else if d:=IsFunc(f)
{
h[n:=&b]:=b,s:=h[n "_"]:={func:f}
s.RC:=RegisterCallback("CreateThread","F",1,n)
s.ID:=DllCall( "CreateThread", Type,0, Type,0, Type,s.RC, Type,0, Type,0, Type,0)
}
}