博客
关于我
窗口与线程的关系
阅读量:335 次
发布时间:2019-03-04

本文共 1073 字,大约阅读时间需要 3 分钟。

能产生消息的四种情况

在Windows系统中,消息的产生主要涉及以下四种情况:

  • 鼠标:鼠标的点击、拖动和滚动等操作会产生消息。
  • 键盘:键盘的按键按下和按住等动作会触发键盘事件。
  • 其他应用程序(进程间消息传递):通过SendMessage函数或其他 IPC机制,应用程序之间可以跨进程发送消息。
  • 操作系统的内核程序:内核程序负责处理底层的系统事件和异常。
  • 消息的传递路径

    在Windows系统中,消息是通过窗口和线程来传递的。当鼠标点击按钮时,消息会被发送到对应窗口所在线程的消息队列。值得注意的是,Windows系统启动了两个线程分别监听鼠标和键盘输入,这两个线程运行在0环中,与主程序无关。因此,即使主程序卡死,鼠标仍然可以正常移动。

    如何通过窗口找到消息队列

    要理解窗口的作用,首先需要了解窗口在哪。通过IDA调试工具分析user32.dll中的CreateWindow函数,可以追踪到窗口的创建过程。随后,调试步骤会进入0环,进一步分析窗口的具体信息。

    关于窗口的一切数据都位于0环中,包括窗口的创建、显示以及消息处理。因此,窗口的信息非常重要。

    窗口对象的结构

    窗口对象在0环中以_WINDOW_OBJECT的结构体形式存在。该结构体包含以下信息:

    • 所属线程信息,通过PTHREADINFO pti可以知道当前窗口所属哪个线程。
    • 窗口的各种属性,如窗口类、父窗口、子窗口等。

    需要注意的是,窗口中的按钮等控件也是窗口的一部分,即使它们是子控件,也会被系统视为独立的窗口对象。因此,一个线程可能会拥有多个窗口对象。

    子窗口控件

    Windows系统提供了多种预定义的窗口类,称为子窗口控件(controls),这些控件可以独立处理消息,并在自身状态发生变化时通知父窗口。常见的控件类型包括:

  • 按钮(Button):用于触发事件。
  • 复选框(Checkbox):用于选择或取消选项。
  • 编辑框(Edit):用于文本输入。
  • 静态字符串标签(Static):用于显示文本或图像。
  • 滚动条(ScrollBar):用于调整窗口大小。
  • 窗口对象中还包含Wnd成员,用于存储窗口的各种属性,如窗口风格、父窗口信息、子窗口信息等。

    窗口对象的特殊性

    Windows系统将窗口对象放在0环中,这意味着:

  • 窗口句柄是全局的,所有进程共享同一个句柄表。
  • 窗口对象的操作不依赖于进程或线程。
  • 窗口的创建和管理完全由内核负责,不需要线程通信机制。
  • 总结

  • 窗口是在0环中创建的。
  • 窗口句柄是全局的,可以被多个线程共享。
  • 每个窗口只能属于一个线程,但一个线程可以拥有多个窗口。
  • 转载地址:http://nsve.baihongyu.com/

    你可能感兴趣的文章
    Jupyter Notebook 暗色自定义主题
    查看>>
    [Python学习笔记]组织文件
    查看>>
    基于Redo Log和Undo Log的MySQL崩溃恢复流程
    查看>>
    从RocketMQ的Broker源码层面验证一下这两个点
    查看>>
    如何正确的在项目中接入微信JS-SDK
    查看>>
    纵览全局的框框——智慧搜索
    查看>>
    快服务流量之争:如何在快服务中占领一席之地
    查看>>
    【活动】直播揭秘<如何从0开发HarmonyOS硬件>
    查看>>
    Unity平台 | 快速集成华为性能管理服务
    查看>>
    详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
    查看>>
    对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
    查看>>
    使用Power BI构建数据仓库与BI方案
    查看>>
    pytest封神之路第二步 132个命令行参数用法
    查看>>
    Django认证系统并不鸡肋反而很重要
    查看>>
    快用Django REST framework写写API吧
    查看>>
    tep用户手册帮你从unittest过渡到pytest
    查看>>
    12张图打开JMeter体系结构全局视角
    查看>>
    Spring Boot 2.x基础教程:构建RESTful API与单元测试
    查看>>
    [UWP 自定义控件]了解模板化控件(1):基础知识
    查看>>
    UWP 自定义控件:了解模板化控件 系列文章
    查看>>