马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
窗口句柄 = 获取窗口句柄(进程句柄, 0)
这条命令获取的窗口句柄有误,没办法只能自己找相关的东西解决
使用了 @sam7894604 鬼玺大神的代码
http://bbs.tyuyan.net/forum.php?mod=viewthread&tid=54566&highlight=%E9%AC%BC
- 功能 进程ID获取窗口句柄(进程ID,窗口名)
- 变量 句柄集 = EnumWindows()
- 如果(是否数组(句柄集))
- 变量 窗口数量 = 数组大小(句柄集)
- 变量 进程PID = API_内存申请(32767), 返回值 = 0
- 遍历(变量 i = 0; i < 窗口数量; i ++)
- //调试输出(句柄集[i] & "," & windowgetcaption(句柄集[i]))
- dllcall("user32.dll", "long", "GetWindowThreadProcessId", "long", 句柄集[i], "long", 进程PID)
- //调试输出(地址取值(进程PID, "long"))
- 如果(进程ID == 地址取值(进程PID, "long") &&windowgetcaption(句柄集[i]) == 窗口名)
- 返回值 = 句柄集[i]
- 跳出
- 结束
- 结束
- API_内存释放(进程PID)
- 返回 返回值
- 结束
- 结束
- function EnumWindows()
- var 局_返回 = array()
- var 局_函数指针 = callbackmalloc("__EnumFunc", "enumwindowsproc")
- var 局_变量指针 = getvarpointer(局_返回)
- if(局_函数指针 && 局_变量指针)
- if(dllcall("User32.dll", "long", "EnumWindows", "callback", 局_函数指针, "long", 局_变量指针))
- callbackfree(局_函数指针)
- return 局_返回
- end
- end
- callbackfree(局_函数指针)
- return null
- end
- function EnumChildWindows(参_父句柄)
- var 局_返回 = array()
- var 局_函数指针 = callbackmalloc("__EnumFunc", "enumwindowsproc")
- var 局_变量指针 = getvarpointer(局_返回)
- if(局_函数指针 && 局_变量指针)
- if(dllcall("User32.dll", "long", "EnumChildWindows", "long", 参_父句柄, "callback", 局_函数指针, "long", 局_变量指针))
- callbackfree(局_函数指针)
- return 局_返回
- end
- end
- callbackfree(局_函数指针)
- return null
- end
- function __EnumFunc(hwnd, lParam)
- var 局_关联
- if(!pointergetvar(lParam, 局_关联))
- return false
- elseif(!isarray(局_关联))
- return false
- elseif(windowisvisual(hwnd) && strlen(windowgetcaption(hwnd)))
- arraypush(局_关联, hwnd)
- end
- return true
- end
- 功能 API_内存申请(大小) //GlobalAlloc 堆栈分配
- 返回 动态库调用("Kernel32.dll", "int", "GlobalAlloc", "int", 0, "int", 大小)
- 结束
- 功能 API_内存释放(hMem) //GlobalFree 堆栈释放
- 返回 动态库调用("Kernel32.dll", "int", "GlobalFree", "int", hMem)
- 结束
复制代码
|