TC官方合作论坛
标题:
关于 获取窗口句柄() 获取句柄有误的代替方法
[打印本页]
作者:
fpx90
时间:
2016-4-26 16:55
标题:
关于 获取窗口句柄() 获取句柄有误的代替方法
窗口句柄 = 获取窗口句柄(进程句柄, 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)
结束
复制代码
作者:
个人神话
时间:
2016-4-26 17:11
用哪个版本的TC呀?那么简单的功能不至于不准确吧?
作者:
fpx90
时间:
2016-4-26 18:02
个人神话 发表于 2016-4-26 17:11
用哪个版本的TC呀?那么简单的功能不至于不准确吧?
TC6.0 用这条命令获得的窗口句柄和spy++得到的不一样
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1