Windows 窗口程序结构详解

本文详细介绍了Windows窗口程序的结构,包括基础知识如Windows SDK、句柄、消息的概念,以及程序结构中的窗口对象、消息泵和消息处理函数。通过示例代码展示了如何创建并运行第一个窗口程序,适合开发者和逆向工程师学习。
摘要由CSDN通过智能技术生成

引言

  • 众所周知,我们只要使用Windows的操作系统,必然离不开Windows的界面程序,无论是用什么语言(c 、c++、汇编、或是易语言),什么编译器,只要是带图形界面的PE文件,运行时必然带有Windows子系统,也就是说,遵循Windows界面程序的结构。
  • 那么,我们如果掌握了这个结构,无论是逆向还是开发,都会显得更加游刃有余。这也是我跟大家分享这个结构的原因,当然,如有任何错误,欢迎指正。

一、一些基础知识的介绍

  1. 什么是Windows SDK?

    • 微软推出的包含了开发该windows版本所需的windows函数和常数定义、API函数说明文档、相关工具和示例。
    • 总结起来,我们如果要在Windows上编程,离不开这玩意儿。
  2. 什么是句柄?

    • 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。
  3. 什么是消息?

    • 在Windows中发生的一切都可以用消息来表示,消息用于告诉操作系统发生了什么,所有的Windows应用程序都是消息驱动的。
    • 换而言之,消息就是Windows程序运行的核心,我们对窗口的所有操作,包括点击,输入,都是会产生一个消息的,而程序就是不断处理我们产生的消息,从而实现不同的操作。
    • 有些大佬调试时候喜欢直接断消息,其实也就是用的这个原理
  4. 如何使用和查看Windows API?

    • Windows API是微软提供给我们在Windows下编程的接口,API丰富多彩,能做到的事情也很丰富。当然,如果熟悉了常见API函数的结构,对后期的逆向分析,代码注入或者HOOK也有很大的帮助。
    • 查看:百度-》API函数名-》MSDN-》翻译
    • 使用:程序中包含"Windows.h",直接调用即可。

二、Windows程序的结构

  1. 窗口对象

    • 用于在系统中标识该窗口,窗口的信息全部存放于其中,需要在系统中注册(使用RegisterClass函数)

    • 结构:

      typedef struct tagWNDCLASSA {
             
        UINT      style;            //窗口类的风格
        WNDPROC   lpfnWndProc;    //指向窗口过程的指针(重要)
        int       cbClsExtra;        //分派给窗口类的拓展的字节数
        int       cbWndExtra;        //分派给窗口实例的扩展的字节数
        HINSTANCE hInstance;        //实例句柄
        HICON     hIcon;            //类图标的句柄
        HCURSOR   hCursor;        //类鼠标指针的句柄
        HBRUSH    hbrBackground;    //刷新背景所用画刷的句柄
        LPCSTR    lpszMenuName;    //窗口类包含的菜单的资源
        LPCSTR    lpszClassName;    //窗口类名(重要)
      } WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
      
  2. 窗口

    • 根据窗口对象实际显示出来的窗口,需要根据窗口对象创建,创建成功后,返回一个句柄,也是该窗口的标识
    • 使用CreateWindow
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值