#Requires AutoHotkey v2.0
CATIA := ComObjActive("CATIA.Application")
; 定义 WinAPI 函数
CreateThread := "Kernel32\CreateThread"
WaitForSingleObject := "Kernel32\WaitForSingleObject"
CloseHandle := "Kernel32\CloseHandle"
; 定义 等待 函数的调用,而不使用自带Sleep函数
Pause(milliseconds) {
DllCall("kernel32.dll\Sleep", "UInt", milliseconds)
}
; 线程函数
ThreadFunc(Param) {
Loop 10 {
Pause(2000) ;如果用AHK的Sleep会阻塞线程.
GroupAdd("弹窗标题", "超级输入消息")
GroupAdd("弹窗标题", "Power Input Message")
winID := WinExist("ahk_group 弹窗标题")
if winID != 0 {
PostMessage(0x0010, 0, 0, , winID) ; 0x0010 是 WM_CLOSE 消息, 测试不能使用WinClose, 会阻塞线程.
break
}
}
return 0 ; 返回 DWORD 类型
}
; 创建线程
hThread := DllCall(
CreateThread,
"Ptr", 0, ; lpThreadAttributes (安全属性,通常为 0)
"UInt", 0, ; dwStackSize (栈大小,0 表示默认)
"Ptr", CallbackCreate(ThreadFunc), ; lpStartAddress (线程函数地址)
"Ptr", 0, ; lpParameter (传递给线程函数的参数)
"UInt", 0, ; dwCreationFlags (创建标志,0 表示立即运行)
"UInt*", 0, ; lpThreadId (线程 ID,可以为 0)
"Ptr" ; 返回值类型 (线程句柄)
)
; 检查线程是否创建成功
if (hThread == 0) {
ErrorCode := DllCall("Kernel32\GetLastError")
MsgBox("Failed to create thread! Error code: " ErrorCode)
ExitApp
}
; 启动 CATIA 命令
CATIA.StartCommand("lsdkjf") ;通过错误命令, catia会弹出一个消息框提醒未知命令. Setimer无法关闭.
; 等待线程结束
DllCall(WaitForSingleObject, "Ptr", hThread, "UInt", 0xFFFFFFFF)
; 关闭线程句柄
DllCall(CloseHandle, "Ptr", hThread)
ExitApp
CATIA := ComObjActive("CATIA.Application")
; 定义 WinAPI 函数
CreateThread := "Kernel32\CreateThread"
WaitForSingleObject := "Kernel32\WaitForSingleObject"
CloseHandle := "Kernel32\CloseHandle"
; 定义 等待 函数的调用,而不使用自带Sleep函数
Pause(milliseconds) {
DllCall("kernel32.dll\Sleep", "UInt", milliseconds)
}
; 线程函数
ThreadFunc(Param) {
Loop 10 {
Pause(2000) ;如果用AHK的Sleep会阻塞线程.
GroupAdd("弹窗标题", "超级输入消息")
GroupAdd("弹窗标题", "Power Input Message")
winID := WinExist("ahk_group 弹窗标题")
if winID != 0 {
PostMessage(0x0010, 0, 0, , winID) ; 0x0010 是 WM_CLOSE 消息, 测试不能使用WinClose, 会阻塞线程.
break
}
}
return 0 ; 返回 DWORD 类型
}
; 创建线程
hThread := DllCall(
CreateThread,
"Ptr", 0, ; lpThreadAttributes (安全属性,通常为 0)
"UInt", 0, ; dwStackSize (栈大小,0 表示默认)
"Ptr", CallbackCreate(ThreadFunc), ; lpStartAddress (线程函数地址)
"Ptr", 0, ; lpParameter (传递给线程函数的参数)
"UInt", 0, ; dwCreationFlags (创建标志,0 表示立即运行)
"UInt*", 0, ; lpThreadId (线程 ID,可以为 0)
"Ptr" ; 返回值类型 (线程句柄)
)
; 检查线程是否创建成功
if (hThread == 0) {
ErrorCode := DllCall("Kernel32\GetLastError")
MsgBox("Failed to create thread! Error code: " ErrorCode)
ExitApp
}
; 启动 CATIA 命令
CATIA.StartCommand("lsdkjf") ;通过错误命令, catia会弹出一个消息框提醒未知命令. Setimer无法关闭.
; 等待线程结束
DllCall(WaitForSingleObject, "Ptr", hThread, "UInt", 0xFFFFFFFF)
; 关闭线程句柄
DllCall(CloseHandle, "Ptr", hThread)
ExitApp