奇怪, 昨天老出问题. 今天问题全没了, 连 DuplicateHandle 完美了.
最后只有二楼的疑问了:为什么子线程里不能开启回调函数. 这个大坑.
参考代码如下, 这里返回的句柄相当于TC线程ID, 所以直接可以用TC的函数操作了. 如线程暂停,线程恢复
- function DuplicateHandle()
- var hSourceProcess = dllcall("kernel32.dll", "long", "GetCurrentProcess")
- var hSource = dllcall("kernel32.dll", "long", "GetCurrentThread")
- var hTargetProcess = hSourceProcess
- var phTarget = 0
- var fdwAccess = 0
- var bInheritHandle = false
- var fdwOpti** = #2 //DUPLICATE_SAME_ACCESS = 0x00000002
- var ret = dllcall("kernel32.dll", "long", "DuplicateHandle", "long", hSourceProcess, "long", hSource, "long", hTargetProcess, "plong", phTarget, "long", fdwAccess, "long", bInheritHandle, "long", fdwOpti**)
- return phTarget
- end
- function OpenThread()
- var dwDesiredAccess = #3FF //THREAD_ALL_ACCESS
- var bInheritHandle = false
- var dwThreadId = dllcall("kernel32.dll", "long", "GetCurrentThreadId")
- // traceprint(获取错误信息(1))
- // traceprint(dwThreadId)
- var hThread = dllcall("kernel32.dll", "long", "OpenThread", "long", dwDesiredAccess, "long", bInheritHandle, "long", dwThreadId)
- // traceprint(获取错误信息(1))
- // traceprint(hThread)
- return hThread
- end
- 功能 资源释放_点击()
- var hObject = ThreadID4
- dllcall("kernel32.dll", "long", "CloseHandle", "long", hObject)
- 结束
复制代码
|