• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

返回列表 12345678» / 65
发新话题 回复该主题

☆☆☆★★★ 窗口基础 ★★★☆☆☆ [复制链接]

1#
本帖最后由 361度 于 2015-3-13 18:44 编辑

窗口基础


前言
  本人学编程以来,看过的编程方面的书籍没有一本详细介绍窗口的,都是讲如何操作窗口,对于窗口是什么、窗口的结构、窗口的位置、窗口的关系、窗口的状态、窗口的信息,没见过有哪本书详细介绍了,本人根据几年的编程经验,通过各种对窗口操作的说明逆向归纳出这些东西,希望对不了解这些东西的人有些帮助。

窗口是什么?
  窗口是用户与应用程序之间交互的界面。

一、窗口的结构
您所在的用户组无法下载或查看附件
您所在的用户组无法下载或查看附件

  窗口的组成:窗口由窗口客户区和窗口非客户区构成,窗口客户区通常是主要的工作区域。窗口非客户区结构有窗口标题栏、窗口边框、最小化按钮、最大化按钮/还原按钮、关闭按钮、窗口图标、菜单栏。不是所有窗口都有这些,可能只有其中的一部分。
  窗口插件增强版中GetWindowInfo函数可获得窗口边框范围和窗口客户区范围。

二、窗口的位置
  窗口的屏幕坐标:窗口左上角在屏幕中的位置。屏幕坐标坐标使用平面直角坐标系,屏幕左上角为原 点(即直角坐标系的(0,0)点),和常规的直角坐标系有点区别,横轴向右为正向,纵轴向下为正向。
  窗口插件增强版中GetWindowInfo函数可获得窗口边框范围里可取得窗口屏幕坐标。

您所在的用户组无法下载或查看附件

  窗口客户区坐标:窗口客户区坐标使用平面直角坐标系,以窗口客户区左上角为原 点(即直角坐标系的(0,0)点),和常规的直角坐标系有点区别,横轴向右为正向,纵轴向下为正向。
  窗口插件增强版中GetWindowInfo函数可获得窗口客户区范围里可取得窗口客户区原 点在屏幕中的坐标。ClientToScreen函数也可以获得窗口客户区原 点在屏幕中的坐标。

  窗口Z序:顶层窗口之间,或者一个窗口的兄弟窗口之间,如果有重叠部分,哪个在上面哪个在下面呢?这个就是窗口Z序,类似于三维直角坐标系的Z轴,只是它没有具体的坐标值,只有前后的排序,所以叫Z序。无论是否重叠,都有前后的排序,只是不重叠的时候看不出来。

三、窗口的关系
您所在的用户组无法下载或查看附件

  窗口是顶层窗口,顶层窗口也叫顶级窗口。依附在其它窗口中的窗口是被依附窗口的子窗口,被依附的窗口是依附窗口的父窗口,同一个父窗口中的几个子窗口是兄弟窗口。子窗口可以还有子窗口,父窗口也可以还有父窗口。窗口的关系就像家族中的关系一样,顶层窗口就像创始人一样,家族由他建立。子窗口、子子窗口、子子子窗口……,就相当于儿子、孙子、曾孙……。父窗口、父父窗口、父父父窗口就相当于父亲、爷爷、曾祖父……。父子的关系无论是对人还是对窗口都是相对的。一个窗口的子窗口(不确定)、子子窗口、子子子窗口……可以称为它的后代窗窗口,对于这个后代窗口是否包括直接的子窗口不太确定,微软是这么说的:“……一个窗口的子窗口或者后代窗口”,于是我就晕了,或许是我语文没学好,这里后面说的后代窗口都包括子窗口。一个窗口的父窗口、父父窗口、父父父窗口……可以称为祖先窗口。不同的顶层窗口就像不同家族之间一样,关系不是很紧密,前后左右通常可以自由移动,一个关闭了不会影响另一个(所有者窗口除外)。图中①是顶层窗口,②④⑤是①的子窗口,③是②的子窗口,①是②④⑤的父窗口,②是③的父窗口。①是③的祖先窗口,③是①的后代窗口。②④⑤共一个父窗口①,所以②④⑤是兄弟窗口。如果一个窗口看起来在另一个窗口中,未必是另一个窗口的子窗口,也可能是兄弟窗口,它们只是重叠在一起。

您所在的用户组无法下载或查看附件

  所有者窗口:所有者窗口就像附属国所附属的国家。多个所有者窗口可以共一个顶层窗口,一个窗口的所有者窗口还可以有所有者窗口,它们都是顶层窗口。所有者窗口关闭,其所有的窗口也会关闭。所有者窗口通常在其所有的窗口后面。图中“无标题 - 记事本”窗口是“关于 "记事本"”窗口的所有者窗口。

  窗口插件增强版中GetWindow函数可获得父窗口、子窗口、兄弟窗口、顶层窗口、所有者窗口。

四、窗口的状态
  最大化、最小化状态就不说了,大家都知道。窗口还原是恢复最大化和最小化的窗口。

您所在的用户组无法下载或查看附件

  窗口激活:窗口的激活状态是针对顶层窗口的,真正处于激活状态的窗口只有一个,激活状态的窗口或者它的后代窗口可接受前台键盘输入。激活状态的窗口边框颜色和任务栏上的对应的按钮(如果有的话)都会变颜色,但窗口边框变了颜色未必就是激活状态的按钮,大多数情况下看窗口边框来判断是准确的。

