Windows基础数据类型

2.1万 未经授权,禁止转载了解课程
课程介绍
讨论{{interaction.discussNum ? '(' + interaction.discussNum + ')' : ''}}
适合人群
1、有一定工作经验想进一步提升的学员 2、有一定编程经验对windows感兴趣的同学
你将会学到
课程囊括的windows相关很多的学习知识点:MFC、进程及线程、WinAPI、SDK、数据类型…… 通过该课程的学习结合windows项目课程完成windows相关项目
课程简介

NT结构

  • 它是指一系列微软设计及制造, 由Windows NT所派生出的视窗操作系统架构.

NT架构的运行流程为:


  • 软件载入用户态

  • 从用户态载入核心态

  • 对硬件进行操作

  • 用户态我们也称之为 RING3, 它是我们平时所用的.

  • 核心态我们也称之为 RING0, 它是操作系统平时用的.

  • Alt NT结构图

Windows API

  • Windows提供了一套程序开发接口, 全名叫做 Application Programming Interface, 即应用程序编程接口.

  • 它有 R0 API 和 R3 API

  • WindowsAPI是向下兼容的

  • 为了实现向下兼容, 在有新的函数的时候, 通常会加一个Ex

    • 比如, MessageBox, 有新函数叫 MessageBoxEx

SDK

  • 软件开发工具包(Software Development Kit, SDK)一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、作业系统等创建应用软件的开发工具的集合.

  • SDK全称为 Software Development Kit.

MFC

  • MFC是一套框架

  • 它是微软提供的, 用于在C++环境下编写用于程序的一个框架和引擎

  • 它可以说是 WinAPI 和 C++ 结合后的再一次封装

  • 它属于应用程序框架

Windows API的分类

基础服务(Base Services)

  • 提供对Windows系统可用的基础资源的访问接口.

    • 文件系统(file system)

    • 外部设备(device)

    • 进程(process)

    • 线程(thread)

    • 访问注册表(Windows registry)

    • 错误处理机制(error handling)

图形设备接口(GDI)

  • 提供输出图形内容到显示器, 打印机以及其他外部输出设备.

图形化用户界面(GUI)

  • 提供创建和管理屏幕和大多数基本控件(control)

    • 比如按钮和滚动条

  • 接收鼠标和键盘输入

  • 其他与GUI有关的功能

通用对话框链接库(Common Dialog Box Library)

  • 为应用程序提供标准对话框

    • 比如打开/保存文件对话框

    • 颜色对画框

    • 字体对话框等等.

通用控件链接库(Common Control Library)

  • 为应用程序提供接口来访问操作系统提供的一些高级控件.

    • 比如状态栏(status bar)

    • 进度条(progress bars)

    • 工具栏(toolbar)

    • 标签(tab)

Windows外壳(Windows Shell)

  • 作为Windows API的组成部分, 不仅允许应用程序访问Windows外壳提供的功能, 还对之有所改进和增强.

网络服务(Network Services)

  • 为访问操作系统提供的多种网络功能提供接口

    • 它包括NetBIOS

    • Winsock

    • NetDDE

    • RPC

    • ...

Web相关API

  • Internet Explorer网页浏览器也提供许多程序接口

    • 一组图像过滤组件

    • 利用COM对象为应用程序提供解析URL服务

    • 应用程序也可以为其他程序提供自己的URL处理程序

    • 位于shdocvw.dll和mshtml.dll之中

    • 可嵌入的网页浏览器控件(以及 Trident / MSHTML 引擎)

    • urlmon.dll中的命名服务(URL moniters service)

    • WinInet IE的网络层,支持HTTP和HTTPS等协议

    • 一个支持多种语言文本的链接库(mlang.dll)

    • DirectX Transforms

    • XML支持(MSXML组件)

  • Windows的邮件功能相关的API

    • 在Windows 7取消邮件功能之后也随之从Windows API中去除

    • 由于Windows Mail在Windows Vista上取代了Outlook Express, 对应的API也随之变化.

    • 地址本和邮件API

