TC官方合作论坛

 找回密码
 立即注册
查看: 1648|回复: 7

窗口得到前台顶层窗口(),窗口得到前台活动窗口()

[复制链接]
发表于 2017-5-21 19:40:04 来自手机 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 剑仙十号 于 2017-6-29 18:58 编辑

窗口得到前台顶层窗口(),窗口得到前台活动窗口()


获得当前激活的窗口句柄
tc使用哪个命令?

说得明白一些:
获取(前台窗口,活动窗口,被激活的窗口)
获取_带有深蓝色_标题栏的那个前台窗口。
不是获取_带有浅蓝色_标题栏的其它后台窗口。
中文代码是那个。英文代码是那个。
//
答:
窗口句柄=窗口.顶层窗口句柄()
顶层句柄=转换.整型转字符型(窗口句柄)
辅助.消息框(顶层句柄)
执行结果:得到当前活动的窗口句柄  721486

使用 顶层窗口这名字。怀疑TC做错了。
//
大漠
查找符合类名或者标题名。前后台的窗口都可以获取。
函数简介:
查找符合类名或者标题名的顶层可见窗口
函数原型:
long FindWindow(class,title)
参数定义:
class 字符串: 窗口类名,如果为空,则匹配所有. 这里的匹配是模糊匹配.
title 字符串: 窗口标题,如果为空,则匹配所有.这里的匹配是模糊匹配.
返回值:
整形数:
整形数表示的窗口句柄,没找到返回0
示例:
hwnd = dm.FindWindow("","记事本")

看上面,大漠插件对顶层窗口的解释。
顶层窗口就是父窗口,主窗口。
TC把它做错了。建议修复。
=======================================================

天使
查找符合类名或者标题名。前后台的窗口都可以获取。
函数简介:
查找符合类名或者标题名的顶层可见窗口
函数原型:
int FindWindow(string class,string title)
参数定义:
class 字符串: 窗口类名,如果为空,则匹配所有. 这里的匹配是模糊匹配.
title 字符串: 窗口标题,如果为空,则匹配所有.这里的匹配是模糊匹配.
返回值:
整型数:
整型数表示的窗口句柄,没找到返回0
示例:
hwnd = ts.FindWindow("","记事本")

看上面,天使插件 对顶层窗口的解释。
顶层窗口就是父窗口,主窗口。
TC把它做错了。建议修复。
修改成 获取当前激活的窗口句柄()
=======================================================
回复

使用道具 举报

 楼主| 发表于 2017-5-21 19:41:04 来自手机 | 显示全部楼层
@♡い** @云工程师04(技术解答)

上面这个错误,如果不注意看,根本看不出来。
回复 支持 反对

使用道具 举报

发表于 2017-5-22 11:08:49 | 显示全部楼层
我想你是没搞清楚关系,TC中获得窗口句柄,针对不同窗口有不同的命令,父窗口,子窗口,控件窗口,当前活动窗口,父窗口又有针对性
假设一个软件,TC最开始创建的窗口,我们暂且叫它A,针对于由此窗口衍生的窗口,暂且叫它B,控件也可以看做一个窗口,暂且叫他C
那么A就是B的父窗口,B是A的子窗口,不管是A窗口还是B窗口,哪个窗口处于激活状态就是当前活动窗口,至于控件窗口C,它在哪个窗口上创建的,哪个窗口就是它的父窗口
获取句柄的命令有很多,方式也不同,缕清各自的关系用起来就轻松

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 15:21:42 来自手机 | 显示全部楼层
花落莫相离 发表于 2017-5-22 11:08
我想你是没搞清楚关系,TC中获得窗口句柄,针对不同窗口有不同的命令,父窗口,子窗口,控件窗口,当前活动 ...

变量 窗口句柄=窗口得到顶层窗口句柄()
var hwnd=windowgetactivehwnd()
//
对顶层窗口的理解,
大漠插件没有做错,天使插件也没有做错。
TC确实写错,理解错了。
TC把windowgetactivehwnd()也译错了。
active,活动的。这个函数译成中文:
变量 窗口句柄=窗口得到当前活动窗口句柄()

建议修正这个BUG。
理由记录在楼下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 15:22:05 来自手机 | 显示全部楼层
本帖最后由 剑仙十号 于 2017-5-23 15:23 编辑

=======================================================
百度搜索:
什么叫顶层窗口? 在窗口方面还有常看到"Z序",这又是什么意思?
推荐回答
可以独立存在的窗口叫顶层窗口,
非顶层窗口是指不可以独立存在的窗口,必须依附在顶层窗口中。
chinaucoo  2007-05-09

2017-05-22 18:25:46  稳定。
按上面的理解,整个窗口界面就是顶层窗口。
顶层窗口,既可以是前台的,又可以是处在后台的。

2017-05-22 18:28:16  稳定。
如果在桌面内打开了10个程序,普遍来说,就有了10个顶层窗口。

