Windows简介:
1:windows都是向下兼容的。每一台电脑都有自己的OS系统,会提供一些函数,用于操作硬件。硬件和软件开始分离开了,很久以前,硬件和程序是一一对应的。
2:应用程序和硬件之间的就是操作系统。OS是一个特殊的软件,必须按照特定的规定编写,这样软件才可以在操作系统上面操作硬件。它里面有专门操作硬盘的,专门操作显卡的,专门操作内存的……,电脑的软件分工越来越明确。
3:发现不是每个人都可以都有编码和系统打交道,所以就出现了MS_DOS,提供了很多命令行给用户,方便用于与计算机之间沟通。
4:乔布斯发明了一套基于图形界面的操作系统,并将专利免费提供给了微软,出现了图形界面系统。
5:内核:NT10.0指的是操作硬件的能力,每次发布的新系统都会向下兼容,如果有新特性的函数,就发布成EX版本函数,这样会导致老旧的函数越来越多,新系统对老旧函数的支持性就会逐渐变差,这就是很多老版本软件在新系统下兼容不好的原因,如果保存所有老旧的函数,就会让系统变得越来越臃肿。
6:关于Windows的问题的准确答案只能在MSDN上面找,其他的答案都只能是作为参考答案。
Windows版本经历时期:
1:16位图形用户界面
1:不算是操作系统,还是直接与物理内存打交道。
2:16位和32位混合操作系统
算正式的操作系统。微软进入基于NT的结构时代,16位已经用的很少了。
3:32位操作系统:
基于NT结构的。
4:64位操作系统:
基于NT结构的,64位Windows NT架构系统,分别支持IA-64(和惠普一起开发的)架构和x64架构的两种不同版本。
位数:CPU的计算能力将有CPU的位数来决定,64位比32位块更多是在浮点数运算很快。
现在计算机发展的瓶颈不在于CPU的位数,而在于I/O操作上,现在发展的多数在于固态硬盘,内存等,很久以后也可能会出现128位的操作系统。
32位CPU上不可以安装64未的操作系统。
NT结构:
1:所有的程序都运行在内存中(电脑中的内存,称为物理内存),包括OS等,如果在软件中使用了错误的内存地址,修改到了这种核心程序的东西,就会导致其他程序的数据被更改,导致对应程序可能崩溃,直接操作物理内存风险是非常大的。在WindowsNT之前都是直接操作物理内存,WindowsNT之后就分为了用户态和和核心态,它是通虚拟内存管理程序实现。虚拟内存中程序在执行的时候会正确地加载到物理内存。我们写的程序都是在用户态,发现可以执行才会转到核心态。这样确保程序崩溃后操作系统并不会崩溃。所以以前的95,98系统很容易出现操作系统崩溃,蓝屏等。
2:流程为:软件 -> 用户态 -> 核心态 -> 硬件。用户态又称为Ring3层,核心态又称为Ring0层。
3:硬盘上面的程序是不可以执行的,CPU是在内存中取数据,硬盘的数据取到CPU中,就需要先加载到内存。
用户态:平时我们能作用到的。
核心态:操作系统作用到的。
Windows与编程语言:
1:Windows API:
OS在硬件之中抽象了一层接口。操作系统暴露出来的全部函数称为API。
2:SDK/API/MFC:
SDK:软件开发工作包,是有厂商提供的,比如讯飞提供的语音识别的SDK、QT。可以认为API是SDK里面的一部分,还包括对应的文档,库等
API:仅仅指提供的函数。
MFC:不是SDK也不是API,称之为框架/引擎。是对WindowsAPI进行了一层封装。把SDK里面的东西做成有组织的代码,只需要做少量改动就可以实现需要的,这个就称之为框架。Windows下还有很多框架,不只是MFC。
Windows API分类:
MFC封装了下面大部分东西。Windows API全部会超过2000多个。
1:基础服务(Base Services):
文件系统:包括文件的读写,C语言的文件操作函数是属于语言层级的,他最终会调用文件系统的,否则我们没办法来操作文件。
外部设备:USB等外部设备,都有API接口。
进程:应用程序启动就会进入一个进程,是Windows下的单位,对正运行的一个程序打包了一块空间。可以启动一个进程和关闭进程。
线程:一个程序不仅仅是空间,还有运行状态,这些就是由线程来管理。进程和线程就可以实现多任务处理机制。线程的启动关闭销毁在程序中。
注册表:是Windows的一个配置表,存在于配置系统之中。主要用来修改操作系统的设置。API会对注册表进行增删改查。
错误处理机制:
注意:这些API都是通过DLL来提供,32位下的kernel32.dll和advapi.dll。
2:图形设备接口(GDI):
输出图形内容到显示器、打印机以及其他输出设备。32位下在gdi32.dll里面。GDI的效率不高,是一个WindowsAPI,每一台电脑都有。多用于做界面
3:图形化用户界面(GUI):
创建和管理屏幕和大多数基本控件,比如按钮和滚动条。
接收鼠标和键盘的输入,以及其他与GUI有关的功能。
在user32.dll里面。
4:通用对话框链接库(Common Dialog Box Library):
打开/保存文件对话框、颜色对话框和字体对话框等等。comctl32.dll里面。
5:通用控件链接库(Common ControlLibrary):
状态栏:
进度条:
工具条:
标签:
6:Windows外壳(Windows Shell):
作为Windows API组成部分,不仅允许应用程序访问Windows外壳提供的功能,还对之有所改进和增强。
7:网络服务(Network Services):
为访问操作系统提供了多种网络功能提接口。包括NetBIOS,Winsock,NetDEE及RPC等
8:多媒体相关API:
封装库:
MFC:用C++封装的Windows API的功能,因而允许用更为面向对象的方式进行交互。
ATL:是对COM面向模板的封装。
WTL:是对ATL的增强,被用来作为MFC的轻型替代物。
OWL:Borland推出的为与MFC竞争的产品,OWL提供了类似的面向对象封装。
VCL:Borland推出的,取代OWL。
大多数Windows程序框架是对Windows API的封装,因而 .NET Framework、Java以及其他在Windows下的程序语言,都是(或包含)封装库。
Windwos API入门:
1:新建Win32程序的时候,VS编译器会默认将一些东西包含进去了,在连接器里面可以看到。只需要包含windows.h就可以使用Windows API了。在非VS下,需要自己指定链接库,包含目录等,这样也可以使用WindowsAPI。
![](https://img-blog.csdn.net/20170505130820195?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzE2MjI2MDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意:里面总共包含了很多项(VS2013):
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
2:MessageBox包含很多版本,A版本是窄字节版本,W是宽字节版本,EXW是最新的W版本(扩展的),他们参数有少量差别。
3:window.h里面包含了windows里面所有的API。
4:
#include <windows.h>
int main()
{
MessageBoxW(NULL, L"你好", L"MessageBoxW", MB_YESNO | MB_ICONQUESTION);
MessageBoxExW(NULL, L"你好", L"MessageBoxExW", MB_YESNO | MB_ICONQUESTION, SUBLANG_DEFAULT);
//这些API放在user32.dll下面。windows.dll里面没包含了很多的库。
return 0;
}