多媒体相关API

  • 自从Windows 95 OSR2以来, Microsoft把DirectX API作为Windows安装的一部分.

  • DirectX提供一组松散相关的多媒体和游戏服务

    • 自DirectX 9以来, 相比Direct3D更倾向于后者

    • 因为Direct3D提供更多面的高性能图形功能(毕竟2D渲染只是3D渲染的(不严格)子集).

    • 已被Direct2D替代。

    • Direct3D可以作为OpenGL的替代, 来访问3D加速硬件.

    • DirectDraw提供硬件加速2D framebuffer(帧缓冲)访问接口.

  • DirectSound提供底层次的硬件加速声卡访问.

    • 被XAudio替代

  • DirectInput用来与输入设备(摇杆和gamepad)进行通信

    • 已被DirectX 9中引入的XInput所替代

  • DirectPlay提供一个多人游戏的架构(multiplayer gaming infrastructure).

    • 它已经被DirectX 9所替代

    • Microsoft不建议用它开发游戏。

  • DirectShow可以创建和运行通用的多媒体管道(generic multimedia pipelines)

    • 它可以与GStreamer框架相媲美

    • 经常被用来渲染游戏视频和创建媒体播放器(Windows Media Player

    • 诸如FFDShow之类的编解码器正是基于此;

    • 在Windows Vista及更高版本中, DirectShow被Media Foundation替代).

    • 不建议用DirectShow开发游戏

  • DirectMusic提供类似MIDI的功能

    • 与DirectSound一起被XAudio替代

程序通信API

  • Windows API的功能主要通过使操作系统和应用程序之间的交互来实现.

    • 为了实现不同Windows应用程序的通信, 微软随着主要Windows API, 推出一系列的技术.

    • 最初的DDE(Dynamic Data Exchange)升级为对象连接与嵌入(Object Linking and Embedding)

    • 再后来是组件对象模型(COM)

封装库

  • 微软利用许多更底层的Windows API函数, 开发出许多封装库(wrapper), 让应用程序以更抽象的方式与Windows API进行交互.

  • MFC(Microsoft Foundation Class Library)用C++ 类别来封装Windows API的功能,因而允许用更为面向对象的方式与API进行交互

  • ATL(Active Template Library)是对COM的面向模板(template oriented)的封装

  • WTL(Windows Template Library)作为ATL的增强,被用来作为MFC的轻型的替代物

  • 其他**的封装库是Borland公司的产品, 为了与MFC竞争而推出的OWL(Object Windows Library)提供了类似的面向对象封装

    • 不久Borland又推出VCL(Visual Component Library)来取而代之

  • 大多数的Windows 程序框架(application framework)是对Windows API的封装

    • .NET Framework、Java以及其他在Windows下的程序语言, 都是(或者包含)封装库.

Windows API入门

我们使用Visual Studio系列软件在进行Windows程序开发的时候, VS会默认的给我们进行一些附加库的添加.
Alt VS默认附加库
所以, 我们只需要添加 #include 就可以在我们的项目中使用Windows的API了.
Alt VS程序

Windows.h

它包含了Windows里大量我们常用的API函数

  • Windows.h 是一个特别重要的头文件, 它包含了其他Windows头文件, 这些头文件的某些也包含了其他头文件.

    • WinDef.h

    • WinNT.h

    • WinBase.h

    • WinUser.h

    • WinGDI.h

WinDef.h

Windows基础类型定义头文件

WinNT.h

Unicode支持头文件

WinBase.h

Kernel函数头文件

WinUser.h

用户态(Ring3)接口头文件

WinGDI.h

图形设备接口头文件

……

展开更多
发布
头像

{{ item.user.nick_name }} {{ EROLE_NAME[item.user.identity] }}

置顶笔记
讨论图
{{ item.create_time }}回复
  • 删除

    是否确认删除?

    确认
    取消
  • {{ item.is_top == 1 ? '取消置顶' : '置顶'}}

    已有置顶的讨论,是否替换已有的置顶?

    确认
    取消
{{ tag.text}}
头像
{{ subitem.user.nick_name }}{{ EROLE_NAME[subitem.user.identity] }}
{{ subitem.create_time }}回复
删除

是否确认删除?

确认
取消
发布
{{pageType === 'video' ? '讨论区抢占沙发,可获得双倍学分' :'讨论区空空如也,你来讲两句~'}}
发布
{{tips.text}}
{{ noteHeaderTitle }} 笔记{{ hasMyNote ? '我的笔记' : '记笔记' }}
{{ hasMyNote ? '我的笔记' : '记笔记' }}
优质笔记
更新于:{{ $dayjs.formate('YYYY-MM-DD HH:mm:ss', item.last_uptime*1000) }}
头像
{{ detail.username }}

公开笔记对他人可见,有机会被管理员评为“优质笔记”

{{ noteEditor.content.length }}/2000

公开笔记
保存
提问

讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。

记录时间点
记录提问时视频播放的时间点,便于后续查看
公开提问
提交