您所在的用户组无法下载或查看附件

  窗口焦点:拥有激活状态的窗口或者其后代可接受前台键盘输入,那如果它有后代窗口,它和它的后代窗口到底是哪个接受键盘输入呢?这个就是拥有焦点的窗口。拥有焦点的窗口有的为了表示它拥有了焦点,会有些显示上的变化来区别它,比如:有的会有虚线框,有的会显示一个闪动的光标等等。就像窗口的激活状态一样,真正拥有焦点的窗口也只有一个。

  窗口的可见与不可见:窗口的不可见就是完全看不见那个窗口。如果一个窗口不可见,那么它的后代窗口也都不可见。

  窗口的可用与不可用:不可用的窗口无法接受前台键盘鼠标输入。如果一个窗口不可用,那么它的后代窗口也都不可用。有的窗口为了表示自己不可用,上面显示的文字和图像会变成灰色。

  窗口只读:窗口只读是针对文本框的,这个状态的文本框,不可以前台修改文本框的内容。

  窗口置顶:窗口置顶是顶层窗口的状态,这个状态的窗口总在其它窗口前面(除了同样是置顶的窗口)。

  窗口插件增强版中GetWindowState函数和获得窗口各种状态,SetWindowState函数可设置窗口各种状态。

五、窗口的信息
  窗口句柄:窗口有很多,每个窗口都有窗口标题,但是窗口标题可以重复,如果区分不同窗口呢?于是就有了窗口句柄,窗口句柄就像身份证号一样,姓名可以重复,但是身份证号不会重复,窗口句柄也是这样。每个窗口创建的时候都会生成一个窗口句柄,当窗口关闭后该窗口句柄也会变得无效。每个窗口对应的真实窗口句柄是不可修改的。程序通过窗口句柄对窗口进行操作。
窗口插件增强版中获得窗口句柄的函数有:
函数名功能
GetForegroundWindow获得当前窗口句柄
GetForegroundFocus获得当前拥有焦点的窗口句柄
GetMousePointWindow获得鼠标指向的窗口句柄
GetMousePointWindowS获得鼠标指向的窗口句柄
GetPointWindow获得包含了指定点的窗口句柄
GetPointWindowS获得包含了指定点的窗口句柄
EnumWindowA获得符合条件的所有窗口句柄
EnumWindowT获得符合条件的所有顶层窗口句柄
FindWindow查找窗口
FindWindowEx查找窗口
FindWindowId根据窗口ID查找子窗口
FindChildWindowZOrder根据窗口Z序查找子窗口

  窗口标题:对于顶层窗口,通常是窗口标题栏上显示的内容。子窗口也有窗口标题,子窗口将窗口标题用在其它地方,比如:窗口客户区显示的文字。

  窗口类名:这个类类似于种类,比如人类、牛类、猫类……,每个种类都有相似的基因,人、牛、猫……是他们的类名。窗口类也一样,同一个窗口类名有相同的代码,但具体到个体上可以通过设置样式让他们表现得不同。但有的人不满足已定的样式,想对他们做些修改,如果说设置样式是化妆的话,这个类似于整容和改造,所以即使拥有相同的类名也未必都用相同的外貌和特性。窗口创建后,窗口类名是不可修改的。

  窗口ID:这个是用于父窗口来识别子窗口的。如果说窗口句柄是身份证号,窗口标题是名字,窗口ID就是小名了。一些子窗口的窗口标题有显示文字的作用,就不能用它来识别子窗口了,而且窗口标题可以很长,识别也不方便,于是就使用类似于身份证号的内部编号来区别子窗口,它是内部使用的,所以对不是同一个父窗口的子窗口来说,他们即使重复了也没关系。兄弟窗口的窗口ID是可以重复的,不过对于要操作的窗口窗口ID不要重复,除非你不操作这些子窗口或者不使用窗口ID来识别子窗口。

  窗口进程、窗口线程:窗口进程和窗口线程是创建这个窗口的进程和线程。什么是进程,什么是线程,这里就不讲了,不知道的去查资料或者到网上搜索。

  窗口插件增强版中GetWindowInfo函数可获得窗口的各种信息。

六、常见问题
1.游戏窗口中的小窗口取不到窗口句柄怎么办?
答:游戏窗口中的小窗口通常是游戏绘制的,并不是真实的窗口,因此取不到窗口句柄,就像在一张纸中画了一张纸却无法将纸中画的纸拿出来。

    已有9评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/10/5 18:38:45 执行 审核帖子 操作
    2#

    阿瓦打我的娃

    3#

    编程方面的书籍没有一本详细介绍窗口

    4#

    看看学习了

    5#

    能不能看懂呢

    6#

    学习下!学习下!

    7#

    666666666666666

    8#


    9#

    为了玩个游戏我也是拼……

    10#

    咳咳看看~

    11#

    nnnnnnnnnnnnnnnnnnnn

    12#

    asdfgqergwerg

    13#

    1111111111111

    14#

    1111111111111111111

    15#

    学校

    16#

    0-正在研究

    17#

    给力的361度插件

    18#


    19#

    顶,很好用

    20#

    电饭锅

    发新话题 回复该主题