2017-05-22 18:29:16 隨 緣(469973297)
顶层就像运动员的金牌

2017-05-22 18:30:57  永生之人(1653600973)
我的理解是,顶层窗口是屏幕最前面那个,其他的不是。

2017-05-22 18:31:39  永生之人(1653600973)
应该说是顶层窗口,顶层窗口1,顶层窗口2,顶层窗口3 这样的父窗口,

2017-05-22 18:31:52  month(187277820)
只要是完整的窗口,里面就有一个顶层窗口。
这是相对子窗口来说的,顶层窗口是最后一个父窗口。

2017-05-22 18:32:55  永生之人(1653600973)
如果全部都是顶层窗口,怎么分辨,

2017-05-22 18:33:49  month(187277820)
一个窗口里面,只有一个顶层窗口


=======================================================
书评:
当前活动窗口,就是你当前操作的窗口,一般就是最前面的窗口。
活动窗口,又分为进程内_线程级的,系统内_进程级的。
//
进程内_线程级的活动窗口,是指被激活的顶层窗口当中:主窗口,子窗口,孙窗口的任一个。这三个哪一个被激活了,那个就是活动窗口。
active-有道翻译
英 ['æktɪv]  美 ['æktɪv]
adj. 积极的;活跃的;主动的;有效的;现役的
n. 主动语态;积极分子
获取当前活动窗口的句柄,使用系统API:GetActiveWindow()
//
顶层窗口有多个,如前台的顶层窗口,后台的:顶层窗口1,顶层窗口2,顶层窗口3……
.
系统内_进程级的活动窗口,是指被激活的顶层窗口。标题栏为深蓝的顶层窗口。 一般称为前台窗口。
foreground-有道翻译
英-['fɔːgraʊnd]美-['fɔrɡraʊnd]
释义
n. 前景;最显著的位置
计算机科学技术:
前台,前景
短语
foreground mode前台方式,前台操作方式
foreground operation前台操作

获取前台顶层窗口的句柄,使用系统API:GetForegroundWindow()
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 15:25:01 来自手机 | 显示全部楼层
本帖最后由 剑仙十号 于 2018-7-14 22:05 编辑

重要。活动窗口输入焦点控件句柄的方法

leevans
获取活动窗口输入焦点控件句柄的方法
发表于2012/3/4 15:31:14  1724人阅读
分类: SDK/API

GetForegroundWindow函数只能获取Windows当前焦点窗口(也可以叫活动窗口)的句柄,如果需要获取该窗口中焦点控件句柄,就需要用到下面这段代码:
HWND hForeWnd = GetForegroundWindow();//获得当前激活的窗口句柄
DWORD dwSelfThreadId = GetCurrentThreadId();//获取本身的线程ID
DWORD dwForeThreadId = GetWindowThreadProcessId(hForeWnd, NULL);//根据窗口句柄获取线程ID
AttachThreadInput(dwForeThreadId, dwSelfThreadId, true);//附加线程
HWND hFocus = GetFocus();//获取具有输入焦点的窗口句柄
AttachThreadInput(dwForeThreadId, dwSelfThreadId, false);//取消附加的线程
hFocus就是焦点控件的句柄。
需要说明的一点,在测试过程中,以上代码对网页不起作用,其它窗口OK!

另外需要提醒一下,
GetForegroundWindow 和 GetActiveWindow 函数的区别:
GetActiveWindow 只是获取当前程序中(严格地说是线程中)被激活的窗口
GetForegroundWindow 是获取当前系统中被激活的窗口
两个函数的级别是不一样的, 一个是线程级、一个是系统级。
0 0
上一篇 下一篇

书评:
GetActiveWindow 只是获取当前程序中(严格地说是线程中)被激活的窗口。如主窗口,子窗口,孙窗口三者当中,被激活的那一个。三者选其一。
获取当前程序 的线程中,被激活的窗口。
.
GetForegroundWindow 是获取系统中,前台_顶层窗口句柄。
顶层窗口,又叫主窗口。
就是前台窗口,主窗口的句柄。
获取系统_窗口队列中,被激活的窗口。
.
两个函数的级别是不一样的, 一个是线程级,一个是桌面级,系统级。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 15:26:42 来自手机 | 显示全部楼层

顶层窗口,是不是 当前活动窗口?

在窗口层次关系中,桌面窗口下一层的窗口叫做顶层窗口。
顶层窗口就是那些不是子窗口的窗口,顶层窗口不能够有WS_CHILD属性。

当前活动窗口又分系统的和线程(进程)
系统的通过 GetForegroundWindow
线程的通过 GetActiveWindow
被激活的窗口不一定是最上面的窗口(顶层窗口)。
http://m.blog.csdn.net/article/details?id=53350638

回复 支持 反对

使用道具 举报

发表于 2017-5-24 09:49:10 | 显示全部楼层
要是按字眼扣的话,确实不妥,顶层窗口不一定是活动窗口
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-4-29 19:24 , Processed in 0.039484 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表